Search Exchange
Search All Sites
Nagios Live Webinars
Let our experts show you how Nagios can help your organization.Login
Directory Tree
Disabled host and service notification parser
111788
File | Description |
---|---|
host_status.awk | awk script to parse out host status |
service_status.awk | awk script to parse out service status |
Meet The New Nagios Core Services Platform
Built on over 25 years of monitoring experience, the Nagios Core Services Platform provides insightful monitoring dashboards, time-saving monitoring wizards, and unmatched ease of use. Use it for free indefinitely.
Monitoring Made Magically Better
- Nagios Core on Overdrive
- Powerful Monitoring Dashboards
- Time-Saving Configuration Wizards
- Open Source Powered Monitoring On Steroids
- And So Much More!
I created these scripts to remind me what is disabled so I can go back, fix the problem if needed,
and re-enable the notifications.
To use these, you need to cat the status.log and pipe it into the script:
'cat status.log | host_status.awk'
I run a bash script on a cron to call these two scripts and send the output via email:
#!/bin/sh
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either Version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# This script was designed to run the two awk scripts host_status.awk and service_status.awk
# and send an email if anything is returned.
#
DATE=`date +%c`
HOST=`/bin/cat /usr/local/nagios/var/status.log | /usr/local/nagios/var/host_status.awk`
SERVICE=`/bin/cat /usr/local/nagios/var/status.log | /usr/local/nagios/var/service_status.awk`
MAIL="/bin/mail -s"
SUBJECT="Disabled Nagios notifications *** $DATE"
BODY="$HOST $SERVICE"
RCPT="admin@domain.com"
if [[ -n $HOST || -n $SERVICE ]]
then
/usr/bin/printf "%b" "n$BODYn" | $MAIL "$SUBJECT" $RCPT
else
echo "Nothing is disabled..."
fi
'cat status.log | host_status.awk'
I run a bash script on a cron to call these two scripts and send the output via email:
#!/bin/sh
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either Version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# This script was designed to run the two awk scripts host_status.awk and service_status.awk
# and send an email if anything is returned.
#
DATE=`date +%c`
HOST=`/bin/cat /usr/local/nagios/var/status.log | /usr/local/nagios/var/host_status.awk`
SERVICE=`/bin/cat /usr/local/nagios/var/status.log | /usr/local/nagios/var/service_status.awk`
MAIL="/bin/mail -s"
SUBJECT="Disabled Nagios notifications *** $DATE"
BODY="$HOST $SERVICE"
RCPT="admin@domain.com"
if [[ -n $HOST || -n $SERVICE ]]
then
/usr/bin/printf "%b" "n$BODYn" | $MAIL "$SUBJECT" $RCPT
else
echo "Nothing is disabled..."
fi
Reviews (5)
bymikej1234, July 10, 2013
Hi, Can you please advise on how to run this on Ubuntu? When I run it as documented I get no result. This is also after confirming the location of awk is not in /bin/awk but in /usr/bin/awk (which was updated in the script).
It seems that the version of nagios I have also has a status.dat file, with no status.log file. Maybe I'm missing something here, but it seems different when installed on Ubuntu (or Debian).
It seems that the version of nagios I have also has a status.dat file, with no status.log file. Maybe I'm missing something here, but it seems different when installed on Ubuntu (or Debian).
byvahidh, April 9, 2013
I will re-release this script with all of its requirements:
This script will convert output to html email and provide a html link to enable service/host
#!/bin/bash
DATE=$(date +%c)
NAGIOS_STATUS="/var/nagios/status.dat"
WORKING_DIR="/usr/local/bin"
SUBJECT="Disabled Nagios notifications *** $DATE"
from="sender@domain.com"
SENDMAIL_FOLDER="$WORKING_DIR/sendmail"
RCPT="reciever@domain.com"
BODY="$HOST $SERVICE"
userpass="nagiosadmin:password"
nagios_server="nagios.server.yourdomain.com"
function host_status() {
awk -v user=$userpass -v server=$nagios_server 'BEGIN { header=0; FS="="; } /^[[:space:]]*info {[[:space:]]*$/ { codeblock="info"; } /^[[:space:]]*program {[[:space:]]*$/ { codeblock="program"; } /^[[:space:]]*hoststatus {[[:space:]]*$/ { codeblock="host"; host_name=""; notifications_enabled=""; } /^[[:space:]]*service {[[:space:]]*$/ { codeblock="service"; } /^[[:space:]]*host_name=/ { host_name=$2; } /^[[:space:]]*notifications_enabled=/ { notifications_enabled=$2; } /^[[:space:]]*}[[:space:]]*$/ { if (codeblock=="host" && notifications_enabled=="0") { if (header==0) { print "The following hosts have notifications disabled:"; header=1; } print ""host_name"ENABLE NOTIFICATION"; } } '
}
function service_status() {
awk -v user=$userpass -v server=$nagios_server 'BEGIN { header=0; FS="="; } /^[[:space:]]*info {[[:space:]]*$/ { codeblock="info"; } /^[[:space:]]*program {[[:space:]]*$/ { codeblock="program"; } /^[[:space:]]*hoststatus {[[:space:]]*$/ { codeblock="host"; } /^[[:space:]]*servicestatus {[[:space:]]*$/ { codeblock="service"; host_name=""; service_description=""; notifications_enabled=""; } /^[[:space:]]*host_name=/ { host_name=$2; } /^[[:space:]]*service_description=/ { service_description=$2; } /^[[:space:]]*notifications_enabled=/ { notifications_enabled=$2; } /^[[:space:]]*}[[:space:]]*$/ { if (codeblock=="service" && notifications_enabled=="0") { if (header==0) { print "The following services have notifications turned off"; header=1; } print ""service_description " on " host_name"ENABLE SERVICE NOTIFICATION"; } } '
}
HOST=$(/bin/cat $NAGIOS_STATUS| host_status)
SERVICE=$(/bin/cat $NAGIOS_STATUS |service_status)
if [[ -n $HOST || -n $SERVICE ]]; then
cd $SENDMAIL_FOLDER;./sendmail.pl "$WORKING_DIR" "$from" "$RCPT" "$SUBJECT:" "$SERVICE$HOST"
else
echo "Nothing is disabled..."
fi
----------------------
sendmail.pl
---------------------
#!/usr/bin/perl
use MIME::Lite;
use Net::SMTP;
$spath=$ARGV[0];
$from=$ARGV[1];
$to=$ARGV[2];
$subject=$ARGV[3];
$body=$ARGV[4];
$msg = MIME::Lite->new(
From =>$from,
To =>$to,
##Cc =>'some@other.com, some@more.com',
Subject =>$subject,
Type =>'multipart/mixed'
);
$msg->attach(
Type =>'text/html; charset="iso-8859-1"',
Data =>$body
);
$mail_host="localhost";
MIME::Lite->send('smtp', $mail_host, Timeout=>60);
$msg->send;
This script will convert output to html email and provide a html link to enable service/host
#!/bin/bash
DATE=$(date +%c)
NAGIOS_STATUS="/var/nagios/status.dat"
WORKING_DIR="/usr/local/bin"
SUBJECT="Disabled Nagios notifications *** $DATE"
from="sender@domain.com"
SENDMAIL_FOLDER="$WORKING_DIR/sendmail"
RCPT="reciever@domain.com"
BODY="$HOST $SERVICE"
userpass="nagiosadmin:password"
nagios_server="nagios.server.yourdomain.com"
function host_status() {
awk -v user=$userpass -v server=$nagios_server 'BEGIN { header=0; FS="="; } /^[[:space:]]*info {[[:space:]]*$/ { codeblock="info"; } /^[[:space:]]*program {[[:space:]]*$/ { codeblock="program"; } /^[[:space:]]*hoststatus {[[:space:]]*$/ { codeblock="host"; host_name=""; notifications_enabled=""; } /^[[:space:]]*service {[[:space:]]*$/ { codeblock="service"; } /^[[:space:]]*host_name=/ { host_name=$2; } /^[[:space:]]*notifications_enabled=/ { notifications_enabled=$2; } /^[[:space:]]*}[[:space:]]*$/ { if (codeblock=="host" && notifications_enabled=="0") { if (header==0) { print "The following hosts have notifications disabled:"; header=1; } print ""host_name"ENABLE NOTIFICATION"; } } '
}
function service_status() {
awk -v user=$userpass -v server=$nagios_server 'BEGIN { header=0; FS="="; } /^[[:space:]]*info {[[:space:]]*$/ { codeblock="info"; } /^[[:space:]]*program {[[:space:]]*$/ { codeblock="program"; } /^[[:space:]]*hoststatus {[[:space:]]*$/ { codeblock="host"; } /^[[:space:]]*servicestatus {[[:space:]]*$/ { codeblock="service"; host_name=""; service_description=""; notifications_enabled=""; } /^[[:space:]]*host_name=/ { host_name=$2; } /^[[:space:]]*service_description=/ { service_description=$2; } /^[[:space:]]*notifications_enabled=/ { notifications_enabled=$2; } /^[[:space:]]*}[[:space:]]*$/ { if (codeblock=="service" && notifications_enabled=="0") { if (header==0) { print "The following services have notifications turned off"; header=1; } print ""service_description " on " host_name"ENABLE SERVICE NOTIFICATION"; } } '
}
HOST=$(/bin/cat $NAGIOS_STATUS| host_status)
SERVICE=$(/bin/cat $NAGIOS_STATUS |service_status)
if [[ -n $HOST || -n $SERVICE ]]; then
cd $SENDMAIL_FOLDER;./sendmail.pl "$WORKING_DIR" "$from" "$RCPT" "$SUBJECT:" "$SERVICE$HOST"
else
echo "Nothing is disabled..."
fi
----------------------
sendmail.pl
---------------------
#!/usr/bin/perl
use MIME::Lite;
use Net::SMTP;
$spath=$ARGV[0];
$from=$ARGV[1];
$to=$ARGV[2];
$subject=$ARGV[3];
$body=$ARGV[4];
$msg = MIME::Lite->new(
From =>$from,
To =>$to,
##Cc =>'some@other.com, some@more.com',
Subject =>$subject,
Type =>'multipart/mixed'
);
$msg->attach(
Type =>'text/html; charset="iso-8859-1"',
Data =>$body
);
$mail_host="localhost";
MIME::Lite->send('smtp', $mail_host, Timeout=>60);
$msg->send;
bychandlercord, August 5, 2011
Awesome, great for a busy admin.
I put together a awk a to check if nofitications are disabled globally.
BEGIN { header=0;
FS="=";
}
/^[[:space:]]*info {[[:space:]]*$/ {
codeblock="info";
}
/^[[:space:]]*programstatus {[[:space:]]*$/ {
codeblock="program";
notifications_enabled="";
}
/^[[:space:]]*hoststatus {[[:space:]]*$/ {
codeblock="host";
}
/^[[:space:]]*servicestatus {[[:space:]]*$/ {
codeblock="service";
}
/^[[:space:]]*enable_notifications=/ {
notifications_enabled=$2;
}
/^[[:space:]]*}[[:space:]]*$/ {
if (codeblock=="program" && notifications_enabled=="0") {
if (header==0) {
print "
******************
Notifications have been disabled globally!!!!!!!
";
header=1;
}
print host_name;
}
}
Figure that might be useful to someone
I put together a awk a to check if nofitications are disabled globally.
BEGIN { header=0;
FS="=";
}
/^[[:space:]]*info {[[:space:]]*$/ {
codeblock="info";
}
/^[[:space:]]*programstatus {[[:space:]]*$/ {
codeblock="program";
notifications_enabled="";
}
/^[[:space:]]*hoststatus {[[:space:]]*$/ {
codeblock="host";
}
/^[[:space:]]*servicestatus {[[:space:]]*$/ {
codeblock="service";
}
/^[[:space:]]*enable_notifications=/ {
notifications_enabled=$2;
}
/^[[:space:]]*}[[:space:]]*$/ {
if (codeblock=="program" && notifications_enabled=="0") {
if (header==0) {
print "
******************
Notifications have been disabled globally!!!!!!!
";
header=1;
}
print host_name;
}
}
Figure that might be useful to someone
byrussoisraeli, October 30, 2009
I have the same exact problem, so this really helped. Had to adjust it a bit, maybe to fit the recent version? Also, tweaked a bit to have line breaks between hosts/services.. Here are my cents:
host_status.awk:
1c1
#!/bin/awk -f
30c30
/^[[:space:]]*host {[[:space:]]*$/ {
36c36
/^[[:space:]]*service {[[:space:]]*$/ {
service_status.awk:
1c1
#!/bin/awk -f
30c30
/^[[:space:]]*host {[[:space:]]*$/ {
34c34
/^[[:space:]]*service {[[:space:]]*$/ {
36d35
host_status.awk:
1c1
#!/bin/awk -f
30c30
/^[[:space:]]*host {[[:space:]]*$/ {
36c36
/^[[:space:]]*service {[[:space:]]*$/ {
service_status.awk:
1c1
#!/bin/awk -f
30c30
/^[[:space:]]*host {[[:space:]]*$/ {
34c34
/^[[:space:]]*service {[[:space:]]*$/ {
36d35
bykosarajudeepak, July 25, 2009
Thanks for contributing to Nagios exchange. Its a good and handy tool for nagios Admin. 100% recommended.