developing your own plugin with your imagination rodrigo faria email: [email protected]
TRANSCRIPT
![Page 2: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/2.jpg)
Introduction
• Developing your own plugin• Not much knowledge needed• Using models• Understanding output• Implementation examples • Conclusion
![Page 3: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/3.jpg)
Three Ways
Developing your own plugin
• First step: declare / get information
• Second step: core plugin / decision
• Third step: output / graphs & gauges
![Page 4: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/4.jpg)
Required Information Before First Step
Numeric Value Service Status Status Description
0 OK The plugin was able to check the service and it appeared to be functioning properly
1 WarningThe plugin was able to check the service, but it appeared to be above some "warning" threshold or did not appear to be working properly
2 Critical The plugin detected that either the service was not running or it was above some "critical" threshold
3 Unknown
Invalid command line arguments were supplied to the plugin or low-level failures internal to the plugin (such as unable to fork, or open a tcp socket) that prevent it from performing the specified operation. Higher-level errors (such as name resolution errors, socket timeouts, etc) are outside of the control of plugins and should generally NOT be reported as UNKNOWN states.
![Page 5: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/5.jpg)
Code Flow Example
RUN COMMAND
NAGIOS PROCESS PLUGINS
MONITORED SYSTEM
RETURN 0 1 2 3
RETURN SCRIPT
RUN SCRIPT
![Page 6: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/6.jpg)
First example: Real Estate Agency
Not interest Need online
Vendor
Vendor
Vendor
Vendor
Vendor
?Revenue
Boss
NAGIOS PROCESS
![Page 7: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/7.jpg)
First Step: Declare / Get Information
WGET Www.example.com/ teste.html
SNMPGET Query OID .1.3.6.1.4.1.6889.2.8.1.21.1.1.1
QUERY DB SELECT * FROM
![Page 8: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/8.jpg)
Simple PHP: Declare and Get Info
########################### HEADER PHP SCRIPT#!/usr/bin/env php<?php
########################### GET INFORMATION
$file=file_get_contents('/tmp/basimovelescriturado', true);
########################### DECLARE VARIABLE AND VALUES TO USE
$goal=100000000;$division = $file / $goal;$percentage = $division * 100;
![Page 9: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/9.jpg)
Second Step: Core Plugin / Decision
if ($percentage >= 60) { $output_msg = "GOAL REACHED = $percentage%, REACHED = $file Dollars"; $exit_code = 0; display_output($exit_code, $output_msg); } else if ($percentage >= 30) { $output_msg = "GOAL FINISHED IN $percentage for 60%, REACHED = $file Dollars"; $exit_code = 1; display_output($exit_code, $output_msg);} else { $output_msg = "GOAL NOT YET REACHED, REACHED = $file Dollars"; $exit_code = 2; display_output($exit_code, $output_msg);}
function display_output($exit_code, $output_msg) { print $output_msg; exit($exit_code);}
?>
![Page 10: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/10.jpg)
Third Step: Rules of Performance
Here is a breakdown of the performance data
The asterix (*) fields are required fields, everything else is optional. In this instance, rta in our case is percentage of goal
![Page 11: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/11.jpg)
Third step: Output
if ($percentage >= 60) { $output_msg = "GOAL REACHED = $percentage%, REACHED = $file Dollars"; $exit_code = 0; display_output($exit_code, $output_msg); } else if ($percentage >= 30) { $output_msg = "GOAL FINISHED IN $percentage for 60%, REACHED = $file Dollars"; $exit_code = 1; display_output($exit_code, $output_msg);}else { $output_msg = "GOAL NOT YET REACHED, REACHED = $file Dollars"; $exit_code = 2; display_output($exit_code, $output_msg);}
function display_output($exit_code, $output_msg) { print $output_msg; exit($exit_code);}
?>
![Page 12: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/12.jpg)
Third step: Output Performance
if ($percentage >= 60) { $output_msg = "GOAL REACHED = $percentage%, REACHED = $file Dollars | Goal-Monthly=$percentage%;30;60;0;100"; $exit_code = 0; display_output($exit_code, $output_msg); } else if ($percentage >= 30) { $output_msg = "GOAL FINISHED IN $percentage for 60%, REACHED = $file Dollars | Goal-Monthly=$percentage%;30;60;0;100"; $exit_code = 1; display_output($exit_code, $output_msg);}else { $output_msg = "GOAL NOT YET REACHED, REACHED = $file Dollars | Goal-Monthly=$percentage%;30;60;0;100"; $exit_code = 2; display_output($exit_code, $output_msg);}
function display_output($exit_code, $output_msg) { print $output_msg; exit($exit_code);}
?>
![Page 13: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/13.jpg)
Third Step: Output on Service View
![Page 14: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/14.jpg)
Third Step: What Can I Do ?
![Page 15: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/15.jpg)
RESULT with Nagvis
![Page 16: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/16.jpg)
RESULT with Nagios XI 2014
![Page 17: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/17.jpg)
Second Example: Tempture Sensor
![Page 18: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/18.jpg)
Before needs put Sensor Information in File
Runs modified plugin check_mssql with print only############# EXECUTE MANUAL
[root@nagiosxi libexec]# python check_mssql9090 -H sensorbox.db -d sbx -u SNMP -p snmpx
[(10, '0', 134), (10, '1', 528), (10, '2', 240), (10, '3', 125), (10, 'T0', 0), (10, 'T1', 0), (11, '2097', 240)]
For generate information, run command on cronjob to generate local file with information.
############# FOR CRON
*/5 * * * * nagios /usr/bin/python /scripts/check_mssqlOutput -H sensorbox.db -d sbx -u SNMP -p snmpx > /tmp/sensorwkve
############# WHERE FILE sensorwkve RECEIVE THE SAME VALUE ABOVE
![Page 19: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/19.jpg)
Generate OID in SNMP-EXTEND in snmp.conf
OUTPUT -> [(10, '0', 134), (10, '1', 528), (10, '2', 240), (10, '3', 125), (10, 'T0', 0), (10, 'T1', 0), (11, '2097', 240)]##### CUSTOMER ABCD######################### INTERNAL BATTERY#extend wkve.0050C24C0200.1 '/bin/cut -c12,13,14 /tmp/sensorwkve‘ ###### RESULT 134########################### EXTERNAL BATTERY#extend wkve.0050C24C0200.2 '/bin/cut -c28,29,30 /tmp/sensorwkve‘ ###### RESULT 528########################### POWER#extend wkve.0050C24C0200.3 '/bin/cut -c44,45,46 /tmp/sensorwkve‘ ###### RESULT 240########################### EXTERNAL ENERGY#extend wkve.0050C24C0200.4 '/bin/cut -c60,61,62 /tmp/sensorwkve‘ ########################### TEMPTURE#extend wkve.0050C24C0200.7 '/bin/cut -c109,110,111 /tmp/sensorwkve'################################################################################
![Page 20: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/20.jpg)
Check snmp answer
root@nagiosxi tmp]# /usr/bin/snmpwalk -v 2c –c public 65.18.25.24 1.3.6.1.4.1.8072NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.1" = STRING: 134NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.2" = STRING: 528NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.3" = STRING: 240NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.4" = STRING: 125NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.5" = STRING: 0NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.6" = STRING: 0NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wkve.0050C24C0200.7" = STRING: 240
![Page 21: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/21.jpg)
Discovery OID number with -On
[root@nagiosxi tmp]# /usr/bin/snmpwalk -On -v 2c -c L@s@S3ns0r 65.181.125.24 1.3.6.1.4.1.8072.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.49 = STRING: 134.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.50 = STRING: 528.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.51 = STRING: 240.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.52 = STRING: 125.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.53 = STRING: 0.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.54 = STRING: 0.1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.55 = STRING: 240
![Page 22: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/22.jpg)
Create shellscript with snmpwalk command
Create shell script to run snmpwalk:
cat /tmp/script.sh
/usr/bin/snmpwalk -On -v 2c -c L@s@S3ns0r .1.3.6.1.4.1.8072.1.3.2.3.1.2.19.119.107.118.101.46.48.48.53.48.67.50.52.67.48.50.48.48.46.55
![Page 23: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/23.jpg)
First Step: Declare / Get Information
#!/usr/bin/env php<?php$file = $output = shell_exec("/tmp/script.sh"); ###### TEMPTURE VALUE
![Page 24: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/24.jpg)
Second Step: Core Plugin / Decision
if ($file <= 025) { $output_msg = "OK: Tempture $file"; $exit_code = 0; display_output($exit_code, $output_msg); } else { $output_msg = "CRITICAL: Tempture High $file\n"; $exit_code = 2; display_output($exit_code, $output_msg);}
function display_output($exit_code, $output_msg) { print $output_msg; exit($exit_code);}
?>
![Page 25: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/25.jpg)
Third Step: Output
if ($file <= 050) { $output_msg = "OK: Tempture $file | Tempture=$fileDegree;30;50;0;100"; $exit_code = 0; display_output($exit_code, $output_msg); } else { $output_msg = "CRITICAL: Tempture High $file | Tempture=$fileDegree;30;50;0;100 \n"; $exit_code = 2; display_output($exit_code, $output_msg);}
function display_output($exit_code, $output_msg) { print $output_msg; exit($exit_code);}
?>
![Page 26: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/26.jpg)
Conclusion
• You can developer your own plugin
• Follow three steps
• Will be creative
• Use Nagios XI to the best visualization
![Page 27: Developing Your Own Plugin With Your Imagination Rodrigo Faria Email: rmfaria@ma.nagios.com](https://reader036.vdocument.in/reader036/viewer/2022081519/56649da95503460f94a97050/html5/thumbnails/27.jpg)
Questions?
Any questions?
Thanks!