Writing nagios plugins in perl
-
Upload
jose-luis-martinez -
Category
Technology
-
view
2.826 -
download
2
description
Transcript of Writing nagios plugins in perl
![Page 1: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/1.jpg)
Writing Nagios plugins with Perl help
Jose Luis Martinez
JLMARTIN
www.pplusdomain.net
![Page 2: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/2.jpg)
Nagios
What is Nagios?
![Page 3: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/3.jpg)
Nagios
• Monitoring tool that doesn’t know how tomonitor anything!?!?
– The real monitoring is done by plugins
• Just external programs with a defined interface tocommunicate with Nagios
• Written in any language
![Page 4: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/4.jpg)
Plugins
![Page 5: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/5.jpg)
Writing your plugins
![Page 6: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/6.jpg)
First rule
• Is it already done?
– www.nagiosplugins.org
• Nagios official plugins
– www.monitoringexchange.org
• User contributed
– exchange.nagios.org
• User contributed
– Google “xxx nagios”
![Page 7: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/7.jpg)
We’ll take a look at
• Nagios::Plugin
• Nagios::Plugin::DieNicely
• Nagios::Plugin::WWW::Mechanize
• Nagios::Plugin::SNMP• Nagios::Plugin::Differences
![Page 8: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/8.jpg)
Nagios::Plugin
• Lots of common functionality for free!
– When writing a plugin you have to
• Handle arguments
• Get and manipulate the data
• Calculate state (OK, WARNING, CRITICAL)• Output performance data
![Page 9: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/9.jpg)
Nagios::Plugin
• Lots of common functionality for free!
– When writing a good plugin you have to
• Handle arguments– Standard –v –h
– Help has to contain documentation
• Get and manipulate the data
• Calculate state (OK, WARNING, CRITICAL)– In f(x) of arguments -> STATE in a FLEXIBLE way
• Output performance data– And worry about the format
![Page 10: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/10.jpg)
That’s a lot of work
I just wanted to monitor my app!
![Page 11: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/11.jpg)
Nagios::Plugin
• Lots of common functionality for free!
– When writing a good plugin you have to
• Handle arguments– Standard –v –h
• Get and manipulate the data
• Calculate state (OK, WARNING, CRITICAL)– In f(x) of arguments -> STATE
• Output performance data– And worry about the format
![Page 12: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/12.jpg)
3 Simple Steps
• Setup
• Data collection
• State calculation
![Page 13: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/13.jpg)
Setup
• Just make an instance of N::P
• You’ve just obtained
– -t option (timeout)
– -v option (verbose)
– --help option
#!/usr/bin/perl
use Nagios::Plugin;
my $np= Nagios::Plugin->new(
'usage' => 'Usage: %s'
);
$np->getopts;
![Page 14: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/14.jpg)
Setup (II) Constructor options
• usage ("Usage: %s --foo --bar")
• version <- Version string
• url <- Help and Version
• blurb <- Help description
• license <- Help
• extra <- Help
• plugin <- overrides auto detected name
![Page 15: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/15.jpg)
Setup: GetOpt magic$np->add_arg(
spec=> 'warning|w=s',
help=> "-w, --warning=RANGE",
required=> 1
);
$np->add_arg(
spec => 'user|u=s',
help => 'Username',
default => 'www-data'
);
$np->getopts;
if($np->opts->user) { … }
![Page 16: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/16.jpg)
Collect dataNow you have to work
![Page 17: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/17.jpg)
State calculation
![Page 18: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/18.jpg)
Ranges
• Most plugins suppose that
– OK<WARNING<CRITICAL
• But… what if…
![Page 19: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/19.jpg)
Ranges
Range definition Generate alert if x…
10 Is not between 0 and 10
10: Is not between 10 and infinity
~:10 Is not between –Inf and 10
10:20 Is not between 10 and 20
@10:20 Is between 10 and 20
$code= $np->check_threshold(
check => $value,
warning => $warning_threshold,
critical => $critical_threshold
);
$np->nagios_exit( $code, "Thresholdcheckfailed" ) if ($code!= OK);
![Page 20: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/20.jpg)
Output status
• $np->nagios_exit(CRITICAL, “Too many connections”);
• $np->nagios_exit(OK, “OK”);
• $np->nagios_exit(WARNING, “Too few connections”);
• $np->nagios_exit(UNKNOWN, “Bad options”);
![Page 21: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/21.jpg)
Performance Data
$np->add_perfdata(
label => "size",
value => $value,
uom => "kB",
warning => $warning,
critical => $critical
);
UOM Unit of measurement Is for
No unit specified Assume a number of things
s,ms,us econds, miliseconds, nanoseconds
% Percentage
B,KB,MB,TB Bytes
c A continuous counter
![Page 22: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/22.jpg)
Nagios::Plugin::DieNicely
![Page 23: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/23.jpg)
Nagios::Plugin::DieNicely
• Using CPAN modules to monitor will make thishappen (eventually)
![Page 24: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/24.jpg)
Nagios::Plugin::DieNicely
• What happened?
![Page 25: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/25.jpg)
Nagios::Plugin::DieNicely
• What happened?
– Output went to STDERR
• Nagios doesn’t care
– Exit code follows Perls rules
• Nagios understands 0-3
![Page 26: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/26.jpg)
Nagios::Plugin::DieNicely
• use Nagios::Plugin::DieNicely
![Page 27: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/27.jpg)
Nagios::Plugin::WWW::Mechanize
Nagios::Plugin
+
WWW::Mechanize
![Page 28: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/28.jpg)
Nagios::Plugin::WWW::Mechanize
Nagios::Plugin
+
WWW::Mechanize
You where going to do it anyway!
![Page 29: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/29.jpg)
Nagios::Plugin::WWW::Mechanize
• Again... Just create an instance. Use it as a Nagios::Plugin object
• Automatically tracks response time for you
• $np->mech
• $np->content
• $np->get, $np->submit_form
![Page 30: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/30.jpg)
Nagios::Plugin::WWW::Mechanize
• A couple of tricks
– Gzipped content
– Proxy
my $np = Nagios::Plugin::WWW::Mechanize->new(
'mech' => WWW::Mechanize::GZip->new(autocheck => 0)
);
my $proxy = $np->opts->proxy;
if (defined $proxy){
$np->mech->proxy(['http', 'https'], $proxy);
}
![Page 31: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/31.jpg)
Nagios::Plugin::SNMP
Nagios::Plugin
+
Net::SNMP
![Page 32: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/32.jpg)
Nagios::Plugin::SNMP
• Again... Just create an instance. Use it as a Nagios::Plugin object
• Sets up a lot of arguments
• Does delta between values of counters
![Page 33: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/33.jpg)
A module in the works
• Nagios::Plugin::Differences
– In the works. Help out with continuously growingcounters
![Page 34: Writing nagios plugins in perl](https://reader034.fdocuments.in/reader034/viewer/2022042606/54b72ae44a795916198b47cf/html5/thumbnails/34.jpg)
Any Questions?
Thanks to:Ton Voon for his hard work on Nagios::Plugin
Icanhazcheezburger for the cats