Upgrade 3CX to v18 and get it hosted free!

Asterisk Zaptel Nagios plugin

Author image

The following Nagios plugin will check the specified zaptel spans for status.


 #!/bin/bash
 # 
 # check_zap_pri
 #
 # this is a basic Nagios plugin that tests ISDN lines status in Asterisk
 # you will need to use the check_by_ssh feature of nagios. You need to add the command to commands.conf 
 # 
 #  define command{
 #       command_name    check_by_ssh
 #       command_line    /usr/lib/nagios/plugins/check_by_ssh -l root -H $HOSTADDRESS$ -C /usr/lib/nagios/plugins/$ARG1$
 #       }
 #
 # then place this code in the /usr/lib/nagios/plugins/ on the box with the 
 # PRI spans you want to monitor. Additionally you are going to need to use 
 # ssh-keygen to create key pairs. It is important that the pairs are created from 
 # the account of the user nagios is running at. In other words if nagios runs as user 
 # nagios then you need to 'su' to nagios and generate a keypair as that user.
 # That public key is then installed into the 'root' users authorized_keys on the box
 # that you installed the script into. This is important because you will not get a 
 # successful result if this script executes as a regular user versus the user asterisk 
 # runs as or one with higher permissions. 
 #
 # The services.cfg entry looks like many other except check_command is 
 #  check_command                   check_by_ssh!name_of_script 
 # so in my case since I named my script check_zap_pri :
 #
 #  check_command                   check_by_ssh!check_zap_pri
 #
 # 
 PATH=/bin:/sbin:/usr/bin:/usr/sbin
 FAILS=""
 SPANS=$(asterisk -rnx "pri show spans" | grep -a PRI | awk '{print $3;}' | cut -d"/" -f1)
 
 for i in $SPANS; do
        STATUS=$(asterisk -rnx "pri show span $i" | grep -a Status | awk '{print $3;}' | cut -d, -f1)
        if ~np~[ x$STATUS == "x" ]~/np~; then
                continue
        fi
 
        if ~np~[ $STATUS != "Up" ]~/np~; then
                FAILS="$FAILS span $i"
        fi
 done
 
 if ~np~[ "x$FAILS" != "x" ]~/np~; then
        echo "ISDN Critical: lines down, $FAILS"
        exit 2
 fi
 
 echo "ISDN OK "
 exit 0

I wasn’t a huge fan of the ssh venue of running this script so I wrote one that uses the manager interface via the nc aka netcat utility


 #!/bin/bash
 # check_zappri_mgr
 #       install this into /usr/lib/nagios/plugins/contrib/
 # You need a manager entry in /etc/asterisk/manager.conf
 # ~np~[nagios]~/np~
 # secret=somesecret
 # deny=0.0.0.0/0.0.0.0
 # permit=127.0.0.0/255.0.0.0
 # permit=111.222.333.444/255.255.255.111 <-- the network nagios connects from
 # read = system,call,log,verbose,command,agent,user
 # write = system,call,log,verbose,command,agent,user
 #
 # add the following command to your commands.cfg
 #
 # define command{
 #         command_name    check_zappri_mgr
 #         command_line    /usr/lib/nagios/plugins/contrib/check_zappri_mgr $ARG1$ $ARG2$ $HOSTADDRESS$
 #         }
 #
 # the services.cfg entry uses this check_command
 # check_command              check_zappri_mgr!mgr_user!mgr_pass
 #
 # this is a basic Nagios plugin that tests ISDN lines status in Asterisk
 PATH=/bin:/sbin:/usr/bin:/usr/sbin
 FAILS=""
 HOST=$3
 USER=$1
 PASS=$2
 EOF="\015\012"
 BLANK=$EOF$EOF
 SPANS=$((echo -ne "Action: Login$EOF"
 echo -ne "Username: $USER$EOF"
 echo -ne "Secret: $PASS$BLANK"
 echo -ne "Action: Command$EOF"
 echo -ne "command: pri show spans$BLANK"
 echo -ne "Action: Logoff$BLANK") | nc $HOST 5038 | grep -a PRI | awk '{print $3;}' | cut -d"/" -f1)
 
 for i in $SPANS; do
        STATUS=$((echo -ne "Action: Login$EOF"
 echo -ne "Username: $USER$EOF"
 echo -ne "Secret: $PASS$BLANK"
 echo -ne "Action: Command$EOF"
 echo -ne "command: pri show span $i$BLANK"
 echo -ne "Action: Logoff$BLANK") | nc $HOST 5038 | grep -a Status | awk '{print $3;}' | cut -d, -f1)
        if ~np~[ x$STATUS == "x" ]~/np~; then
                
                continue
        fi
 
        if ~np~[ $STATUS != "Up" ]~/np~; then
                FAILS="$FAILS span $i"
        fi
 done
 
 if ~np~[ "x$FAILS" != "x" ]~/np~; then
        echo "ISDN Critical: lines down, $FAILS"
        exit 2
 fi
 
 echo "ISDN OK "
 exit 0 


Article Reviews

Write a Review

Your email address will not be published. Required fields are marked *

Required Field. Minimum 5 characters.

Required Field. Minimum 5 characters, maximum 50.

Required field.There is an error with this field.

Required Field.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

There are no reviews for this article. Be the first one to write a review.
Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.