imported>mutante m (====Result==== You get new checks like this in your Nagios webinterface: Image:Nagios-irc.png And of course you can setup all kinds of notification options, E-mail, RSS feeds, even [[S) |
imported>mutante mNo edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 3: | Line 3: | ||
==How to monitor with Nagios if a nick is on a IRC channel== |
==How to monitor with Nagios if a nick is on a IRC channel== |
||
If you want to have a check in [[Nagios]] to monitor if a certain nickname is on certain [[IRC]] channel, for example to monitor if your [[bot]] is not only running its process, but actually |
If you want to have a check in [[Nagios]] to monitor if a certain nickname is on a certain [[IRC]] channel, for example to monitor if your [[bot]] is not only running its process, but actually ON the channel, which can be a difference, you can do something like this: |
||
#Use a script/bot to join the channel and log the current list of users to a textfile every 5 minutes |
#Use a script/bot to join the channel and log the current list of users to a textfile every 5 minutes |
||
Line 13: | Line 13: | ||
====Log the current user list to a logfile==== |
====Log the current user list to a logfile==== |
||
For this we could make a new "nagios" script, based on [[Edgar]] or something, but since we already have a running [[Eggdrop]] we use that. So we create a simple [[TCL]] script to do the job and load it on an existing bot ([[Antisect]]). |
For this we could make a new "nagios" script, based on [[Edgar]], or something, but since we already have a running [[Eggdrop]] we use that. So we create a simple [[TCL]] script to do the job and load it on an existing bot ([[Antisect]]). |
||
So we need to know in TCL how to: |
So we need to know in TCL how to: |
||
Line 41: | Line 41: | ||
return 1 |
return 1 |
||
} |
} |
||
<HighlightSyntax> |
</HighlightSyntax> |
||
So load this on your Eggdrop as channelnicks.tcl or nagios.tcl or whatever and .rehash it. |
So load this on your Eggdrop as channelnicks.tcl or nagios.tcl or whatever and .rehash it. |
Latest revision as of 20:01, 25 May 2009
No, this is not the usual "check_irc" to monitor an IRCd, it is about:
How to monitor with Nagios if a nick is on a IRC channel[edit]
If you want to have a check in Nagios to monitor if a certain nickname is on a certain IRC channel, for example to monitor if your bot is not only running its process, but actually ON the channel, which can be a difference, you can do something like this:
- Use a script/bot to join the channel and log the current list of users to a textfile every 5 minutes
- Create a second script, a Nagios check command, to search that textfile for a given nickname and return OK or CRITICAL
- Put that script in the Nagios plugins directory and define it as a NRPE command in nrpe.cfg on the server running the bot
- Define the command and a service on your Nagios host to execute that command via NRPE on the remote host
- Get a Nagios check like "OK. Mybot is on #mychannel (23 nicks online)" or "CRITICAL. Mybot is not on #mychannel (17 nicks online)
Log the current user list to a logfile[edit]
For this we could make a new "nagios" script, based on Edgar, or something, but since we already have a running Eggdrop we use that. So we create a simple TCL script to do the job and load it on an existing bot (Antisect).
So we need to know in TCL how to:
- Get the list of current users in channel ( set myvar [chanlist #mychan] )
- Write to an external file (set filename.., set fileId.. ,puts..., close...)
- Start a function every 5 minutes by timer (timer.. [1])
Goes like this...
<HighlightSyntax>
if {![info exists myproc_running]} {
timer 1 channelnicklist set myproc_running 1 }
proc channelnicklist {} { set userlist [chanlist #seti23] set filename "nicklist_seti23.log" set fileId [open $filename "w"] puts -nonewline $fileId $userlist close $fileId
timer 1 channelnicklist return 1 } </HighlightSyntax>
So load this on your Eggdrop as channelnicks.tcl or nagios.tcl or whatever and .rehash it.
You should then get a 'nicklist_seti23.log' file in the same dir your eggdrop is running. Use a "tail -f" on it and watch if it changes (after max. 1 minute) when a nick joins or parts the channel.
Create a check command to parse that logfile[edit]
We are still on the server running your Eggdrop now, its not the Nagios server but we have Nagios plugins installed because its a monitored client anyways. So we go to /usr/lib/nagios/plugins
or wherever you have your Nagios plugins. We create a new Bash script "check_irc_nicks" like this:
<HighlightSyntax>
- !/bin/bash
NICK=$1 CHANNEL="seti23" NICKLIST=`cat /home/antisect/egg/nicklist_seti23.log` numbernicks=`wc -w /home/antisect/egg/nicklist_seti23.log | cut -d " " -f1` if $NICKLIST =~ $NICK then echo "OK - $NICK is in #$CHANNEL ($numbernicks nicks online)|nicks=$numbernicks" exit 0 else echo "CRITICAL - $NICK is not in #$CHANNEL ($numbernicks nicks online)|nicks=$numbernicks" exit 2 fi </HighlightSyntax>
Since NICK is $1, it means you can pass the nickname you want to check as variable and start it like this:
./check_irc_nicks mutante
OK - mutante is in #seti23 (24 nicks online)|nicks=24
What you have to change is your channel name and the path to your logfile of course. I additionally count the number of users in the channel, that is optional.
Try to run it manually from the shell and see if it works. Try it as user nagios and make sure permissions are right for that user to execute this command and read the logfile.
Define your command in NRPE config[edit]
Now you need to define your new plugin as a command in the local NRPE config, so that it can later be executed by the remote Nagios server.
vi /etc/nagios/nrpe.cfg
<HighlightSyntax>
command[check_irc_nick_mutante=/usr/lib/nagios/plugins/check_irc_nicks mutante
command[check_irc_nick_Edgar23=/usr/lib/nagios/plugins/check_irc_nicks Edgar23
</HighlightSyntax>
You can add just one line for one nick here or multiple ones. I define one command per nickname and dont keep it flexible at this point because there were issues with NRPE passing commandline arguments.
Don't forget to restart NRPE now. Something like /etc/init.d/nagios-nrpe restart
Now this server should be ready to answer remote checks from Nagios.
Add a command and service on the Nagios server[edit]
Now we switch to the actual Nagios server. First we need to add a check command corresponding to the command we defined on the host running NRPE, like:
<HighlightSyntax>
- IRC nick checks
define command{ command_name check_irc_nick_mutante command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_irc_nick_mutante }
define command{ command_name check_irc_nick_Edgar23 command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_irc_nick_Edgar23 } </HighlightSyntax>
Depending on your Nagios config in someting like checkcommands.cfg.
Again, you can add just one or multiple commands, reason for not passing the nickname as argument, see above.
Now we can finally add the actual service check, in f.e. services.cfg:
<HighlightSyntax>
- IRC nick checks
define service{
use s23-service host_name geist service_description IRC_#seti23_mutante check_command check_irc_nick_mutante notifications_enabled 1 }
define service{
use s23-service host_name geist service_description IRC_#seti23_Edgar23 check_command check_irc_nick_Edgar23 notifications_enabled 1 }
</HighlightSyntax>
Again, just examples, but you should be able to figure it out if you have used Nagios before.
Result[edit]
You get new checks like this in your Nagios webinterface:
And of course you can setup all kinds of notification options, E-mail, RSS feeds, even SMS or phone calls via Asterisk.
Enjoy.