We've been using nagios for some time and have recently decided to change how we receive alerts. To this end, we've installed twurl ( https://github.com/marcel/twurl ) and are using it to send alerts. Unfortunately this logs alerts as having been sent, but none get to the monitor's twitter account. twurl uses a pretty standard CLI which looks like this (nagios macros left in tact):
/usr/local/bin/twurl -d "status=d @$CONTACTEMAIL$ $NOTIFICATIONTYPE$: $TIME$ : $HOSTALIAS$ / $SERVICEDESC$ is $SERVICESTATE$ ($SERVICEOUTPUT$)" /1/statuses/update.xml
Here's the notification command:
define command {
command_name notify-service-by-twurl
command_line PATH="/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/nagios/bin"; HOME="/home/nagios"; /usr/local/bin/twurl -d "status=d @$CONTACTEMAIL$ $NOTIFICATIONTYPE$: $TIME$ : $HOSTALIAS$ / $SERVICEDESC$ is $SERVICESTATE$ ($SERVICEOUTPUT$)" /1/statuses/update.xml &>/tmp/lastcheck
# command_line /bin/echo '/usr/local/bin/twurl -d "status=d @$CONTACTEMAIL$ $NOTIFICATIONTYPE$: $TIME$ : $HOSTALIAS$ / $SERVICEDESC$ is $SERVICESTATE$ ($SERVICEOUTPUT$)" /1/statuses/update.xml' > /tmp/foo
}
Syntax works fine etc, no issues there. 1st line fires off the 2nd command_line line is to output the contents of the macros nagios uses, and returns what would be expected in all cases.
twurl pitfalls we've definitely avoided:
- we've authed to twitter for nagios's user (su'd in and checked, works fine when done manually).
- the credentials of the app are correct (again, works fine when using twurl manually)
- the settings of the twitter app ( on http://dev.twitter.com ) are correct (set to read/write direct messages etc)
I can provide any specific pieces of information anyone might need for extra context but for now that's about it. Edit: I'm starting to suspect this is due to a lack of a .profile when nagios itself calls twurl, but I'm not 100% sure and still can't make it "go".
Update: ascertained that the script is not using the .twurlrc from nagios's home directory when nagios executes it. This is a problem I still can't resolve, any other help would be much appreciated.
Nagios runs external commands without any ENV. To simulate this, you can try running your manual test via "env -i ". You seem to already know this, because you are explicitly setting PATH and HOME. You should try to avoid this, and just use full paths in any scripts/commands/etc.
You also might need to escape some of the non-alphanumeric characters in your command_line, because the shell may eat them. To test this, you can enable debugging output in nagios.cfg (see 'debug_level' http://nagios.sourceforge.net/docs/3_0/configmain.html ) or change the command to "echo ... > /tmp/whatisnagiosrunning.txt" or similar.
Found a workaround that fixes things (and may also contribute to twurl so this doesn't break other things!).
In rcfile.rb (mine is in /usr/local/lib/ruby/gems/1.8/gems/twurl-0.6.5/lib/twurl/rcfile.rb) make the following change. Below is the original:
And beneath is the modification:
This should probably accept user input - something I may contribute to twurl myself at some point in the near future.
Thanks to all who helped :)