This is an old revision of the document!
Table of Contents
Using HTTP for passive checks
Using cmd.cgi
This description is valid for Nagios 3.
In situations, where you cannot use send_nsca
for submitting passive check results over the network, you can use the Nagios web interface. You need an http account
- Allowed to access nagios by your webserver, normally accomplished with Basic Auth and htpasswd.
- Allowed to submit passive check results via cgi, this can be done either by
- via dedicated permissions on the host(s) and service(s) in question
or
- Allowed to view all services/hosts1) via
/etc/nagios3/cgi.cfg
- Allowed to submit commands for all services/hosts2) via
/etc/nagios3/cgi.cfg
At least if you are going to use dedicated permissions, you need to define a nagios contact, that might look like:
define contact{ contact_name passive_via_http alias passive_via_http service_notification_period never host_notification_period never service_notification_options n host_notification_options n service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email }
Assuming you have your credentionals for the account http_remote saved in either ~/.wgetrc
or ~/.netrc
, this example will submit a passive check result for the service TEST on host localhost in status UNKNOWN3):
wget -O - \ --user=passive_via_http \ --auth-no-challenge \ --no-check-cert \ 'https://<nagios-server>/cgi-bin/nagios3/cmd.cgi'\ '?cmd_typ=30'\ '&cmd_mod=2'\ '&host=localhost'\ '&service=TEST'\ '&plugin_state=3'\ '&plugin_output=Test+mit+wget+II'\ '&btnSubmit=Commit'
Of course, in a large environment with appropriate security needs, you would write a PHP script that is restricted to write passive checks.
Using PHP
If you prefer a separate PHP script, this may serve as a skeleton:
<?php $nsca_host="localhost" ; $send_nsca="/usr/sbin/send_nsca" ; ?> <HTML> <HEAD> <TITLE>http nsca reciever</TITLE> </HEAD> <BODY> <?php $log_fh=fopen("/tmp/nsca.php.log","a") ; fwrite($log_fh,'========= BEGIN ============'."\n"); while (list ($key, $val) = each ($_REQUEST)) { print htmlentities("$key = '$val'")."<BR>\n"; fwrite($log_fh,"$key = '$val'\n"); } $host = $_REQUEST['host'] ; $service = $_REQUEST['service'] ; $state = $_REQUEST['state'] ; $msg = $_REQUEST['msg'] ; $nsca_fh=popen($send_nsca.' -H '.$nsca_host,"w") ; fwrite($nsca_fh,sprintf("%s\t%s\t%s\t%s\n",$host,$service,$state,$msg)); fwrite($log_fh,sprintf("%s<T>%s<T>%s<T>%s\n",$host,$service,$state,$msg)); pclose($nsca_fh); fwrite($log_fh,'========= END ============'."\n"); fclose($log_fh); ?> </BODY> </HTML>