NAME
Mojolicious::Plugin::Log::Elasticsearch - Mojolicious Plugin to log requests to an Elasticsearch instance
VERSION
version 1.152051
SYNOPSIS
# Config for your elasticsearch instance
my $config = { elasticsearch_url => 'http://localhost:9200',
index => 'webapps',
type => 'MyApp',
geo_ip_citydb => 'some/path/here.dat', # optional
log_stash_keys => [qw/foo bar baz/], # optional
};
# Mojolicious
$self->plugin('Log::Elasticsearch', $config);
# Mojolicious::Lite
plugin 'Log::Elasticsearch', $config;
DESCRIPTION
Mojolicious::Plugin::Log::Elasticsearch logs all requests to your app to an elasticsearch instance, allowing you to retroactively slice and dice your application performance in fascinating ways.
After each request (via after_dispatch
), a non-blocking request is made to the elasticsearch system via Mojo::UserAgent. This should mean minimal application performance hit, but does mean you need to run under hypnotoad
or morbo
for the non-blocking request to work.
The new Elasticsearch index is created if necessary when your application starts. The following data points will be logged each request:
ip
- IP address of requestorpath
- request pathcode
- HTTP code of responsemethod
- HTTP method of requesttime
- the number of seconds the request took to process (internally, not accounting for network overheads)
Additionally, if you supply a path to a copy of the GeoLiteCity.dat database file in the config key 'geo_ip_citydb
', and have the Geo::IP module installed, the following keys will also be submitted to Elasticsearch:
location - latitude and longitude of the city the IP address belongs to
country_code - two letter country code of the country the IP address belongs to
The city database can be obtained here: http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz.
If you specify an arrayref of keys in the log_stash_keys
configuration value, those corresponding values will be pulled from the request's stash (if present) and also sent to Elasticsearch.
When the index is created, appropriate types are set for the 'ip
', 'path
' and 'location
' fields - in particular the 'path
' field is set to not_analyzed so that it will not be treated as tokens separated by '/'.
METHODS
Mojolicious::Plugin::Log::Elasticsearch inherits all methods from Mojolicious::Plugin and implements the following new ones.
register
$plugin->register(Mojolicious->new);
Register plugin in Mojolicious application.
SEE ALSO
Mojolicious, Mojolicious::Guides, http://mojolicio.us, https://www.elastic.co.
AUTHOR
Justin Hawkins <justin@eatmorecode.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 by Justin Hawkins.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.