From a1f7808b9e613dd1f25ed85c621140dbdaef16f4 Mon Sep 17 00:00:00 2001 From: Neraud Date: Sat, 8 Jul 2017 10:36:46 +0200 Subject: [PATCH] Add configuration option for the logs setup --- plugins/nginx/nginx_byprojects/README.md | 19 +++++----------- .../nginx/nginx_byprojects/byprojects_access | 21 +++++++----------- .../nginx_byprojects/byprojects_bandwidth | 22 +++++++------------ .../byprojects_inout_bandwidth | 22 +++++++------------ 4 files changed, 29 insertions(+), 55 deletions(-) diff --git a/plugins/nginx/nginx_byprojects/README.md b/plugins/nginx/nginx_byprojects/README.md index f095a9b7..9791d8ca 100644 --- a/plugins/nginx/nginx_byprojects/README.md +++ b/plugins/nginx/nginx_byprojects/README.md @@ -21,21 +21,12 @@ In your munin plugin configuration file (for example, a new dedicated /etc/munin [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/). diff --git a/plugins/nginx/nginx_byprojects/byprojects_access b/plugins/nginx/nginx_byprojects/byprojects_access index 496a0137..85a8f986 100644 --- 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 # @@ -27,25 +28,19 @@ use strict; # 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 = $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 index 7e6d796b..409da6aa 100644 --- 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 # @@ -33,26 +34,19 @@ use strict; # 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 = $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'} - ], - '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_inout_bandwidth b/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth index 55358b47..7093aaf1 100644 --- 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 # @@ -33,26 +34,19 @@ use strict; # 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 = $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'} - ], - '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); } ###########