Surveillez la température d’un GPU Nvidia avec Cacti

Bonjour, il s’agit d’un vieux billet que je viens de retrouver (il date de juin 2008, c’est vous dire). Comme le titre l’indique, ça concerne du monitoring de carte GPU. Je ne sais pas trop si c’est encore d’actualité, mais je poste, sait-on jamais.

1 – Comment récupérer l’information

Avec le module propriétaire nvidia on dispose de : nvidia-setings

nvidia-settings : Ouverture d’une interface graphique
nvidia-settings -q all : Affiche tous les paramètres utilisés
nvidia-settings -q GPUCoreTemp : Affiche la température du GPU


sortie standard

Attribute ‘GPUCoreTemp’ (localhost.localdomain:0.0): 73.
‘GPUCoreTemp’ is an integer attribute.
‘GPUCoreTemp’ is a read-only attribute.
‘GPUCoreTemp’ can use the following target types: X Screen, GPU.

Après un passage à la moulinette « grep », ça donne : nvidia-settings -q GPUCoreTemp |grep -E -o « [0-9]{2,3} »

Cette manipulation aurait pu marcher … si nvidia-settings n’était pas trop exotique …

En effet en utilisateur standard la commande suivante va marcher. Seulement avec l’utilisateur cacti on obtiendra l’erreur suivante :

> su – cacti -c « nvidia-settings -q GPUCoreTemp |grep -E -o « [0-9]{2,3} »

ERROR: The control display is undefined; please run `nvidia-settings –help` for usage information.

Pour résoudre ce problème, j’ai trouvé comme rustine la commande xhost + en utilisateur standard. Cette commande rend disponible l’accès au X à tous les utilisateurs standards. Mais rassurez-vous, une version plus sélective existe : xhost +local:cacti

On précisera aussi le bon display à nvidia-settings avec le paramètre -c 0:0.

2 – Configuration de cacti

J’ai déjà fait un article sur l’ajout de graphique, mais c’est toujours bien d’en rajouter une couche.

On ajoute ce OneLine dans une nouvelle Data Input Method :

On met ensuite en place une Data template en désignant cette Data Input Method.
Et pour finir on prépare un Graph template avec le Nvidia GPU Temp comme Data Source.


Publicités

Aller plus loin avec une livebox Sagem

Bon soyons sérieux, je déteste la LiveBox, seulement c’est le seul moyen d’avoir TV et Telephone chez Orange…
Il ne s’agit pas d’un appareil professionnel et pour lui faire cracher ne serait-ce que quelques valeurs comme la marge de bruit il faut se lancer dans tout un mic mac telnet machin truc chouette … (et j’en passe…).
Bref comme j’ai passé mon dimanche à triturer ce bout de ferraille, voici quelques brides de mes recherches.

L’interface Web de la live box permet d’obtenir ces valeurs, seulement pour automatiser sa récupération …prout…
Comme la livebox dispose AUSSI du service telnet j’ai commencé par chercher les valeurs nécessaires : user:root / pass:1234

Ensuite on se retrouve dans le système suivant :

[ root @ home ] $ adsl
[ root @ adsl ] $ mon
ADSL Monitoring is Successful.  The values are:

  adslLineStatus : Opérationnel
   adslMode  : G992_5_A
   Upstream = 944 Kb ( Intlv[LP0] )
   Downstream = 8524 Kb ( Intlv[LP0] )
 =================================================
   DIAG Info            :
=================================================
   Attenuation ( dB )   :       29.2        12.3 (FE)
   SNR margin  ( dB )   :        10         13 (FE)
   HEC counter          :      956
   CRC counter          :      131
  RTFirmwareVer  : 0x0c16010c

Superbe j’ai tous ce que je voulais et même plus. Il ne reste plus qu’à me faire un petit script pour automatiser tout cela :

#!/usr/bin/perl
# A Script to get LiveBox ADSL status by Bodman@wanadoo.fr
 # standard output :
 #   Up:944 Down:8524 LocalAtt:29.2 TermAtt:12.3 LocalSNR:10 TermSNR:13 HEC:960 CRC:135
 # Reason to get no output :
 #   no host param
 #   bad user/password (  <> root/1234 )
 #   bad adsl monitoring output ( <> 18 lines )
 #   livebox stress
# Get host,user,pass ( root / 1234 default )
 if ($ARGV[0] ne "") { $host = $ARGV[0]; } else { exit(); }
 if ($ARGV[1] ne "") { $user = $ARGV[1]; } else { $user = 'root' }
 if ($ARGV[2] ne "") { $pass = $ARGV[2]; } else { $pass = '1234' }
# Get Telnet env
 use Net::Telnet;
 $telnet = new Net::Telnet ( Timeout=>20 );
 $telnet->errmode(sub {die @_ unless $_[0] =~ /eof/});
# Telnet Login
 $telnet->open($host);
 $telnet->login($user,$pass);
