Il est important de maintenir à jour sa version d'Asterisk en production.
Si Asterisk a été installé depuis les dépôts d'une distribution, la mise à jour se fait via les mises à jour classiques de la distribution (apt-get update/upgrade ou équivalent).
En revanche, si Asterisk a été installé directement depuis les sources téléchargées sur le site asterisk.org, nous devons faire les mises à jour manuellement.
Nous détaillerons ici la procédure pour une mise à jour de version mineure au sein d'une branche (ex : mise à jour d'Asterisk 11.10.2 vers 11.14.1), mais pas la procédure pour une mise à jour vers une version majeure d'une branche à l'autre (ex : mise à jour d'Asterisk 11.10.2 vers 13.0.1).
Dans notre cas, nous prendrons l'exemple d'une mise à jour d'Asterisk 11.10.2 vers 11.14.1.
Les étapes de la mise à jour
Comme pour toute mise à jour, nous procédons en 3 étapes :
- Sauvegarde de la configuration : permettra un retour-arrière rapide en cas de problème
- Mise à jour du serveur Asterisk
- Sauvegarde de la configuration après la mise à jour : permet de bénéficier d'une sauvegarde à jour de la configuration en cas de panne ultérieure
Sauvegarder ses fichiers de configuration Asterisk
Les répertoires à sauvegarder sont les suivants :
- /etc/asterisk : le répertoire de configuration d'Asterisk
- /var/spool/asterisk/voicemail/ : le répertoire des messageries vocales d'Asterisk
- /var/lib/asterisk/sounds/ : le répertoire contenant les fichiers sons
Si les CDR sont stockés sous forme de fichier csv, il faut aussi en faire une sauvegarde :
/var/log/asterisk/cdr-csv/ : répertoire contenant les CDR au format CSV
Si les CDR sont stockés en base de données, il faut faire un dump de la base.
Par exemple, dans notre cas, les CDR sont stockés dans une base MySQL nommée "asteriskcdr" et nous souhaitons faire une sauvegarde que nous stockons dans le fichier "/sauvegarde/asterisk.sql" :
mysqldump -u root -p -r/sauvegarde/asterisk.sql asteriskcdr
Toutes nos sauvegardes étant faites, nous pouvons maintenant mettre à jour sereinement notre version d'Asterisk.
Connaître la dernière version d'Asterisk
La liste des versions d'Asterisk à jour se trouve à l'URL suivante : http://www.asterisk.org/downloads/asterisk/all-asterisk-versions
D'une façon générale, la dernière version d'Asterisk d'une branche (dans notre cas, nous travaillons avec la 11) se trouve toujours à l'URL suivante :
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz => pour la 11
http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz => pour la 13
...
Télécharger la dernière version d'Asterisk
On se place dans le dossier /usr/src :
cd /usr/src
On télécharge la dernière version :
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz
On décompresse :
tar -zxvf asterisk-11-current.tar.gz
Cela crée un nouveau dossier portant le numéro de la dernière version téléchargée (ex : asterisk-11.14.1).
On se déplace dans le dossier qui vient d'être créé :
cd asterisk-11.14.1
Mettre à jour sa version d'Asterisk
Les étapes sont les mêmes que pour l'installation d'une nouvelle version d'Asterisk :
./configure
make menuselect
make
make install
Nous ne détaillons pas ces étapes : ce sont exactement les mêmes que celles suivies lors de l'installation ; elles sont donc a fortiori déjà connues.
Il ne reste plus qu'à vérifier le bon fonctionnement de son service Asterisk ; par exemple, en se connectant à la console et en passant un appel !
Enfin, nous pensons à refaire une sauvegarde des fichiers de configuration d'Asterisk suite à la mise à jour.
Pour aller plus loin
[Asterisk] Les commandes utiles pour Asterisk
[Asterisk] Connaître son nombre d'appels simultanés
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article : asteriskmettre à jour asteriskupgrade
Il arrive parfois que l'on se connecte à Internet derrière une connexion non-sûre (wifi public), filtrant le contenu (proxy) ou très restrictive et n'autorisant guère plus que les ports 80 (http) et le 443 (https).
Dans ces cas-là, une solution s'impose pour pouvoir surfer en toute liberté : le tunnel SSH !
Nous allons voir comment monter un tunnel SSH vers un serveur accessible par Internet. Ce serveur nous servira de porte de sortie vers un Internet non-bridé.
Principe de fonctionnement
Le principe de fonctionnement est le suivant :
Nous ouvrons depuis notre ordinateur un tunnel SSH vers un serveur de confiance. Puis, nous redirigeons nos flux réseau vers ce tunnel SSH qui nous servira de passerelle de sortie.
Afin d'être le plus efficace possible, nous utiliserons un serveur disposant d'un port SSH en écoute sur le port 443.
Mettre en écoute son serveur SSH sur le port 443
Par défaut, un serveur SSH écoute sur le port TCP 22. Ce qui peut poser problème si l'on se trouve derrière une connexion Internet n'autorisant pas le trafic sur ce port.
Le port TCP 443 (HTTPS) étant très rarement filtré, nous allons faire écouter notre serveur SSH sur ce port.
Pour cela, nous modifions le fichier de configuration de notre serveur OpenSSH (pour Debian/Ubuntu) :
myserver# vim /etc/ssh/sshd_config
Nous recherchons les lignes suivantes :
# What ports, IPs and protocols we listen for
Port 22
Et nous y ajoutons la ligne indiquant à OpenSSH d'être en écoute sur le port 443 :
Port 443
Ce qui nous donne, une fois la modification saisie, les trois lignes suivantes :
# What ports, IPs and protocols we listen for
Port 22
Port 443
Enfin, nous effectuons un rechargement de la configuration du serveur SSH :
myserver# /etc/init.d/ssh reload
/!\ Attention /!\ : si nous avons également un serveur Apache qui tourne sur le même serveur, nous devons d'abord nous assurer qu'il n'est pas déjà en écoute sur le port 443.
D'une façon générale, pour vérifier simplement si un port TCP est en écoute sur un serveur, un petit coup de telnet suffit :
telnet mon-serveur-cible mon-port-cible
Ce qui, dans notre cas, donne :
telnet myserver.mydomain.tld 443
Si notre serveur est en écoute, nous obtiendrons un message du type :
Trying myserver.mydomain.tld...
Connected to myserver.mydomain.tld.
Escape character is '^]'.
Si notre serveur n'est pas en écoute, nous obtiendrons alors un message du type :
Trying myserver.mydomain.tld...
telnet: Unable to connect to remote host: Connection refused
À ce stade, nous disposons d'un serveur SSH en écoute sur le port TCP 443. Il ne nous reste plus qu'à monter notre tunnel !
Monter le tunnel SSH - Solution Windows
Nous commençons par télécharger Putty.
Nous lançons le logiciel, puis, dans l'onglet session, nous renseignons les champs "Host name" et "Port" correspondant à notre serveur SSH :
Ensuite, nous nous rendons dans l'onglet SSH > Connection > Tunnels.
Dans le champ "Source port", nous saisissons 1234, et nous choisissons les options "Dynamic" et "Auto", puis nous cliquons sur le bouton "Add" :
Il nous reste à cliquer sur "Open", ce qui lance une connexion classique sur notre serveur distant.
Si vous êtes derrière un proxy
Si nous nous trouvons derrière un proxy (en entreprise, par exemple), il nous faut renseigner les informations du proxy au niveau des paramètres de Putty. Ça se passe dans Connection > Proxy.
Il reste à choisir le type de proxy (généralement HTTP), renseigner l'URL du proxy et le port d'écoute (souvent le 8080).
Si un username & password sont nécessaires pour l'accès au proxy, nous renseignons ces éléments sur cette même page :
Notre tunnel SSH est prêt. Il nous reste à rediriger nos flux vers ce tunnel.
Monter le tunnel SSH - Solution Linux
Sous GNU/Linux, la mise en place du tunnel se résume en une seule ligne de commande :
ssh -D port-local nomutilisateur@nomhôte -p port-distant
Soit, par exemple :
ssh -D 1234 root@myserver.mydomain.tld -p 443
Notre tunnel SSH est prêt.
Et pour éviter les timeout, nous pouvons ajouter une option de keep alive (option "ServerAliveInterval" avec sa valeur à préciser en seconde) :
ssh -o ServerAliveInterval=2 -D 1234 root@myserver.mydomain.tld -p 443
Il nous reste à rediriger nos flux vers ce tunnel.
Rediriger ses flux réseaux à travers le tunnel VPN
Notre tunnel SSH est monté. Nous souhaitons dorénavant l'utiliser pour rediriger nos flux à travers ce tunnel.
Pour cela, nous utiliserons ce tunnel SSH comme un proxy. C'est d'ailleurs la raison pour laquelle nous avons configuré un port d'écoute local (le port 1234).
Ainsi, pour utiliser ce proxy, nous devons configurer nos logiciels avec les informations suivantes :
- adresse du serveur proxy : localhost (ou 127.0.0.1)
- port du serveur proxy : 1234
Exemple pour Firefox :
Se rendre dans Édition > Préférences > Avancé > Réseau (ou Outils > Options > Avancé > Réseau)
Cliquer sur le bouton "Paramètres...", puis choisir "Configuration manuelle du proxy" et renseigner les paramètres comme suit :
Type : SOCKS5
URL : 127.0.0.1
Port : 1234
Voilà !
Pour aller plus loin
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article : SSHtunnel SSHVPN
Nous décrivons succinctement dans cet article l'installation et la configuration du service postifx.
Le but de cet article n'est pas de rentrer dans le détail, mais de servir de pense-bête.
Dans notre cas, nous travaillons sur un serveur Ubuntu ou Debian hébergé chez OVH.
Les étapes pour l'installation et la configuration d'un serveur postfix sont les suivantes :
Étape 1 - Installation de postfix
On installe le service postfix :
myserver# apt-get install postfix
Par simplicité et habitude, pour le choix de la configuration nous sélectionnons "Site Internet" :
Dans le champ "Nom du courrier", nous laissons l'hostname de la machine (proposé par défaut).
Étape 2 - Modification du fichier main.cf
On édite le fichier de configuration principal (/etc/postfix/main.cf) pour y modifier ou ajouter les lignes suivantes :
relayhost = ns0.ovh.net:587 # on précise le serveur relay ainsi que le port d'écoute
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_generic_maps = hash:/etc/postfix/generic
Forcer l'utilisation d'IPv4 (le cas échéant) :
inet_protocols = ipv4
La valeur de relayhost est évidemment à adapter à la configuration de chacun.
Étape 3 - Création du fichier generic
Pour la translation du courriel, on crée le fichier /etc/postfix/generic et on y place :
utilisateur adresse@email.fr
On crée le hash :
myserver# postmap hash:/etc/postfix/generic
Cette commande crée le fichier generic.db
Étape 4 - Création du fichier sasl_passwd
On crée le fichier /etc/postfix/sasl/sasl_passwd dans lequel nous y stockons les informations de connexion au relai SMTP :
ns0.ovh.net adresse@email.fr:mot_de_passe
Évidemment, le nom de l'hôte est à adapter à la configuration de chacun.
On crée le hash :
myserver# postmap hash:/etc/postfix/sasl/sasl_passwd
Cette commande crée le fichier sasl_passwd.db
Le fichier sasl_passwd contenant les informations de connexion en clair peut être supprimé.
Étape 5 - Reload + test
On recharge la configuration de postfix :
myserver# /etc/init.d/postfix restart
Il reste a essayer d'envoyer un e-mail en ligne de commande (méthode de votre choix).
Pour voir l'état de la file d'attente :
mailq
Elle devrait être vide si l'envoi s'est bien passé.
Pour vider la file d'attente des e-mails :
myserver# /etc/init.d/postfix stop
myserver# postsuper -d ALL
myserver# /etc/init.d/postfix start
That's all folks! :-)
Pour aller plus loin
fail2ban est-ce vraiment utile ? Partage d'expérience
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article : emaillinuxpostfix
En cas de problème sur Asterisk, il est pratique de connaître les commandes de base à utiliser pour établir un premier diagnostique.
Nous présentons ici les principales commandes utiles et les explications pour bien les comprendre.
Connexion à la console Asterisk
Nous partons du principe que le service Asterisk tourne en tâche de fond sur nos serveurs.
Pour se connecter à la console Asterisk, la commande est la suivante :
root@asterisk1:~# asterisk -rvvv
Une fois connecté à la console, pour connaître la liste des commandes disponibles il suffit de saisir « ? ».
Lister tous les comptes SIP
Pour lister toutes les entités SIP, c'est-à-dire tous les téléphones et les trunks SIP, la commande est la suivante :
asterisk*CLI> sip show peers
Cette commande précise notamment le username SIP, l'adresse IP associée, l'état de l'entité et le ping SIP.
Le résultat de la commande ressemble à ceci :
Name/username Host Dyn Forcerport Comedia ACL Port Status Description
1001/s Unspecified D Yes Yes 11475 UNKNOW
1002/s 192.168.11.1 D Yes No A 1024 OK (29 ms)
1003/s 192.168.11.2 D Yes No 5060 OK (14 ms)
3 sip peers [Monitored: 2 online, 1 offline Unmonitored: 0 online, 0 offline]
La lecture du résultat de la commande est la suivante :
- Le poste « 1001 » n'est pas enregistré sur le serveur Asterisk :
- Son adresse IP n'est pas connue : elle vaut « Unspecified »
- Son état est à « UNKNOW »
- Le poste « 1002 » est bien enregistré sur le serveur Asterisk :
- Son état est à « OK »
- Son adresse IP est 192.168.11.1
- Sa latence SIP est de « 29ms »
- Le poste « 1003 » est bien enregistré sur le serveur Asterisk :
- Son état est à « OK »
- Son adresse IP est 192.168.11.2
- Sa latence SIP est de « 14ms »
La commande nous renseigne aussi sur le fait qu'il y a 3 comptes SIP de créés sur le serveur Asterisk, dont 2 qui sont connectés et 1 qui ne l'est pas.
Détailler les paramètres d'un compte SIP
La commande suivante permet de lister les paramètres détaillés d'un compte SIP :
asterisk*CLI> sip show peer 1001
Voir les communications en cours
Pour visualiser les communications en cours :
asterisk*CLI> core show channels
Le résultat de la commande ressemble à ceci :
Channel Location State Application(Data)
SIP/1001-00009867 s@user:36 Up Dial(SIP/1002,15,hHtT)
SIP/1002-00009876 (None) Up AppDial((Outgoing Line))
2 active channels
1 active call
4012 calls processed
La lecture du résultat est la suivante :
- Les postes « 1001 » et « 1002 » sont en communication (l'un avec l'autre)
- C'est le poste « 1001 » qui appelle l'autre poste (la dernière application lancée étant « Dial(SIP/1002,15,hHtT) » qui se traduit par « appeler le poste SIP 1002, laisser sonner 15 secondes avant de passer à l'étape suivante du dialplan s'il ne décroche pas »).
- On observe qu'il y a 1 appel en cours (1001 vers 1002) et qu'il y a eu 4012 appels passés depuis que le service Asterisk est démarré.
Connaître le détail d'une communication en cours
Pour connaître le détail d'une communication en cours, la commande est la suivante :
asterisk*CLI> core show channel SIP/1001-00009867
Le résultat de cette commande est très verbeux. Plusieurs parties peuvent nous intéresser.
Les lignes suivantes nous renseigne sur le codec utilisé :
NativeFormats: (alaw)
WriteFormat: alaw
ReadFormat: alaw
Les variables CDR nous renseigne notamment sur la durée de l'appel (peut être très utile pour détecter les appels fantômes, c'est-à-dire mal raccrochés) :
level 1: start=2015-06-09 15:44:26
level 1: answer=2015-06-09 15:44:47
level 1: duration=774
level 1: billsec=753
Observer la perte de paquets sur une communication
La commande suivante est utile pour s'assurer qu'il n'y a pas de pertes de paquets RTP (c'est-à-dire de paquets audios) lors d'une communication :
asterisk*CLI> sip show channelstats
Le résultat est de la forme suivante :
Peer Call ID Duration Recv: Pack Lost ( %) Jitter Send: Pack Lost ( %) Jitter
192.168.11.1 4d67bf4946f 0000002619 0000000000 ( 0.00%) 0.0000 0000002626 0000000000 ( 0.00%) 0.0001
192.168.11.2 3560b15a896 00:02:22 0000007095 0000000000 ( 0.00%) 0.0000 0000007096 0000000000 ( 0.00%) 0.0001
192.168.10.1 2f10b98f723 00:43:18 0000000129K 0000000001 ( 0.00%) 0.0000 0000000129K 0000000003 ( 0.00%) 0.0000
3 active SIP channels
La lecture du résultat est la suivante :
- Il n'y a pas de perte de paquets sur ces appels concernant les peer SIP 1001 et 1002 (que ce soit pour les paquets reçus (Recv Pack Lost) comme pour les paquets émis (Send Pack Lost))
- Le peer 1003 rencontre très peu de perte de paquets (quantité totalement négligeable)
- La variation de la latence (Jitter) est faible : cela signifie que la qualité du lien réseau est stable.
Saisir les commandes Asterisk directement depuis le SHELL Linux
Il est à noter que l'ensemble des commandes présentées peuvent être saisies directement depuis un shell Linux de la manière suivante :
root@asterisk1:~# asterisk -rx 'ma commande Asterisk'
Cette possibilité s'avère particulièrement utile pour combiner le résultat d'une commande Asterisk avec d'autres commandes SHELL.
Par exemple, pour lister tous les postes SIP connectés depuis un site dont le sous-réseau est 192.168.11.x :
root@asterisk1:~# asterisk -rx 'sip show peers' | grep 192.168.11.
Exemple de résultat :
1002/s 192.168.11.1 D Yes No A 1024 OK (29 ms)
1003/s 192.168.11.2 D Yes No 5060 OK (14 ms)
Seuls les postes 1002 et 1003 ressortent.
Dans un prochain article, nous aborderons les clés de lecture nécessaires à l'analyse des fichiers de log Asterisk.
Pour aller plus loin
[Asterisk] Connaître son nombre d'appels simultanés
[Asterisk] Mettre à jour son serveur Asterisk
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article : asterisk
Il est utile de connaître le nombre d'appels simultanés transitant sur sa plateforme Asterisk.
Nous présentons dans cet article comment connaître son nombre d'appels simultanés en temps réel, ainsi que le nombre exact d'appels simultanés qu'il y a eu sur une plage de temps donnée.
Nombre d'appels simultanés en temps réel
Connaître son nombre d'appels simultanés en temps réel est très simple : Asterisk fournit directement une commande pour ça :
asterisk*CLI> core show channels
Le résultat de la commande ressemble à ceci :
Channel Location State Application(Data)
SIP/1001-00009867 s@user:36 Up Dial(SIP/1002,15,hHtT)
SIP/1002-00009876 (None) Up AppDial((Outgoing Line))
2 active channels
1 active calls
4012 calls processed
Cette commande permet de lister les appels en cours. Elle précise également le nombre d'appels passés depuis le démarrage du service Asterisk. Dans notre exemple, on y apprend qu'il y a un appel en cours (1 active calls).
Dans notre cas, l'information que nous cherchons à récupérer est simplement la valeur de la ligne "active calls". Pour cela, nous proposons de passer par un script SHELL :
root@asterisk1:~# asterisk -rx 'core show channels' | grep 'active calls' | cut -f 1 -d ' '
Dans le code ci-dessus, si l'on détaille chaque étape (séparée par un pipe), nous avons :
asterisk -rx 'core show channels'
Exécute la commande "core show channels" et retourne le résultat dans le SHELL
grep 'active calls'
Ne récupère que la ligne comportant la mention "active calls" (c'est uniquement elle qui nous intéresse).
cut -f 1 -d ' '
Permet de découper l'affichage en prenant les espaces comme marque de délimitation (option -d ' ') et de n'afficher que le premier segment (option -f 1).
Pour reprendre notre exemple, le résultat de la commande sera alors :
root@asterisk1:~# asterisk -rx 'core show channels' | grep 'active calls' | cut -f 1 -d ' '
1
Nombre d'appels simultanés sur une période donnée
Pour obtenir le nombre d'appels simultanés sur une période de temps donnée, nous proposons d'utiliser la ligne de commande fournie par Jean du forum asterifk-france.org.
La commande est la suivante :
awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s %03d\n", $1, cpt);}'
Cette commande filtre le contenu du fichier Master.csv sur chaque changement du nombre d'appels simultanés. Le résultat est affiché dans la console. Il est de la forme suivante :
2015-06-11 08:38:19 004
2015-06-11 08:38:30 005
2015-06-11 08:38:55 004
2015-06-11 08:39:10 003
2015-06-11 08:39:13 004
2015-06-11 08:39:42 003
2015-06-11 08:41:42 002
2015-06-11 08:42:35 001
2015-06-11 08:42:46 002
2015-06-11 08:43:50 001
Le premier champ indique la date, le second l'horaire auquel le changement du nombre d'appels simultanés a eu lieu et le troisième le nombre d'appels simultanés.
Limiter le résultat à un contexte
Si l'on souhaite, nous pouvons également limiter le résultat à un contexte en particulier. Exemple :
awk 'BEGIN{FS=",\""} /monContexte/*/ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s;%03d\n", $1, cpt);}'
Le décompte ne se fera alors que sur le nombre d'appels simultanés du contexte "monContexte".
Écrire le résultat dans un fichier pour l'exploiter
Plutôt que d'afficher les résultats à l'écran, nous les écrivons dans un fichier texte :
awk 'BEGIN{FS=",\""} /ANSWERED/{split($11, a, "\""); split($12, b, "\"");printf ("%s,1\n%s,-1\n", a[1],b[1]); }' /var/log/asterisk/cdr-csv/Master.csv | sort | awk -F , '{cpt=cpt+$2; printf ("%s %03d\n", $1, cpt);}' > monFichier.csv
Ce fichier peut ensuite être importé dans un tableur type LibreOffice ou Excel, en précisant que la séparation des champs se fait sur les espaces :
Dans LibreOffice :
Dans Excel :
On peut ensuite faire des tris ou appliquer des filtres sur ces données !
Pour aller plus loin
[Asterisk] Les commandes utiles pour Asterisk
[Asterisk] Mettre à jour son serveur Asterisk
Tous nos articles classés par thème
Voir un article au hasard
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous.
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article : asterisknombre d'appels simultanés
Un service Asterisk qui tombe, ça peut arriver. C'est la panne et il faut le relancer.
Nous proposons un script shell qui s'occupe de vérifier à intervalle régulier l'état du service Asterisk. Si le service est DOWN, celui-ci est relancé et un e-mail d'alerte est envoyé.
Vérifier l'état du service
Une première solution peut consister à s'assurer que le service soit bien lancé. Cela s'opère depuis la commande suivante :
myserver# ps ax | grep 'asterisk
Si le service Asterisk tourne, il nous est retourné quelque chose comme :
12039 ? Ssl 7:13 /usr/sbin/asterisk
De notre expérience, cette vérification ne suffit pas : nous avons déjà rencontré des services Asterisk qui était lancé (service UP), mais qui était en défaut de fonctionnement (impossible de connecter à la console, impossible d'enregistrer un peer, etc.).
Pour cette raison, nous préférons utiliser la commande suivante qui a pour intérêt de se connecter à la console Asterisk :
asterisk -rx 'test'
Si le service Asterisk est démarré et pleinement fonctionnel, le message suivant est retourné :
No such command 'test' (type 'core show help test' for other possible commands)
Si le service est arrêté ou qu'il ne répond plus, nous recevrons le message suivant :
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
On script !
On crée un script shell qui vérifie si le service Asterisk est OK ou KO :
#!/bin/bash
#
# Commande Asterisk
testAsterisk=$(asterisk -rx 'test')
# On compte le nombre de caractères retournés
nombre=${#testAsterisk}
case $nombre in
81)
#Asterisk OUT, on le redémarre
/etc/init.d/asterisk restart
;;
79)
#Asterisk est OK
;;
esac
Ce script pose néanmoins deux problèmes :
- Que se passe-t-il si Asterisk retourne autre chose que l'un des deux messages prévus ?
- Il peut être intéressant d'être prévenu par e-mail !
On améliore donc tout ça...
Script final
On ajoute la possibilité que le message retourné puisse être autre chose que ceux prévus. On alerte par e-mail :
#!/bin/bash
#
# Fonctionnement :
# Vérification de l'état du service Asterisk - toutes les minutes (job cron)
# 1) Asterisk est KO : on redémarre et on envoie un e-mail au support
# 2) Asterisk est OK : on ne fait rien...
# 3) On ne sait pas : on envoie un e-mail au support
# Commande Asterisk
testAsterisk=$(asterisk -rx 'test')
# On compte le nombre de caractères retournés
nombre=${#testAsterisk}
case $nombre in
81)
#Asterisk OUT, on le redémarre
/etc/init.d/asterisk restart
SUBJECT="[URGENT] Serveur Asterisk KO"
EMAIL="support@example.com, john.doe@example.com, paul.smith@example.com"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "Le service Asterisk est KO" > $EMAILMESSAGE
echo "Il vient d'être redémarré automatiquement..." >> $EMAILMESSAGE
echo "Merci de vérifier !" >> $EMAILMESSAGE
echo "Bonne journée" >> $EMAILMESSAGE
echo "--" >> $EMAILMESSAGE
echo "La commande asterisk -rx 'test' a renvoyée le message suivant :" >> $EMAILMESSAGE
echo $testAsterisk >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
;;
79)
#Asterisk est OK
;;
*)
#Retour inattendu
SUBJECT="Serveur Asterisk -> État inconnu"
EMAIL="support@example.com"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "L'état du service Asterisk n'est pas connu." > $EMAILMESSAGE
echo "La commande asterisk -rx 'test' a renvoyée le message suivant :" >> $EMAILMESSAGE
echo $testAsterisk >> $EMAILMESSAGE
echo "Bonne journée" >> $EMAILMESSAGE
mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
;;
esac
On automatise l'exécution de ce script
On édite le fichier /etc/crontab pour y ajouter les lignes suivantes :
# Verifie que le service Asterisk soit bien OK - toutes les minutes
* * * * * root /home/supervision/verifAsteriskStart.sh > /dev/null 2> /dev/null
Vous avez aimé cet article ? Vous cherchez un support professionnel ? Alors contactez-nous
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article : asteriskscriptsupervision
Mise en place de ce blog dans le but de partager des tutoriaux et des astuces principalement sur pfSense et Asterisk.
Retrouvez nos services et firewall pour pfSense
store.provya.fr
Tags de l'article :