Installation du serveur de monitoring ‘Cacti’ pour Asterisk
Updated Nicolas Bondier, 2013-07-22
Updated André Guimarães, 2012-09-13
Created 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étré : 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 :
•/usr/share/snmp/snmpd.conf
: fichier de configuration de l'agent SNMP.
Dans les
nouvelles versions de snmp, il est possible que le fichier /usr/share/snmp/snmpd.conf
ne soit pas présent (ou vide) dans votre système.
Pour en
créer un, il faut utiliser l’utilitaire snmpconf installé avec snmp.
L’utilitaire
demande beaucoup d’informations et le fichier créer n’est pas forcement
utilisable avec le démon snmp (erreurs). Un exemple de configuration valide est
disponible en suivant ce lien : [snmpconf_sample.txt].
Une fois
cette étape passé, rajouter la ligne suivante à la fin du fichier, sous Access
Control Setup:
. . .
com2sec
readonly default astrad
Maintenant
que la configuration est finie, redémarrons l'agent pour prendre en compte les
modifications :
# /etc/init.d/snmpd restart
Lors du démarrage de l’agent, il est possible
que celui-ci ne trouve pas les MIBs requises.
Pour passer ce problème, télécharger le paquet
[snmp-mibs-downloader]. Il permet de les télécharger et de les installer.
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/.
Ajouter
aussi les scripts [Astrad_Customers.pl] et [Astrad_Customers2.pl] qui lisent le numéro de clients
enregistrés de PBS o directement sur l’Astrad.
Tous les scripts contenus dans le répertoire des
scripts peuvent être téléchargé [ici]. Ils devraient être modifiées pour avoir le bon login et mot de passe.
- Dans
l'interface web, cliquez sur ‘Import templates' dans le sous menu 'Import/Export'.
Importer chacun des fichiers contenus dans ce [fichier
zip].
L'explication sur la façon de créer un de ces modèles suit.
- 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
Actuellement, nous utilisons les graphiques suivants:
Ces graphes sont versions modifies de les
templates « Ucdnet – cpu usage » et « X_MySQL - network_traffic_gt ».
Le premier montre la charge CPU total du système et le deuxième la quantité des
donnes transfères entre chaque DBA et les autres serveurs (Astrads et PBS). Le
graphe d’appels et de enregistrement été crié par nous. Tous ces templates sont
[ici].
Le serveur de monitoring est aussi responsable
pour afficher les pages :
http://monitor.switzernet.com/110207-register/monit-stat.php - Table showing daily averages (min, avg, max) and monthly averages.
http://monitor.switzernet.com/120210-register - Customer flow charts
http://monitor.switzernet.com/120222-registered - Daily registrations graph (min, avg, max)
http://monitor.switzernet.com/120203-customers/customers_stats_days.php?dinit=2012-01-01 – Normalized daily averages in the last week.
Génère des donnes pour:
http://switzernet.com/public/091017-support-numbers/stats/
Pour ça il faut installer les scripts suivants et
ajouter sur CRONTAB :
51 11,20 * * * /root/folders/091017-support-numbers/report.sh support > /dev/null
51 3 * * * /root/folders/091017-support-numbers/report.sh oper > /dev/null
STAT-REG.pl
- lit le nombre de visiteurs uniques
enregistrés à partir de
db2.switzernet.com. Écrit sur la table 110204-reg-stat customer_by_host (montre un plus grand nombre de clients enregistrés car il compte parfois deux fois le même client s'ils sont enregistrés dans différents serveurs Astrad). Cependant, il
comprend les clients dans les serveurs
Porta-SIP.
STAT-REG-DBA.pl
- lit le nombre de visiteurs uniques
enregistrés per serveur Astrad à partir
de from db3.switzernet.com. Écrit sur la table 110204-reg-stat
customer_by_host2
Pour exécuter ces deux scripts il faut ajouter à
CRONTAB :
*/30 * * * *
/usr/share/cacti/site/scripts/STAT-REG.pl
*/30 * * * *
/usr/share/cacti/site/scripts/STAT-REG-DBA.pl
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
Pages de
statistics dans monitor.switzernet.com
http://monitor.switzernet.com/110207-register/monit-stat.php - Table showing daily averages (min, avg, max) and monthly averages.
http://monitor.switzernet.com/120210-register - Customer flow charts
http://monitor.switzernet.com/120222-registered - Daily registrations graph (min, avg, max)
http://monitor.switzernet.com/120203-customers/customers_stats_days.php?dinit=2012-01-01 – Normalized daily averages in the last week.
http://monitor.switzernet.com/cacti/
#!/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