OpenSER::Monitoring

La derniere fois j’ai parlé de monitoring d’Asterisk, cet aprem parlons d’OpenSER. La configuration de netsnmp ne change pas de celle faite pour Asterisk.

MODIFICATION DU FICHIER DE CONFIGURATION OPENSER.CFG

# SNMP
loadmodule « snmpstats.so »

#snmp params
modparam(« snmpstats », « snmpgetPath », « /usr/bin/ »)
modparam(« snmpstats », « sipEntityType », « registrarServer »)
modparam(« snmpstats », « sipEntityType », « proxyServer »)

CREATION DU FICHIER SNMPSTATS

push /etc/snmp/snmpstats.conf

EXEMPLES DE DONNEES DISPONIBLES

SNMPv2-SMI::enterprises.27483.3.1.1.1.1.1.0 = STRING: « SIP/2.0 »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.2.0 = Timeticks: (0) 0:00:00.00
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.4.0 = STRING: « ( »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.5.1.4.1.4.10.1.11.158.5060 = STRING: « ` »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.5.1.4.1.4.10.1.11.158.5061 = Hex-STRING: 08
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.5.1.4.1.4.127.0.0.1.5060 = STRING: « ` »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.5.1.4.1.4.127.0.0.1.5061 = Hex-STRING: 08
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.1 = STRING: « METHOD_INVITE »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.2 = STRING: « METHOD_CANCEL »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.3 = STRING: « METHOD_ACK »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.4 = STRING: « METHOD_BYE »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.5 = STRING: « METHOD_INFO »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.6 = STRING: « METHOD_OPTIONS »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.8 = STRING: « METHOD_REGISTER »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.9 = STRING: « METHOD_MESSAGE »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.10 = STRING: « METHOD_SUBSCRIBE »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.11 = STRING: « METHOD_NOTIFY »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.12 = STRING: « METHOD_PRACK »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.13 = STRING: « METHOD_REFER »
SNMPv2-SMI::enterprises.27483.3.1.1.1.1.7.1.2.14 = STRING: « METHOD_PUBLISH »
SNMPv2-SMI::enterprises.27483.3.1.1.1.3.1.0 = Counter32: 9836
SNMPv2-SMI::enterprises.27483.3.1.1.1.3.2.0 = Counter32: 3989
SNMPv2-SMI::enterprises.27483.3.1.1.1.3.3.0 = Counter32: 4388
SNMPv2-SMI::enterprises.27483.3.1.1.1.3.4.0 = Counter32: 7423
SNMPv2-SMI::enterprises.27483.3.1.1.1.3.5.0 = Counter32: 1187
SNMPv2-SMI::enterprises.27483.3.1.1.1.6.1.0 = Gauge32: 0
SNMPv2-SMI::enterprises.27483.3.1.1.1.8.1.0 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.1.1.8.2.0 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.1.1.8.3.0 = Counter32: 330
SNMPv2-SMI::enterprises.27483.3.1.2.1.3.1.0 = INTEGER: 2
SNMPv2-SMI::enterprises.27483.3.1.2.1.3.3.0 = INTEGER: 1
SNMPv2-SMI::enterprises.27483.3.1.2.1.3.4.0 = STRING:  »  »
SNMPv2-SMI::enterprises.27483.3.1.2.1.4.1.0 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.2.0 = Gauge32: 3600
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.3.0 = Gauge32: 4294967295
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.4.0 = Gauge32: 0
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.5.0 = Gauge32: 3600
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.2.1 = STRING: « DefaultUser »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.2.2 = STRING: « asterisk »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.2.3 = STRING: « 3456 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.2.4 = STRING: « 0001 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.3.1 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.3.2 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.3.3 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.6.1.3.4 = Counter32: 0
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.2.1.1 = STRING: « DefaultUser »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.2.2.1 = STRING: « sip:s@10.1.1.7 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.2.3.1 = STRING: « sip:3456@10.1.1.4:38504;rinstance=004543fdbc5f7891 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.2.3.2 = STRING: « sip:3456@10.1.1.4:36114;rinstance=4ec5a9802d261488 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.2.4.1 = STRING: « sip:0001@10.1.11.3:5060 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.3.1.1 = STRING: « DefaultUser »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.3.2.1 = STRING: « sip:s@10.1.1.7 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.3.3.1 = STRING: « sip:3456@10.1.1.4:38504;rinstance=004543fdbc5f7891 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.3.3.2 = STRING: « sip:3456@10.1.1.4:36114;rinstance=4ec5a9802d261488 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.3.4.1 = STRING: « sip:0001@10.1.1.3:5060 »
SNMPv2-SMI::enterprises.27483.3.1.2.1.5.7.1.4.1.1 = Hex-STRING: 00 00 00 00 00 00 00 00

ASTERISK::Trunk IAX (Inter Asterisk eXchange)

CONDITION DE MISE EN PLACE

deux serveurs Asterisk chacun avec le port 4569/udp en écoute.

PREPARATION DES FICHIERS DE CONFIGURATION

Fichier iax.conf pour chacun des deux serveurs

[general]
bindport = 4569
bindaddr = 0.0.0.0
disallow=all
allow=ulaw
allow=alaw
allow=gsm
mailboxdetail=yes

[DNS du serveur distant]
type=friend
username=DNS du serveur local
secret=Mot de passe commun aux deux serveurs
auth=plaintext
host=DNS du serveur distant
context=fromiax
peercontext=fromiax
qualify=yes
trunk=yes

ATTENTION : le mot de passe du trunk est le même pour les deux serveurs

Fichier extensions.conf des deux serveurs :

[fromiax]
exten => _X.,1,Answer()
exten => _X.,1,PlayBack(hello-world)
exten => _X.,n,Hangup()

Dans ce cas de configuration, tous les appels envoyés d’un serveur à l’autre à travers IAX obtiendront un jolie Hello World.

COMMENT RENVOYER DES APPELS A TRAVERS IAX ?
Soit pour une extension connue avec Dial :

exten => 2002,1,Dial(IAX2/DNS du serveur distant/2002,30,r)

Soit pour toutes les extensions inconnues d’un contexte avec switch :

switch => IAX2/DNS du serveur distant

ASTERISK::Enregistrement des conversations

Voici deux méthodes pour l’écoute des conversations avec Asterisk

Exemple Monitor

exten =>
s,1,ExecIF($[« ${RECORDSIP} »= »TRUE »],Monitor,wav|${TIMESTAMP}-${CALLERID(
num)}-${MACRO_EXTEN}-${UNIQUEID}.WAV)

Exemple MixMonitor

exten => _1NXXNXXXXXX,1,MixMonitor(/var/spool/asterisk/monitor/${CALLERIDNUM}-${EPOCH}-${EXTEN}.wav)
exten => _1NXXNXXXXXX,2,Dial(Zap/R1/${EXTEN},90
exten => _1NXXNXXXXXX,3,Hangup

Je ne sais pas si j’en aurais besoin mais c’est toujours mieux noté quelque part.

Asterisk::Monitoring

FONCTIONNEMENT
Un module Asterisk va jouer le rôle de sub-agent pour le service net-snmp
afin de diffuser des informations sur Asterisk. A l’aide d’outils tels que nagios ou cacti il sera alors possible de surveiller son bon fonctionnement.

INSTALLATION ET MISE EN PLACE

le module res-snmp de Asterisk

Ce module est dépendant de net-snmp. Pourtant, durant la compilation, un erreur peut survenir malgré la présence du service net-snmp et de ses bibliothèques :

checking for net-snmp-config… /usr/bin/net-snmp-config
checking for snmp_register_callback in -lnetsnmp… no

Apres une lecture du fichier config.log (de cette erreur), la solution est découverte :

configure:23304: checking for snmp_register_callback in -lnetsnmp
configure:23339: gcc -o conftest -g -O2 conftest.c -lnetsnmp -L/usr/lib -lnetsnmpagent -lnetsnmpmibs -lnetsnmphelpers -lnetsnmp -ldl -l
crypto -lrpm -lrpmio -lpopt -lbz2 -lz -lm -ldl -L/usr/lib -lwrap >&5
/usr/lib/gcc-lib/i586-suse-linux/3.3.5/../../../../i586-suse-linux/bin/ld: cannot find -lwrap
collect2: ld returned 1 exit status
configure:23345: $? = 1

La bibliothèque ’wrap’ est indisponible, elle est fournit par le package tcpd-devel.
La forme du fichier de configuration est quant à elle très simple :

; /etc/asterisk/res_snmp.conf
[general]
subagent = yes
enabled = yes

Le service net-snmp

Pour fonctionner normalement, net-snmp nécessite un fichier de configuration :

syslocation Server Room
syscontact Sysadmin (root@localhost)

rocommunity public 127.0.0.1
rocommunity public 10.1.1.1
master agentx

Ainsi net-snmp va recevoir les informations de asterisk (master agentx) et
il accepter les requetes snmp provenant du serveur nagios (10.1.1.1).

COPIER LES MIBS(Facultatif)
Deux possibilités :
Copier les MIB dans le dossier partagé par tous les utilisateurs (droits root requis) :

cp doc/asterisk-mib.txt /usr/share/snmp/mibs/
cp doc/digium-mib.txt /usr/share/snmp/mibs/

Ou alors les copier dans le dossier /home/utilisateur/.snmp/mibs/. Seul l’utilisateur concerné pourra utiliser ces MIB mais cette fois-ci pas besoin de droits root.

VERIFIER LE BON FONCTIONNEMENT

Au chargement de asterisk :

NET-SNMP version 5.2.3 AgentX subagent connected

EXEMPLES DE DONNEES

ASTERISK-MIB::astVersionString.0 = STRING: 1.4.2
ASTERISK-MIB::astConfigUpTime.0 = Timeticks: (6693143) 18:35:31.43
ASTERISK-MIB::astConfigReloadTime.0 = Timeticks: (6693143) 18:35:31.43
ASTERISK-MIB::astNumModules.0 = INTEGER: 137
ASTERISK-MIB::astNumChannels.0 = INTEGER: 0
ASTERISK-MIB::astChanTypeName.1 = STRING: Zap
ASTERISK-MIB::astChanTypeName.2 = STRING: Skinny
ASTERISK-MIB::astChanTypeName.3 = STRING: SIP
ASTERISK-MIB::astChanTypeName.4 = STRING: Phone
ASTERISK-MIB::astChanTypeName.5 = STRING: Console
ASTERISK-MIB::astChanTypeName.6 = STRING: Local
ASTERISK-MIB::astChanTypeName.7 = STRING: IAX2
ASTERISK-MIB::astChanTypeName.8 = STRING: Feature
ASTERISK-MIB::astChanTypeChannels.1 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.2 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.3 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.4 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.5 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.6 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.7 = Gauge32: 0
ASTERISK-MIB::astChanTypeChannels.8 = Gauge32: 0

A SAVOIR
Sans l’installation des MIB sur le client snmp ces valeurs aurai plutot cette forme :

1.3.6.1.4.1.22736.1.5.1.0 = INTEGER: 0

USAGE DE CACTI

Exemple de graphique

Ce graphique a été réalisé avec cacti, je vais prochainement essayer de publier son template.