3 pliczki PHP, 4 wpisy do cron'a. Ciach bach i gotowe :)
Greetz dla Łukasza K. za pomysł ;)
last_time_up - dla hosta
last_time_ok - dla usługi
Jeśli host nie działa dłużej niż 40000 (timestamp) to skrypt, kieruję sprawę do zbiorczego maila i wysyła do managera.
Skrypt został zatwierdzony i dodany do katalogu Nagios Exchange
http://exchange.nagios.org/directory/Plugins/Notifications/notifications-for-manager/details
Link do źródeł http://sourceforge.net/projects/nagiosnotifi/
Poniżej źródła skryptów.
Plik check_nagios_host.php:
<?php
include("daty.php");
$plik = file_get_contents('/usr/local/nagios/var/status.dat');
$klamra = explode("hoststatus {",$plik);
$ile = count($klamra);
$messages ="";
for($i=0;$i<=$ile;$i++)
{
$regex_hostname = '/host_name=(.*)/';
@preg_match($regex_hostname, $klamra[$i], $matches_hostname);
$regex_time = '/last_time_up=(.*)/';
@preg_match($regex_time, $klamra[$i], $matches_time);
$data1=time();
@$data2=date("Y-m-d H:i:s",$matches_time[1]);
if(strlen(@$matches_hostname[1])>2)
{
$roznica_czas = $diff = dateDiff("now", $data2) . "\n"; // NORMANY CZAS
@$roznica_timestamp = strtotime(" +".$diff, $data2) . "\n"; // CZAS W TIMESTAMP
if($roznica_timestamp >40000)
{
echo 'ALARM ALARM ALARM';
echo "\n".$matches_hostname[1];
echo "\n".'NIE DZIALA OD: '.$roznica_czas;
$message .= "- Host $matches_hostname[1] nie dziala od $roznica_czas. \n";
}
}
}
$to = 'mail@mail.com';
$subject = 'Powiadomienie menadzerskie - SYSTEM MONITORINGU NAGIOS';
$message .= "\nProsze o reakcje!!! ";
$headers = 'From: nagios@mail.com' . "\r\n" .
'Reply-To: nagios@mail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers))
{
echo "\n Wiadomosc zostala wyslana \n";
}
?>
Plik check_nagios_service.php
<?php
include("daty.php");
$plik = file_get_contents('/usr/local/nagios/var/status.dat');
$klamra = explode("servicestatus {",$plik);
$ile = count($klamra);
$messages = "";
for($i=0;$i<=$ile;$i++)
{
$regex_hostname = '/host_name=(.*)/';
@preg_match($regex_hostname, $klamra[$i], $matches_hostname);
$regex_time = '/last_time_ok=(.*)/';
@preg_match($regex_time, $klamra[$i], $matches_time);
$data1=time();
@$data2=date("Y-m-d H:i:s",$matches_time[1]);
if(strlen(@$matches_hostname[1])>2)
{
$roznica_czas = $diff = dateDiff("now", $data2) . "\n"; // NORMANY CZAS
@$roznica_timestamp = strtotime(" +".$diff, $data2) . "\n"; // CZAS W TIMESTAMP
if($roznica_timestamp >40000)
{
echo 'ALARM ALARM ALARM';
echo "\n".$matches_hostname[1];
echo "\n".'NIE DZIALA OD: '.$roznica_czas;
$message .= "- Usluga $matches_hostname[1] nie dziala od $roznica_czas. \n ";
}
}
}
$to = 'mail@mail.com';
$subject = 'Powiadomienie menadzerskie - SYSTEM MONITORINGU NAGIOS';
$message .= "\nProsze o reakcje!!! ";
$headers = 'From: nagios@mail.com' . "\r\n" .
'Reply-To: nagios@mail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers))
{
echo "\n Wiadomosc zostala wyslana \n";
}
?>
Plik daty.php
<?php
// SRC FROM http://www.if-not-true-then-false.com/2010/php-calculate-real-differences-between-two-dates-or-timestamps/ - THX
// Set timezone
date_default_timezone_set("UTC");
// Time format is UNIX timestamp or
// PHP strtotime compatible strings
function dateDiff($time1, $time2, $precision = 1) {
// If not numeric then convert texts to unix timestamps
if (!is_int($time1)) {
$time1 = strtotime($time1);
}
if (!is_int($time2)) {
$time2 = strtotime($time2);
}
// If time1 is bigger than time2
// Then swap time1 and time2
if ($time1 > $time2) {
$ttime = $time1;
$time1 = $time2;
$time2 = $ttime;
}
// Set up intervals and diffs arrays
$intervals = array('year','month','day','hour','minute','second');
$diffs = array();
// Loop thru all intervals
foreach ($intervals as $interval) {
// Set default diff to 0
$diffs[$interval] = 0;
// Create temp time from time1 and interval
$ttime = strtotime("+1 " . $interval, $time1);
// Loop until temp time is smaller than time2
while ($time2 >= $ttime) {
$time1 = $ttime;
$diffs[$interval]++;
// Create new temp time from time1 and interval
$ttime = strtotime("+1 " . $interval, $time1);
}
}
$count = 0;
$times = array();
// Loop thru all diffs
foreach ($diffs as $interval => $value) {
// Break if we have needed precission
if ($count >= $precision) {
break;
}
// Add value and interval
// if value is bigger than 0
if ($value > 0) {
// Add s if value is not 1
if ($value != 1) {
$interval .= "s";
}
// Add value and interval to times array
$times[] = $value . " " . $interval;
$count++;
}
}
// Return string with times
return implode(", ", $times);
}
//$data1=date("Y-m-d H:i:s","1351087201");
//$data2=date("Y-m-d H:i:s","1351086201");
//echo dateDiff($data1, $data2) . "\n";
?>
crontab -l
0 6 * * * /usr/bin/php /root/nagios_powiadomienia/check_nagios_host.php
0 18 * * * /usr/bin/php /root/nagios_powiadomienia/check_nagios_host.php
0 6 * * * /usr/bin/php /root/nagios_powiadomienia/check_nagios_service.php
0 18 * * * /usr/bin/php /root/nagios_powiadomienia/check_nagios_service.php
Brak komentarzy:
Prześlij komentarz
Proszę zostaw swój komentarz w celu dopowiedzenia tego czego ja nie wiedziałem lub wywołania ciekawej dyskusji. Wprowadziłem moderowanie komentarzy ze względu na dużą popularność bloga wśród różnych SEO botów :)