mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 18:41:03 +00:00
- have some dirs
This commit is contained in:
parent
0b089ea777
commit
08346aac58
687 changed files with 0 additions and 0 deletions
103
plugins/apache/apache_average_time_last_n_requests
Executable file
103
plugins/apache/apache_average_time_last_n_requests
Executable file
|
@ -0,0 +1,103 @@
|
|||
#!/usr/bin/perl -w
|
||||
# $Id$
|
||||
# Author: Nicolas Mendoza <nicolasm@opera.com> - 2008-06-18
|
||||
#
|
||||
# Monitors the average time requests matching a custom regexp takes
|
||||
# For instance monitor time execution of files in http://example.com/foo/bar,
|
||||
# requests from google, images etc.
|
||||
#
|
||||
# Simply add an entry in the 'type' hashref and modify the description fields
|
||||
# for munin, and make the 'matches' member contain a subref that returns
|
||||
# true if a request matches, parameters are a list containing the request
|
||||
# split on spaces.
|
||||
#
|
||||
# NOTE: You need to add a field in your Apache logs showing time executed.
|
||||
# This is normally done using the %T (seconds) or %D (microseconds)
|
||||
# For instance:
|
||||
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %T %v"
|
||||
# Check http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats for more info
|
||||
|
||||
use strict;
|
||||
|
||||
my $LAST_N_REQUESTS = 100000; # calculate based on this amount of requests
|
||||
my $ACCESS_LOG_PATTERN = '/var/log/apache2/access.log.*'; # log pattern, if many it will take the last one.
|
||||
my $TIME_FIELD_INDEX = -2; # second last field
|
||||
|
||||
my $config =<< "CONFIG"
|
||||
graph_title Apache average seconds last $LAST_N_REQUESTS requests
|
||||
graph_args --base 1000
|
||||
graph_scale no
|
||||
graph_vlabel Average request time
|
||||
graph_category Apache
|
||||
graph_info This graph shows average request times for the last $LAST_N_REQUESTS requests
|
||||
CONFIG
|
||||
;
|
||||
|
||||
my $types = {
|
||||
# any kind of request
|
||||
total => {
|
||||
munin_fields => {
|
||||
label => 'All requests',
|
||||
draw => 'LINE2',
|
||||
info => 'Average seconds per any request',
|
||||
},
|
||||
sum => 0,
|
||||
lines => 0,
|
||||
matches => sub {
|
||||
return 1;
|
||||
},
|
||||
},
|
||||
|
||||
# image requests
|
||||
images => {
|
||||
munin_fields => {
|
||||
label => 'Image requests',
|
||||
draw => 'LINE2',
|
||||
info => 'Average seconds per image request',
|
||||
},
|
||||
sum => 0,
|
||||
lines => 0,
|
||||
matches => sub {
|
||||
my ($fields) = @_;
|
||||
my $script;
|
||||
($script = $fields->[6]) =~ s/\?.*\z //mx;
|
||||
return $script =~ m{ \.(png|jpe?g|jpg|gif|tiff|ilbm|tga) \z }mx;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
if (defined(@ARGV) && ($ARGV[0] eq 'config')) {
|
||||
|
||||
print $config;
|
||||
|
||||
foreach my $type (keys %{$types}) {
|
||||
foreach my $key (keys %{$types->{$type}->{'munin_fields'}}) {
|
||||
printf "%s.%s %s\n", ($type, $key, $types->{$type}->{'munin_fields'}->{$key});
|
||||
}
|
||||
}
|
||||
exit(0);
|
||||
}
|
||||
|
||||
my $config_file = `ls -1 $ACCESS_LOG_PATTERN | tail -n 1`;
|
||||
|
||||
chomp $config_file;
|
||||
|
||||
my @lines = `tail -n $LAST_N_REQUESTS "$config_file"`;
|
||||
|
||||
foreach my $line (@lines) {
|
||||
foreach my $type (keys %{$types}) {
|
||||
my @fields = split /\s+/, $line;
|
||||
if ($types->{$type}->{'matches'}(\@fields)) {
|
||||
$types->{$type}->{'sum'} += $fields[$TIME_FIELD_INDEX];
|
||||
$types->{$type}->{'lines'}++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach my $type (keys %{$types}) {
|
||||
my $value = $types->{$type}->{'lines'} ? $types->{$type}->{'sum'} / $types->{$type}->{'lines'} : 'U';
|
||||
printf "%s.value %s\n", ($type, $value);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue