Installation du serveur de monitoring ‘Cacti’ pour Asterisk
Oussama Hammami, 2010-05-10
Switzernet
Installation
du serveur de monitoring ‘Cacti’ pour Asterisk
1.4-
Installer La base de donnée (Mysql)
2.1-
Installation des packages
Gestion
du polling via notre crontab
2.3-
Création d'un device (hôte)
Création supplémentaire des graphiques
3-
Intégration de scripts personnalisés dans Cacti
3.2-
Collecte des données dans Cacti
3.3-
Création du modèle de source de données
3.4-
Génération des sources pour les graphs
3.5-
Créer le modèle pour le graphique :
3.6-
Génération du graphique à partir du template
Ce document
vous explique comment installer un serveur du monitoring sous Debian. Chaque
étape y est expliquée clairement, et dans l'absolu, il n'est pas nécessaire
d'avoir des connaissances en informatique pour le suivre.
Néanmoins,
et malgré la démocratisation des offres pour serveurs dédiés disponibles en
francophonie (Suisse / France / Belgique) offert par OVH et FREE (par exemple),
la gestion et la sécurisation d'un serveur dédié demande un minimum de
connaissances du système Linux.
Pour bien
pouvoir suivre ce tutorial, vous devrez savoir au moins :
1. Vous connectez en root au moyen de SSH sur
votre machine
2. Editer un fichier de configuration en mode
texte (VI, VIM, Nano, etc)
3. Avoir des bases en programmation
S'il vous
manque certaines informations, sachez qu'Internet en regorge. Ce tutorial ne
prétend pas voir tous les aspects de l'hébergement web. Il reste actuellement
pas mal de points qui pourraient nécessiter une explication (installation
d'.htaccess, configuration du SSL, création de script de sauvegarde, ...).
Ce tutorial
a été basé sur la distribution Debian fournie par OVH sur ses serveurs dédiés.
Il s'agit donc d'un Debian 4.3.2, fournie avec uniquement un accès SSH.
Se
connecter en root sur le serveur puis effectuer une mise à jour :
apt-get update
apt-get upgrade
Une fois le
serveur à jour, on peut commencer à installer les différents services
nécessaires sur notre serveur. Attention, pensez à redémarrer les services
après chaque installation ou reconfiguration :
#
/etc/init.d/nom_service restart
Il nous
faut installer un serveur HTTP qui va s'occuper d'afficher nos différentes
pages. Pour cela, je vous propose d'installer l'un des serveurs les plus
utilisés et les plus connus : Apache. Nous installerons ici sa version 2.
# apt-get
install apache2
Tester
l'installation d'apache : http://xxx.xxx.xxx.xxx/ (IP du serveur)
Vous pouvez
supprimer la redirection sur /apache2-default/ :
# nano
/etc/apache2/sites-available/default
#RedirectMatch
^/$ /apache2-default/
Pour
accéder directement à la configuration des virtualhosts : ici
Actuellement,
notre serveur peut nous afficher des pages statiques au format HTML. La plupart
des sites que vous voudrez installer disposeront d'une partie dynamique. C'est
pourquoi nous poursuivons par l'installation de PHP 5 sur le serveur.
# apt-get
install php5
S'il
annonce que le package n'a pas été trouvé, éditez le fichier source d'Apt et
ajoutez :
# nano /etc/apt/sources.list
deb
http://packages.dotdeb.org stable all
On met à
jour la liste des packages :
# apt-get update
Et on
installe php5.
PHP est
très très souvent couplé à un système de base de données : Mysql. Nous
installons ici Mysql-server version 5. Vous verrez plus bas que nous allons
également installer phpmyadmin. Il s'agit d'un script php qui permet de gérer
ses bases de données Mysql de facon très simple.
# apt-get
install mysql-server
Définir le
mot de passe root de Mysql (« mysql » par exemple). Dans l'écran suivant, il
demande s'il faut gérer les connexions d'hôtes qui utilisent Debian Sarge. On
répond OUI (répondre non empêchera la configuration de Postfix par la suite !).
On vérifie
que Mysql fonctionne bien :
# mysql -p
entrer le mot de
passe
>Exit;
Installer
les librairies php5-mysql :
# apt-get
install php5-mysql
Installer PhpMyAdmin :
# apt-get
install phpmyadmin
Choix du
serveur a paramétrer : Apache2
On
redémarre Apache quand proposé
On se
connecte par l'adresse http://xxx.xxx.xxx.xxx/phpmyadmin.
Cacti est
un outil de création de graphiques reposant sur une interface web basée sur PHP
et MySQL et qui utilise le moteur RRDTool pour collecter les statistiques.
Classiquement,
Cacti peut créer des graphiques de bandes passantes réseaux avec SNMP, mais en
fait, un nombre impressionnant de graphiques peuvent être conçu avec SNMP, des
scripts perl ou des scripts shell.
Les programmes
suivants sont requis pour faire tourner Cacti:
- apache2 pour le serveur web
- mysql-server pour la base de données
- php5 pour le language de script coté serveur
- php5-common
- php5-cgi
- php5-cli
- php5-mysql
- snmp - pour collecter les statistiques SNMP
des agents distants.
- rrdtool - un script pour formater les données
colléctés en fichier rrd.
# apt-get
install php5-cli php5-mysql php5-snmp snmp snmpd rrdtool cacti
Il y a un
fichier de configuration :
•/etc/snmp/snmpd.conf
: fichier de configuration de l'agent SNMP.
Il faut
modifier la partie Access Control :
. . .
#com2sec paranoid default public
com2sec readonly default astrad
#com2sec readwrite default private
####
# Second, map the security names into group names:
# sec.model sec.name
group MyROSystem v1 paranoid
group MyROSystem v2c paranoid
group MyROSystem usm paranoid
group MyROGroup v1 readonly
group MyROGroup v2c readonly
group MyROGroup usm readonly
group MyRWGroup v1 readwrite
group MyRWGroup v2c readwrite
group MyRWGroup usm readwrite
. . .
Enfin pour
que l'agent accepte les requêtes du réseau, il faut modifier la ligne suivante
:
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
en :
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'
Ceci permet
d'accepter les requêtes venant du réseau.
Maintenant
que la configuration est finie, redémarrons l'agent pour prendre en compte les
modifications :
# /etc/init.d/snmpd restart
En cas de
présence d’un firewall sur le réseau, pour que l'agent SNMP soit accessible, il
faut autoriser le port 161/UDP.
Vous devez
configurer les paramètres MySQL à travers un petit assistant.
A la suite de l'assistant, une base de données et un utilisateur MySQL appelé
cacti vont être automatiquement créés.
|
Mot de passe de l'utilisateur MySQL root |
|
Mot de
passe de l'utilisateur MySQL cacti |
|
Confirmation
du mot de passe de l'utilisateur cacti |
|
Serveur
web utilisé par Cacti |
Maintenant, Cacti est prêt à être utilisé avec:
http://your_ip_adress/cacti
L'utilisateur et
mot de passe par défaut sont "admin".
Cacti va alors vérifier que tous les composants requis à son bon fonctionnement
sont bien installés correctement.
|
Licence
de Cacti |
|
Sectionner
"new install" (nouvelle installation) |
|
Vérification
des outils prérequis à l'installation. |
Noter que
le script poller.php qui envoie les requête vers les équipements distants est
lancé par l'utilisateur d'apache, c'est-à-dire www-data.
Pour
reconfigurer cacti, utiliser la commande suivante:
#dpkg-reconfigure
cacti
Pour
activer le poller manuellement:
# php5 /usr/share/cacti/site/poller.php
Il peut
arriver qu'il soit nécessaire de lancer le script la première, ensuite il est
lancé automatiquement toutes les cinq minutes par défaut.
Afin de
récupérer des données (charge CPU, espace disques....etc), lors de
l'installation, un fichier de crontab a été mis en place par Cacti dans
/etc/cron.d/cacti. Il contient :
MAILTO=root
*/5 * * * * www-data php
/usr/share/cacti/site/poller.php >/dev/null
2>/var/log/cacti/poller-error.log
Remarque : Il existe un paquet connu sous le nom de
cacti-cactid qui a le même rôle que le fichier poller.php, mais, qui est plus
rapide. Il est à utiliser pour les serveurs sur lesquels transitent beaucoup de
trafic. Cependant, si poller.php fonctionne correctement (pas d'erreur liée à
un délai de réponse trop important), il est vivement déconseillé de
l'installer.
Pour
installer ce paquet :
# apt-get install cacti-cactid
On accède à
Cacti via l'url : [http://] « adresse de notre serveur »/cacti.
Par défaut,
le login et le mot de passe ont les valeurs suivantes :
•Login : admin
•Password : admin
Lors du
premier lancement, renseignez les champs avec ces deux valeurs. Ensuite, il
vous sera demandé un nouveau mot de passe pour l'utilisateur admin.
Je vais ici, indiquer
toutes les étapes de la création de graphiques pour la supervision du trafic
réseau. Beaucoup d’autres possibilités sont bien sur disponibles.
Sélectionnez Devices dans le menu de gauche. La page de tous les devices
existants s'affiche. Choisissez ensuite Add : une liste de champs
apparaît vous permettant de renseigner les premières informations nécessaires à
la création du device.
Cliquez sur Create afin de mettre à jour votre configuration.
Deux nouvelles rubriques sont maintenant disponibles. Dans celle intitulée 'Associated
Graph Templates' sélectionnez via la liste déroulant le type de graphique
que vous souhaitez. Pressez Add pour l'ajouter à la liste des graphs du
device.
Il est maintenant
possible de créer d’autres graphiques. Choisissez 'New Graphs' dans le
menu de gauche puis sélectionnez la configuration que l'on vient de créer. Les
graphiques pouvant être générés apparaissent.
Les graphiques de Cacti
peuvent être classés suivant différents niveaux à l'aide d'un arbre pour une
meilleure gestion et visibilité des hôtes sur notre réseau. On va donc créer un
nouveau niveau dans l'arbre par défaut pour y stocker nos graphiques.
Choisissez Default Tree en haut à gauche.
Des champs concernant la configuration de la nouvelle branche de notre arbre
apparaissent.
Il y a deux modes
disponibles sous Cacti :
Remarque : Il faut attendre un peu avant de voir s'afficher
les courbes qui viennent d'être créées. Le système récupère les nouvelles
données en fonction du temps attribué dans notre crontab configurée précédemment.
Cacti
propose bon nombre de fonction par défaut, ainsi que de scripts dans le répertoire
par défaut (/usr/share/cacti/site/scripts). Mais il peut être intéressant de
vouloir monitorer d'autre fonctionnalité de sa machine. Nous prendrons l'exemple
d'écriture d'un script qui permettra de compter le nombre de channel sip
simultanée sur un serveur Asterisk.
Editer ce
script [AMI2.pl]
en ajoutant le nom d’utilisateur et le mot de passe créer dans manager.conf d’Asterisk.
Notre
script [AMI2.pl] étant prêt nous le déposons dans le répertoire
d'installation de cacti, plus précisément dans le répertoire scripts/.
- Dans
l'interface web, cliquez sur 'Data Input Methods' dans le sous menu 'Collection
Methods'.
- Puis
cliquez sur 'Add' en haut à droite. La fenêtre ci-dessous apparaît :
-
Remplissez-la de la manière suivante :
Nom : Asterisk - Sip Channels
Input Type : Script/Command
Input String : perl <path_cacti>/scripts/AMI2.pl <ip>
- Cliquez
sur 'Create'
-
Maintenant cliquez sur 'add' à droite tu tableau 'Output Field', la fenêtre
ci-dessous apparaît :
-
Remplissez de la manière suivante :
Field : SIP channels
Friendly Name : Active SIP channels
- Cliquez
sur 'Create'
-
Maintenant cliquez sur 'add' à droite tu tableau 'Input Field', la fenêtre
ci-dessous apparaît :
-
Remplissez de la manière suivante :
Friendly Name : IP Address
Special Type Code : hostname
- Cliquez
sur 'Create'
- Cliquez
sur 'Save'
- Cliquez
sur 'Data Template' du sous menu 'Template', puis cliquez sur 'Add'
- La
fenêtre ci-dessous apparaît :
- Remplissez-la
avec les informations suivantes :
Name : Active SIP channels
Name : |host_description| - Active SIP
channels
Data
Input Method :
choisir celle correspondante à ' Asterisk - Sip Channels '
Internal Data Source Name : SIP_channels
Les autres
champs restent par défaut.
- Cliquez
sur 'Data Source' dans le sous menu 'Management'.
- Choisir
l'hôte concerné dans la liste déroulante, puis cliquez sur 'Add'
- Dans la
liste déroulante qui apparait, choisir le modèle que l'on vient de créer à l'étape
suivante, puis cliquez sur 'Create'
- Cliquez
sur 'Graph Template' du sous menu 'Template'.
- Cliquez
sur 'Add' en haut à droite
- Le
formulaire ci-dessous apparaît :
-
Remplissez-le avec les informations ci-dessous :
Name : Active Sip Channels
Name : |host_description| - Active Sip Channles
- Cliquez
sur 'Add' dans le tableau 'Graph Template Item'
- Le
formulaire ci-dessous apparaît :
- Remplissez-le
comme suit :
Data
Source : Choisir la
source de données ‘Active Sip Channels’ dans la liste
Color : couleur de la courbe
Graph
Item Type : type de
courbe (Area)
- Cliquez
sur 'Create'
Pour
ajouter une légende, il faut reproduire exactement la même opération mais choisir
'Legend' dans le champs 'Graph Item Type'
- Cliquez
sur 'Graph Mangement' du, vous l'aurez devinez sous menu 'Management', puis
cliquez sur 'Add'
- Dans le
champ 'Graph Template Selection' choisir son template (créé juste avant), puis
également les champs dans 'Data Source'.
- Voilà
normalement ça devrait tracer, il faut attendre tout de même quelques tours de
crontab avant que ça trace d'après ce que j'ai pu observer. Quand on parle de
crontab il faut penser au fameux 'php <rep_cacti>/poller.php
Cacti est
un outil de surveillance basé sur le célèbre RRDTool, permettant de connaître
toutes les données systèmes des autres ordinateurs du réseau. Il les présente
automatiquement sous forme de graphiques consultables depuis une page web. Par
ailleurs, il dispose d'un système de plugins qui le rend simple d'utilisation
et très modulaire. Il est ainsi possible de le coupler à GLPI afin de disposer
d’un outil de gestion pour le parc. La lecture des graphique et l’exploitation
des données est cependant beaucoup moins agréable.
La
surveillance d'un système permet de connaître sa disponibilité à un instant t,
mais aussi de mesurer dans le temps l'évolution d'un certain nombre de
paramètres tels l'occupation de l'espace disque ou la charge mémoire. Il
devient alors possible par extrapolation de prévenir le moment de rupture du
système en prenant des mesures préventives.
Exemple de
connexion à Asterisk-Manager via un simple client telnet
http://condorcet.iris.free.fr/spip.php?article54
Asterisk::AMI
http://search.cpan.org/~greenbean/perl-Asterisk-AMI-0.1.10/lib/Asterisk/AMI.pm
Enable Asterisk-SMP and monitor with Nagios
http://www.danielaliaman.com/blog/files/AsteriskSNMPtutorial.pdf
[Fedora 8]
Installation et utilisation de cacti
http://bodman.wordpress.com/2008/01/18/fedora-8-installation-et-utilisation-de-cacti/
Cacti :
monitorer votre serveur
http://www.lanforums.com/tutorial-26_cacti_:_monitorer_votre_serveur.html
Intégration
de scripts personnalisés dans Cacti
http://www.serveur-monty.net/cours/howto/howto_script_cacti.pdf
Data Input
Method avec un script shell
http://www.nuxora.com/tutorials/tutorial-cacti-data-input-method-script-shell/
SNMP Server (snmpd) and Client (snmp) Installation and Configuration in Debian
http://www.debianhelp.co.uk/snmp.htm
Configurer
SNMP sur un serveur pour le rendre accessible à distance par Cacti
http://doc.ubuntu-fr.org/tutoriel/configurer_snmp_pour_utiliser_cacti_depuis_une_machine_distante
Cacti : un
serveur de supervision
http://doc.ubuntu-fr.org/cacti
Monitoring Asterisk 1.4 with SNMP and CACTI
http://www.voipphreak.ca/2007/04/16/monitoring-asterisk-14-with-snmp-and-cacti-for-pretty-graphs/
Asterisk - Channels In Use (via res_snmp.so)
http://forums.cacti.net/viewtopic.php?t=31296
Asterisk::Monitoring
http://bodman.wordpress.com/category/asterisk/
Asterik
IP-PBX Statistics (SIP/IAX2 protocols)
http://forums.cacti.net/viewtopic.php?p=111317
#!/usr/bin/perl
#############################
# my modules
use strict;
use warnings;
use POSIX;
use Switch;
use Asterisk::AMI;
#############################
# Globals
my $astman;
my $ast_username = 'username';
my $ast_password = "password";
my $ast_hostname=$ARGV[0];
my $ast_port="5038";
#############################
# connect Acterisk Menager
Get_Info ();
##############################################################################################
# AMI connect
##############################################################################################
sub AMI_connect {
$astman = Asterisk::AMI->new(PeerAddr => $ast_hostname,
PeerPort => $ast_port,
Username => $ast_username,
Secret => $ast_password,
Events => 'off'
);
unless ($astman)
{
print "0";
return 0;
}
return 1;
}
##############################################################################################
# Get Sip Active Channels From Asterisk
##############################################################################################
sub Get_Info {
my $IDN=$_[0];
AMI_connect();
unless ($astman)
{
print "0";
return 0;
}
my $actionid = $astman->send_action({ Action => 'Command',
Command => "show channels"
});
my $response = $astman->get_response($actionid);
my $rr2=$response->{'CMD'};
my @aa = @$rr2;
my $nbch=0;
foreach my $i (@aa)
{
if (($nbch) = $i =~ /^(\d+) active SIP channels$/)
{
print "$nbch";
return 1;
}
}
print "0";
return 0;
}
;
; Asterisk Call Management support
;
[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1,asterisk_ip_adress
secret=test
[test]
secret=test
permit=127.0.0.1
read=system,call,log,verbose,agent,command,user
write=system,call,log,verbose,agent,command,user
[username]
secret=password
permit=cacti_ip_adress
read=system,call,log,verbose,agent,command,user
write=system,call,log,verbose,agent,command,user