#Go to adsl env and get monitoring
 $telnet->cmd("adsl");
 @tableau = $telnet->cmd("mon");
#End Telnet session in good condition
 $telnet->cmd("exit");
 $telnet->cmd("exit");
 $telnet->close;
if (@tableau == 18) #good data
 {
# FORME DU TABLEAU
 #=====================================================
 #...
 #5   Upstream = 944 Kb ( Intlv[LP0] )
 #6   Downstream = 8524 Kb ( Intlv[LP0] )
 #...
 #10  Attenuation ( dB )   :       29.2        12.3 (FE)
 #11  SNR margin  ( dB )   :        12         13 (FE)
 #12  HEC counter          :      956
 #13  CRC counter          :      131
 #...
 #=====================================================
#Prepare data
 @tableau[5] =~ s/^.* = ([0-9]*) Kb.*$/Up:\1 /;
 @tableau[6] =~ s/^.* = ([0-9]*) Kb.*$/Down:\1 /;
 @tableau[10] =~  s/^.*:[^0-9]*([0-9.]*)[^0-9]*([0-9.]*).*$/LocalAtt:\1 TermAtt:\2 /;
 @tableau[11] =~  s/^.*:[^0-9]*([0-9.]*)[^0-9]*([0-9.]*).*$/LocalSNR:\1 TermSNR:\2 /;
 @tableau[12] =~ s/^.*:[^0-9]*([0-9.]*).*$/HEC:\1 /;
 @tableau[13] =~ s/^.*:[^0-9]*([0-9.]*).*$/CRC:\1 /;
# cut \n
 chop(@tableau);
#print data
 print @tableau[5];
 print @tableau[6];
 print @tableau[10];
 print @tableau[11];
 print @tableau[12];
 print @tableau[13];
}
exit();

Avec ça on trouve une sortie compatible avec cacti :

./adsl_livebox.pl 192.168.1.1
Up:944 Down:8524 LocalAtt:29.2 TermAtt:12.3 LocalSNR:10 TermSNR:13 HEC:960 CRC:135

Chouette je n’ai plus qu’à faire de beaux graphiques 🙂

[Fedora 8] Installation et utilisation de cacti

Voici une note un peu brève, mais synthétique sur cacti (http://www.cacti.net/).

Installation

Un yum install cacti ne va pas suffire pour utiliser cacti. Je conseil alors :

yum install cacti mysql-server rrdtool net-snmp-utils httpd

Ensuite une petite préparation de base MySQL s’impose :

service mysqld start
mysql -u root
CREATE DATABASE cacti;
grant all on cacti.* to root@localhost;
grant all on cacti.* to cactiuser@localhost;
set password for cactiuser@localhost=password(‘cactiuser’);
use cacti;
source /usr/share/doc/cacti-0.8.7a/cacti.sql;
exit
service mysqld restart
service httpd start

De même il faut penser à decommenter l’unique ligne du fichier /var/crond.d/cacti (puis faire service crond restart).
Enfin dans un navigateur faites http://localhost/cacti 😀

Utilisation

En ce qui concerne l’usage même de cacti je trouve qu’il n’est pas particulièrement bien guidé, voici comment s’y prendre :

Etape 1. Comment récupérer une information
Collection Methods -> Data Input Methods ou Data Queries

Etape 2. Le type et la forme de l’information
Templates -> Data Templates
Dans cette catégorie on devra entre autre remplir un champ Data Input Methods (voir Etape 1)

Etape 3. La représentation visuelle des informations
Templates-> Graph Templates
C’est là qu’une certaine confusion peut naître dans la section Graph Template Items.
Le champ Data Source de cette section correspond en fait à une entrée de la catégorie Data Templates (voir Etape 2).

Etape 4. Définition d’un type d’hôte (serveur, routeur, switch etc …)
Templates-> Host Templates
On va alors définir un type d’hôte auquel va correspondre des Data Queries(Etape 1) possible et des Graph Template(Etape 3) possibles.

Etape 5.Création d’hôte.
Management-> Devices
Il est désormais possible d’ajouter les éléments du réseau surveillé pour peut qu’on dispose des Host Templates (Etape 4) correspondants.

Etape 6. Définir les sources d’information.
Management -> Data sources
A partir de ces Devices (Etape 5) et d’un type de Data Template (Etape 2), on engage alors la premier phase du monitoring, la collecte d’information.

Etape 7. Création d’un Graphique
Management -> Graph management
Deuxieme phase du monitoring, la représentation de ces informations maintenant possible avec un membre des Devices(Etape 5) et un Graph template (Etape 3) accompagné d’une série de Data sources(Etape 6). Il est aussi possible de définir un graph sans Device, il pourra alors récupérer ses informations sur toutes les sources de données.

Etape 8. Pour finir, ce graph va être basculé dans l’arborescence
Management ->Graph management ->Choose an action: -> Place on a tree

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.