Home nagios---acknowledging-alerts-via-email
Post
Cancel

nagios---acknowledging-alerts-via-email

1. point an email address at your server. eg; nagios@yourserver.com

2. add a pipe to /etc/aliases;

eg;

 nagios:     "| /usr/local/nagios/libexec/eventhandlers/emailhandler.php"

3. run newaliases to rebuild alias file

4. add a symbolic link from /etc/smrsh to the script

eg

 ln -s /usr/local/nagios/libexec/eventhandlers/emailhandler.php /etc/smrsh/emailhandler.php

emailhandler.php:

#!/usr/bin/php

<?php ################################### # emailhandler.php # # ensure this command has setuid on # chmod u+s <command. # ###################################

function parse_subject($subject) { global $ishost, $isservice;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$bits = explode(" ", $subject);
if ($bits[1] == 'HOST')
    $ishost = true;
else
    $isservice = true;

unset($bits[0]);
unset($bits[1]);
if ($ishost)
{
    return(array($bits[3]));
} else {
    $host = $bits[2];
    unset($bits[2]);
    $service = implode(" ", $bits);
    return(array($host, $service));
}  }

function parse_sender($from) { $bits = split(“<|>

”, $from);

   foreach($bits as $bit)    {                 # strip out the sender         if (eregi("EMAILADDRESS.com", $bit))            return $bit;    } }

// read from stdin $fd = fopen("php://stdin", "r"); $email = ""; while (!feof($fd)) {     $email .= fread($fd, 1024); } fclose($fd);

$log = fopen("/tmp/incomingemail.log", "a+"); #fputs($log, "----- ORIGINAL -----\n"); #fputs($log, $email); #fputs($log, "----- END ORIGINAL -----\n\n\n"); 

// handle email $lines = explode("\n", $email);

// empty vars $from = ""; $subject = ""; $headers = ""; $message = ""; $splittingheaders = true; $message_complete = false; $commandfile = '/usr/local/nagios/var/rw/nagios.cmd'; $now = time(); 

for ($i=0; $i < count($lines); $i++) {    if (eregi("Original Message", $lines[$i]))        $message_complete = true;    if (!$message_complete)    {        if ($splittingheaders) {            // this is a header            $headers .= $lines[$i]."\n";

           // look out for special headers            if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {                $subject_array = parse_subject($matches[1]);                $hostname = $subject_array[0];            }            if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {                $from = parse_sender($matches[1]);            }        } else {            // not a header, but message            $message .= $lines[$i]."\n";        }

       if (trim($lines[$i])=="") {            // empty line, header section has ended            $splittingheaders = false;        }    } } $message .= " (ACK via email)"; $message = trim($message); $message = ereg_replace("\r|\n", " ", $message);

if ($isservice) {    $service = $subject_array[1];    $ack_cmd = '/usr/bin/printf "['.$now.'] ACKNOWLEDGE_SVC_PROBLEM;'.$hostname.';'.$service.';1;1;1;'.$from.';'.$message.'\n" > /usr/local/nagios/var/rw/nagios.cmd'; } if ($ishost) {    $ack_cmd = '/usr/bin/printf "['.$now.'] ACKNOWLEDGE_HOST_PROBLEM;'.$hostname.';1;1;1;'.$from.';'.$message.'\n" > /usr/local/nagios/var/rw/nagios.cmd'; }

fputs($log, "Running: \n$ack_cmd\n\n"); $output = shell_exec($ack_cmd." 2>&1"); fputs($log, $output); fclose($log);

?>

This post is licensed under CC BY 4.0 by the author.