diff --git a/plugins/nginx/nginx_byprojects/README.md b/plugins/nginx/nginx_byprojects/README.md index d2b59505..7f93095f 100644 --- a/plugins/nginx/nginx_byprojects/README.md +++ b/plugins/nginx/nginx_byprojects/README.md @@ -6,35 +6,27 @@ Count the number of hits per projects/vhost. ![byproject_access](https://www.mantor.org/~northox/misc/munin-plugins/nginx_byprojects_access1-month.png "byproject_access") ## munin_byprojects_bandwidth -Count the total bandwidth used by each projects/vhost. [Logtail] (https://www.fourmilab.ch/webtools/logtail/) is required. +Count the total bandwidth used by each projects/vhost. [Logtail](https://www.fourmilab.ch/webtools/logtail/) is required. ![byproject_bandwidth](https://www.mantor.org/~northox/misc/munin-plugins/apache_byprojects_bandwidth-month.png "byproject_bandwidth") ## munin_byprojects_inout_bandwidth -Counts the in/out bandwidth used by each projects/vhost. [Logtail] (https://www.fourmilab.ch/webtools/logtail/) is required. +Counts the in/out bandwidth used by each projects/vhost. [Logtail](https://www.fourmilab.ch/webtools/logtail/) is required. ![byproject_inout_bandwidth](https://www.mantor.org/~northox/misc/munin-plugins/apache_byprojects_inout_bandwidth-month.png "byproject_inout_bandwidth") ## Installation The setup is pretty straight forward. First you need to configure the plugin: -Define the path to logtail: +In your munin plugin configuration file (for example, a new dedicated /etc/munin/plugin-conf.d/nginx_byprojects), configure the plugins : - $logtail = '/usr/local/bin/logtail'; + [byprojects_*] + env.logtail /usr/local/bin/logtail -Multiple logs can be used for the same project/vhost and a regular expression (regex) can be used as a filter: +Multiple logs can be used for the same project/vhost and a regular expression (regex) can be used as a filter. +Each log is defined in a dedicated environment variable, named env.site.[siteName]. The value is JSON formatted. - my %logs = ( - 'prod' => [ - {'path' => '/home/prod/log/access.log'} - ], - 'dev' => [ - {'path' => '/var/log/httpd/ssl-dev-access.log'}, - {'path' => '/home/dev/log/access*.log'} # glob is supported - ], - 'test' => [ - {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, - {'path' => '/home/test/log/access.log'} - ], - ); + env.site.prod [{"path":"/home/prod/log/access.log"}] + env.site.dev [{"path":"/var/log/httpd/ssl-dev-access.log"}, {"path":"/home/dev/log/access*.log"}] + env.site.test [{"path":"/var/log/access.log","regex":"\"[A-Z]+ /test/"}, {"path":"/home/test/log/access.log"}] In the previous example the prod project graph will be using everything in /home/prod/log/access.log. The test project will be using eveything in /home/test/log/access.log and stuff that match '"[A-Z] /test/' in /var/log/httpd/access.log (e.g. "GET /test/). @@ -42,5 +34,7 @@ Then link the file just as any other plugins. ln -s /usr/local/sbin/ /usr/local/etc/munin/plugins/ +And restart the munin-node service. + ## License MIT diff --git a/plugins/nginx/nginx_byprojects/byprojects_access b/plugins/nginx/nginx_byprojects/byprojects_access old mode 100644 new mode 100755 index 81d755dd..bc400504 --- a/plugins/nginx/nginx_byprojects/byprojects_access +++ b/plugins/nginx/nginx_byprojects/byprojects_access @@ -1,5 +1,6 @@ #!/usr/bin/perl -w use strict; +use JSON qw(decode_json); # # byprojects_access # @@ -23,25 +24,23 @@ use strict; # Test graph will be using everything file matching /home/test/log/access*.log # and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log # such as '"GET /test/' +# +# Configuration +# [byprojects_*] +# env.logtail_path /usr/local/bin/logtail +# env.site.prod [{"path":"/home/prod/log/access.log"}] +# env.site.dev [{"path":"/var/log/httpd/ssl-dev-access.log"}, {"path":"/home/dev/log/access*.log"}] +# env.site.test [{"path":"/var/log/access.log","regex":"\"[A-Z]+ /test/"}, {"path":"/home/test/log/access.log"}] my $server = 'Nginx'; my $statepath = $ENV{MUNIN_PLUGSTATE}; -my $logtail = '/usr/local/bin/logtail'; +my $logtail = $ENV{logtail_path} || '/usr/local/bin/logtail'; -my %logs = ( - 'prod' => [ - {'path' => '/home/prod/log/access.log'} - ], - 'dev' => [ - {'path' => '/var/log/httpd/ssl-dev-access.log'}, - {'path' => '/home/dev/log/access*.log'} # glob is supported - ], - 'test' => [ - {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, - {'path' => '/home/test/log/access.log'} - ], -); +my @loglist = grep {$_ =~ /site\./} keys(%ENV); +my %envLogs = %ENV{@loglist}; +my %logs; +while(my($k, $v) = each %envLogs) { @logs{substr($k, 5)} = decode_json($v); } ########### diff --git a/plugins/nginx/nginx_byprojects/byprojects_bandwidth b/plugins/nginx/nginx_byprojects/byprojects_bandwidth old mode 100644 new mode 100755 index 1ccce21a..af245e96 --- a/plugins/nginx/nginx_byprojects/byprojects_bandwidth +++ b/plugins/nginx/nginx_byprojects/byprojects_bandwidth @@ -1,5 +1,6 @@ #!/usr/bin/perl -w use strict; +use JSON qw(decode_json); # # byprojects_bandwidth # @@ -29,26 +30,23 @@ use strict; # Test graph will be using everything file matching /home/test/log/access*.log # and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log # such as '"GET /test/' +# +# Configuration +# [byprojects_*] +# env.logtail_path /usr/local/bin/logtail +# env.site.prod [{"path":"/home/prod/log/access.log"}] +# env.site.dev [{"path":"/var/log/httpd/ssl-dev-access.log"}, {"path":"/home/dev/log/access*.log"}] +# env.site.test [{"path":"/var/log/access.log","regex":"\"[A-Z]+ /test/"}, {"path":"/home/test/log/access.log"}] my $server = 'Nginx'; my $statepath = $ENV{MUNIN_PLUGSTATE}; -my $logtail = '/usr/local/bin/logtail'; - -my %logs = ( - 'prod' => [ - {'path' => '/home/prod/log/access.log'} - ], - 'dev' => [ - {'path' => '/var/log/httpd/ssl-dev-access.log'}, - {'path' => '/home/dev/log/access.log'} - ], - 'test' => [ - {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, - {'path' => '/home/test/log/access.log'} - ], -); +my $logtail = $ENV{logtail_path} || '/usr/local/bin/logtail'; +my @loglist = grep {$_ =~ /site\./} keys(%ENV); +my %envLogs = %ENV{@loglist}; +my %logs; +while(my($k, $v) = each %envLogs) { @logs{substr($k, 5)} = decode_json($v); } ########### diff --git a/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth b/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth old mode 100644 new mode 100755 index 8f02826b..21b36902 --- a/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth +++ b/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth @@ -1,5 +1,6 @@ #!/usr/bin/perl -w use strict; +use JSON qw(decode_json); # # byprojects_inout_bandwidth # @@ -29,26 +30,23 @@ use strict; # Test graph will be using everything file matching /home/test/log/access*.log # and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log # such as '"GET /test/' +# +# Configuration +# [byprojects_*] +# env.logtail_path /usr/local/bin/logtail +# env.site.prod [{"path":"/home/prod/log/access.log"}] +# env.site.dev [{"path":"/var/log/httpd/ssl-dev-access.log"}, {"path":"/home/dev/log/access*.log"}] +# env.site.test [{"path":"/var/log/access.log","regex":"\"[A-Z]+ /test/"}, {"path":"/home/test/log/access.log"}] my $server = 'Nginx'; my $statepath = $ENV{MUNIN_PLUGSTATE}; -my $logtail = '/usr/local/bin/logtail'; - -my %logs = ( - 'prod' => [ - {'path' => '/home/prod/log/access.log'} - ], - 'dev' => [ - {'path' => '/var/log/httpd/ssl-dev-access.log'}, - {'path' => '/home/dev/log/access.log'} - ], - 'test' => [ - {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, - {'path' => '/home/test/log/access.log'} - ], -); +my $logtail = $ENV{logtail_path} || '/usr/local/bin/logtail'; +my @loglist = grep {$_ =~ /site\./} keys(%ENV); +my %envLogs = %ENV{@loglist}; +my %logs; +while(my($k, $v) = each %envLogs) { @logs{substr($k, 5)} = decode_json($v); } ###########