Page 1 of 3
run script, email results
Posted: Tue Jun 02, 2015 3:45 pm
by JohnFLi
I have a powershell script that returns the top 10 memory process items.
I am looking for away that when the regular memory check goes critical, Nagios will then run the powershell, and email the results of that to the people that gets notified on the alert.
I have no idea how to do this.
Re: run script, email results
Posted: Tue Jun 02, 2015 4:20 pm
by jdalrymple
The typical way to do that is to wrap it so that your powershell output is the status output of the service. Besides that the notifications in NagiosXI are just commands like anything else.
What commands do your contacts use for their notifications? Depending on that you can copy/adjust the preexisting notification commands to suit your needs
Configure --> Core Configuration Manager --> Commands --> Commands
Search for "notif"
Re: run script, email results
Posted: Tue Jun 02, 2015 4:27 pm
by JohnFLi
ok so how do I 'wrap' the memory check script into the regular memory check?
Unless it has research critical, I dont want to always be looking at the output.
basicly, I am looking for a way to get it so that IF critical, then run script and email the results.
currently for notifications, I use the generic 'notify service by email'
Re: run script, email results
Posted: Tue Jun 02, 2015 7:08 pm
by Box293
JohnFLi wrote:when the regular memory check goes critical,
What is the command you execute for the regular memory check? From your nagios server.
Re: run script, email results
Posted: Wed Jun 03, 2015 9:13 am
by jdalrymple
JohnFLi wrote:ok so how do I 'wrap' the memory check script into the regular memory check?
Unless it has research critical, I dont want to always be looking at the output.
basicly, I am looking for a way to get it so that IF critical, then run script and email the results.
currently for notifications, I use the generic 'notify service by email'
It's pretty common for your check command to *not* return output unless there is a problem. That is a matter of how you write your check command though.
A well-known example:
Code: Select all
[root@localhost libexec]# ./check_nrpe -H <winhost> -c check_drivesize -a "warning=used > 99%"
OK All 4 drive(s) are ok|'C:\ used'=64.71418GB;106.39502;96.72275;0;107.46972 'C:\ used %'=60%;98;89;0;100 'D:\ used'=122.36956GB;922.19563;838.35966;0;931.51073 'D:\ used %'=13%;98;89;0;100 'E:\ used'=0B;0;0;0;0 '\\?\Volume{80ee73c6-a6c0-11e4-bd5c-806e6f6e6963}\ used'=8.10441GB;11.61509;10.55917;0;11.73241 '\\?\Volume{80ee73c6-a6c0-11e4-bd5c-806e6f6e6963}\ used %'=69%;98;89;0;100
[root@localhost libexec]# ./check_nrpe -H <winhost> -c check_drivesize -a "warning=used > 50%"
WARNING C:\: 64.714GB/107.47GB used, RECOVERY: 8.104GB/11.732GB used|'C:\ used'=64.71418GB;53.73486;96.72275;0;107.46972 'C:\ used %'=60%;50;89;0;100 'D:\ used'=122.36956GB;465.75536;838.35966;0;931.51073 'D:\ used %'=13%;50;89;0;100 'E:\ used'=0B;0;0;0;0 '\\?\Volume{80ee73c6-a6c0-11e4-bd5c-806e6f6e6963}\ used'=8.10441GB;5.8662;10.55917;0;11.73241 '\\?\Volume{80ee73c6-a6c0-11e4-bd5c-806e6f6e6963}\ used %'=69%;50;89;0;100
Note that unless there is a problem the output is vague. If there is a problem the output is detailed. This is somewhat what you want except that you want it specifically for critical conditions. Either way this could be done upstairs in the actual check command or downstairs in your notification command using logic:
Code: Select all
#!/bin/bash
if [ $NAGIOS_SERVICESTATEID -eq "2" ]; then
/usr/local/nagios/libexec/check_nrpe -H $NAGIOS_HOSTADDRESS -c runmypowershell | /bin/mail -s "** $NAGIOS_NOTIFICATIONTYPE Service Alert: $NAGIOS_HOSTALIAS/$NAGIOS_SERVICEDESC is $NAGIOS_SERVICESTATE **" $NAGIOS_CONTACTEMAIL
else
/usr/bin/printf "%b" "***** Nagios Monitor XI Alert *****\n\nNotification Type: $NAGIOS_NOTIFICATIONTYPE\n\nService: $NAGIOS_SERVICEDESC\nHost: $NAGIOS_HOSTALIAS\nAddress: $NAGIOS_HOSTADDRESS\nState: $NAGIOS_SERVICESTATE\n\nDate/Time: $NAGIOS_LONGDATETIME\n\nAdditional Info:\n\n$NAGIOS_SERVICEOUTPUT" | /bin/mail -s "** $NAGIOS_NOTIFICATIONTYPE Service Alert: $NAGIOS_HOSTALIAS/$NAGIOS_SERVICEDESC is $NAGIOS_SERVICESTATE **" $NAGIOS_CONTACTEMAIL
fi
Re: run script, email results
Posted: Wed Jun 03, 2015 10:00 am
by JohnFLi
I think I somewhat understand.
But where you have '-c phowershell' how does that know what to run on again what machine?
Re: run script, email results
Posted: Wed Jun 03, 2015 10:06 am
by lmiltchev
Your command must be defined on the client. You may have something similar in the nsclient.ini (under the [/settings/external scripts/scripts] section):
Code: Select all
runmypowershell = cmd /c echo scripts\<custom script>.ps1; exit $LastExitCode | powershell.exe -command -
Re: run script, email results
Posted: Wed Jun 03, 2015 10:14 am
by JohnFLi
ok, gotcha.....
and now for a little bit more spoon feeding.....
Do I just take that bash file and make it another notify-service-by-email command?
Re: run script, email results
Posted: Wed Jun 03, 2015 10:20 am
by jdalrymple
JohnFLi wrote:Do I just take that bash file and make it another notify-service-by-email command?
Yes - kind of. Things get a little bit weird, and this is why you'd do it "upstairs" typically and not "downstairs"
Notify commands are assigned to contacts. So unless you want this script to be burdensomely large (testing for the service itself that's being run in addition to the service status) you'll have to create a custom contact just for this notify command. Otherwise anytime ANY service goes critical any contact using this command will get the output of the hosts's powershell script as the E-mail body. This isn't likely to work if you have 1 contact receiving notifications for both a Cisco switch and your Windows box.
Making sense?
-- edit --
BTW, in order for this to work at all you'll have to adjust nagios.cfg:
Re: run script, email results
Posted: Wed Jun 03, 2015 10:28 am
by JohnFLi
I was thinking that by making a new 'notify' command, I would just assign it to the specific services I want it on. That way it should still contact those that are already assigned.
I will give it a shot