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

or

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
$state_str=array( 0 => 'OK'     , 
                  1 => 'WARN'   ,
                  2 => 'CRIT'   ,
                  3 => 'UNKNOWN') ;
$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");
?><H2>Input</H2><?php
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'] ;
?><H2>Output</H2><?php
$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.' ('.$state_str[$state].')',$msg));
printf("<TABLE BORDER=1><TR><TD>Host</TD><TD>Service</TD><TD>State</TD><TD>Message</TD></TR>".
       "<TR><TD>%s</TD><TD>%s</TD><TD>%s</TD><TD>%s</TD></TR></TABLE>\n",$host,$service,$state.' ('.$state_str[$state].')',$msg);
pclose($nsca_fh);

fwrite($log_fh,'========= END ============'."\n");
fclose($log_fh);
?>
</BODY>
</HTML>

Nagios Monitoring

1) , 2)
pick the one you need
3)
which is numerically 3