root / plugins / other / morenin @ 31412baa
Historique | Voir | Annoter | Télécharger (3,71 ko)
| 1 | 926efac5 | Simon Avery | #!/usr/bin/perl |
|---|---|---|---|
| 2 | # |
||
| 3 | # Script by Simon Avery ( http://digdilem.org / digdilem@gmail.com ) to query munin.conf and collate various types of graphs on the same page from different machines. |
||
| 4 | # Eg - show all the load daily graphs for all your machines on one page. Review ALL your machines' disk space, memory, cpu, loads for the past day, week, month or year - one click! |
||
| 5 | # Reason: Makes it easier (for me!) to review a lot of machines (I have 28) for unusual patterns. |
||
| 6 | # |
||
| 7 | # Options - supply on the url: |
||
| 8 | # period=day / week (default: day) |
||
| 9 | # type = df / whatever (default:df) - which reporting type to use. |
||
| 10 | # scale=pixel (How many pixels wide to scale the graphs, override default with $cellwidth below |
||
| 11 | # |
||
| 12 | # Installation: |
||
| 13 | # 1. Copy this script to a webfolder of your choice, ensuring CGI is allowed there. |
||
| 14 | # 2. Edit the four variables below to suit your configuration. |
||
| 15 | # 3. Visit the script in your web browser. |
||
| 16 | # |
||
| 17 | # History: |
||
| 18 | # v.1 - 30 August, 2010: Initial release. |
||
| 19 | |||
| 20 | my $htmldir = '/internal/munin'; # What's the web address for munin's html dir? (Hint - where you normally go to see munin's overview) |
||
| 21 | my $cfgfile = '/etc/munin/munin.conf'; # Where's the config file - must be readable |
||
| 22 | my $numwide=5; # How many graphs to go wide per row? |
||
| 23 | my $default_cellwidth=350; # How many pixels wide for the graphs? (Default) |
||
| 24 | |||
| 25 | use CGI qw/:standard/; |
||
| 26 | my $q = CGI->new; |
||
| 27 | print $q->header() , $q->start_html('Morenin - Multiple server graphing tool');
|
||
| 28 | |||
| 29 | my $type = param("type") || 'df'; # Default type
|
||
| 30 | my $period = param("period") || 'day'; # Default period
|
||
| 31 | my $cellwidth = param("scale") || $default_cellwidth; # Default image scale
|
||
| 32 | |||
| 33 | my @list; # list of names |
||
| 34 | my $imgdir; # find from munin's conf |
||
| 35 | |||
| 36 | open(CFG,"<$cfgfile") or die("Can't open munin config file: $cfgfile - $!\n");
|
||
| 37 | while(<CFG>) {
|
||
| 38 | my $tidy = trim($_); |
||
| 39 | if ($tidy =~ /htmldir/i) { # Guess where the images are, so I can test whether to try and display them or not.
|
||
| 40 | $tidy =~ s/\t/ /g; |
||
| 41 | ($junk,$imgdir) = split(/ /,$tidy); |
||
| 42 | } |
||
| 43 | # search for identifier, Not very elegant, doesn't account for horribly done config files. |
||
| 44 | if ($tidy =~ m/^\[(.*)\]/) {
|
||
| 45 | push(@list,$1); |
||
| 46 | } |
||
| 47 | } |
||
| 48 | close(CFG); |
||
| 49 | sort(@list); # Sort it alpha-numerically |
||
| 50 | |||
| 51 | print "Morenin - graphing ".scalar(@list)." <a href=\"$htmldir\">Munin</a> graphs for type $type, period <b>$period</b>:\n"; |
||
| 52 | # Some default links - add more here if you want 'em |
||
| 53 | print qq~ |
||
| 54 | <a href="?type=$type&period=day">Daily</a> :: |
||
| 55 | <a href="?type=$type&period=week">Weekly</a> :: |
||
| 56 | <a href="?type=$type&period=month">Monthly</a> :: |
||
| 57 | <a href="?type=$type&period=year">Yearly</a> ...::... |
||
| 58 | |||
| 59 | <a href="?period=$period&type=load">Load</a> :: |
||
| 60 | <a href="?period=$period&type=cpu">CPU</a> :: |
||
| 61 | <a href="?period=$period&type=df">DiskUse</a> :: |
||
| 62 | <a href="?period=$period&type=memory">Memory</a> :: |
||
| 63 | <a href="?period=$period&type=mysql_queries">MySql</a> |
||
| 64 | ~; |
||
| 65 | |||
| 66 | if (! defined $htmldir) { print "<br>Error: Can't find htmldir from config, this isn't going to work..."; }
|
||
| 67 | |||
| 68 | # Now output the frames and links |
||
| 69 | my $widcnt=1; # Temp counter |
||
| 70 | print "<hr><table border=\"1\"><tr>\n"; |
||
| 71 | |||
| 72 | foreach $i (@list[1..$#list]) # Step through each entry |
||
| 73 | {
|
||
| 74 | next if (! -e "$imgdir/$i/$i-$type-$period.png"); # First check an image is there and not a null entry; |
||
| 75 | |||
| 76 | print "<td valign=\"top\">$i<br>"; |
||
| 77 | print "<a href=\"$htmldir/$i/$i-$type.html\" title=\"Click to visit server's $type page\">\n"; |
||
| 78 | print "<img src=\"$htmldir/$i/$i-$type-$period.png\" alt=\"$i-$type-$period.png\" width=\"$cellwidth\">"; |
||
| 79 | print "</a>\n"; |
||
| 80 | print "</td>\n"; |
||
| 81 | |||
| 82 | if ($widcnt++ >= $numwide) { print "</tr><tr>\n"; $widcnt=1; } # wrap the cells
|
||
| 83 | } |
||
| 84 | |||
| 85 | print "</tr></table>\n"; |
||
| 86 | |||
| 87 | $q->end_html; |
||
| 88 | |||
| 89 | sub trim($) |
||
| 90 | {
|
||
| 91 | my $string = shift; |
||
| 92 | $string =~ s/^\s+//; |
||
| 93 | $string =~ s/\s+$//; |
||
| 94 | return $string; |
||
| 95 | } |
