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

1- Installation de base. 2

1.1- Préparer son serveur 2

1.2- Installer apache 2. 2

1.3- Installer php 5. 2

1.4- Installer La base de donnée (Mysql) 3

2- Installation de Cacti 3

2.1- Installation des packages. 4

L'agent SNMP.. 4

Firewall 4

2.2- Lancement de Cacti 5

Gestion du polling via notre crontab. 7

2.3- Création d'un device (hôte) 7

Création supplémentaire des graphiques. 8

Classement des données. 8

Regarder ses graphiques. 9

3- Intégration de scripts personnalisés dans Cacti 9

3.1- Le script 9

3.2- Collecte des données dans Cacti 9

3.3- Création du modèle de source de données. 11

3.4- Génération des sources pour les graphs. 12

3.5- Créer le modèle pour le graphique : 12

Le graph. 12

Courbes et légendes. 13

3.6- Génération du graphique à partir du template. 14

3.7- Ca tourne ! 14

Conclusion Générale. 15

Référence. 16

Annexe. 17

AMI2.pl 17

Manager.conf 19

 

 

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.

1- Installation de base

1.1- Préparer son serveur

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

1.2- Installer apache 2

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

1.3- Installer php 5

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.

1.4- Installer La base de donnée (Mysql)

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.

2- Installation de Cacti

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.

2.1- Installation des packages

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

L'agent SNMP

 

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.

Firewall

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.

2.2- Lancement de Cacti

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.

Gestion du polling via notre crontab

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

2.3- Création d'un device (hôte)

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.



0-4ebGMjfc-cacti18-s-



Cliquez sur Create afin de mettre à jour votre configuration.

0-oiG6QFZj-cacti19-s-



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.

Création supplémentaire des graphiques

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.

Classement des données

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.

Regarder ses graphiques

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.

 

3- Intégration de scripts personnalisés dans Cacti

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.

3.1- Le script

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.

 

3.2- Collecte des données dans Cacti

- 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'

3.3- Création du modèle de source de données

- 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.

3.4- Génération des sources pour les graphs

- 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'

3.5- Créer le modèle pour le graphique :

Le graph

- 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

Courbes et légendes

- 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'

3.6- Génération du graphique à partir du template

- 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'.

3.7- Ca tourne !

- 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

 

 

4- Les graphes actuelles

Actuellement, nous utilisons les graphiques suivants:

Screenshot - 2012-09-13 , 14_39_36

 

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].

5- Autres scripts et statistiques

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

Conclusion Générale

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.

Référence

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/

 

Annexe

AMI2.pl

#!/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;

}

Manager.conf

;

; 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