Dans un article précédant, nous avons vu comment installer InfluxDB, Telegraf et Grafana pour surveiller vos machines. Aujourd’hui nous allons voir comment enrichir ces données collectées.
Si vous souhaitez utiliser le template Grafana pour Raspberry (id 10578) vous aurez besoin d’effectuer quelques modifications dans le fichier de conf de Telegraf pour remonter les données.
Nous allons donc éditer le fichier telegraf.conf pour ajouter le code ci-dessous qui va nous permettre de récupérer la température du CPU et du GPU :
sudo nano /etc/telegraf/telegraf.conf
## CUSTOM [[inputs.file]] files = ["/sys/class/thermal/thermal_zone0/temp"] name_override = "cpu_temperature" data_format = "value" data_type = "integer" [[inputs.exec]] commands = [ "vcgencmd measure_temp"] name_override = "gpu_temperature" data_format = "grok" grok_patterns = ["%{NUMBER:value:float}"] [[inputs.exec]] commands = ["vcgencmd measure_clock arm"] name_override = "cpu_clock" data_format = "grok" grok_patterns = ["=%{NUMBER:value:float}"] [[inputs.exec]] commands = [ "vcgencmd measure_volts core"] name_override = "volts" data_format = "grok" grok_patterns = ["%{NUMBER:value:float}"] [[inputs.exec]] commands = [ "vcgencmd measure_volts sdram_c"] name_override = "volts" data_format = "grok" grok_patterns = ["%{NUMBER:sdramc:float}"] [[inputs.exec]] commands = [ "vcgencmd measure_volts sdram_i"] name_override = "volts" data_format = "grok" grok_patterns = ["%{NUMBER:sdrami:float}"] [[inputs.exec]] commands = [ "vcgencmd measure_volts sdram_p"] name_override = "volts" data_format = "grok" grok_patterns = ["%{NUMBER:sdramp:float}"] ## END CUSTOM
Une fois que c’est fait, on redémarre Telegraf
sudo systemctl restart telegraf
Attendez quelques secondes puis vérifiez le status de Telegraf
sudo systemctl status telegraf
Il se peut que vous ayez une erreur concernant l’utilisation de vcgencmd. « VCHI initialization failed »
Si c’est le cas, pas de panique, c’est que l’utilisateur telegraf n’a pas les droits pour utiliser cette commande, nous allons donc lui donner.
sudo usermod -a -G video telegraf
Redémarrez votre machine pour que les nouveaux droits soient bien pris en compte
sudo reboot now
Vous pouvez maintenant vérifier dans Grafana que la température remonte correctement.
Installation de SNMP et SNMPD pour les données réseau
SNMP qu’est ce que c’est ?
Le protocole SNMP (Simple Network Management Protocol) a été élaboré par le groupe de travail IETF (Internet Engineering Task Force) pour la surveillance et la gestion des systèmes et des unités dans un réseau. Les fonctions prises en charge par le protocole SNMP sont : la demande et l’extraction de données, la définition ou l’écriture de données, ainsi que les alertes SNMP qui signalent la survenue d’événements.
Documentation d’IBM
Vous l’aurez compris, le protocole SNMP va nous servir à récupérer des données concernant le réseau
sudo apt install snmp snmpd snmp-mibs-downloader
Une fois les packages installés, nous allons aller commenter mibs dans le fichier de snmp.conf
sudo nano /etc/snmp/snmp.conf # As the snmp packages come without MIB files due to license reasons, loading # of MIBs is disabled by default. If you added the MIBs you can reenable # loaging them by commenting out the following line. #mibs:
Par défaut, la communauté attribuée à votre machine est public. Si vous souhaitez changer ce nom suivez les commandes suivantes, sinon passez directement à l’étape d’après.
sudo nano /etc/snmp/snmpd.conf # Ligne 71, remplacer public par votre_communauté : rocommunity public default -V systemonly rocommunity6 public -V systemonly
Maintenant on relance le service snmpd
sudo systemctl reload snmpd
On peut maintenant tester notre configuration avec snmpwalk, si vous avez changé le nom de votre communauté, remplacez public par celle choisie.
snmpwalk -mALL -v2c -c public localhost system 2>/dev/null
Si tout ce passe bien, vous devriez avoir plusieurs dizaines de lignes commençant par SNMPv2-MIB
On peut maintenant aller ajouter nos appels SNMP à notre fichier telegraf.conf
sudo nano /etc/telegraf/telegraf.conf
Puis ajouter le code ci-dessous. Si vous avez un nom de communauté personnalisé, pensez encore une fois à remplacer public par le bon nom.
## SNMP NETWORK DATA [[inputs.snmp]] agents = [ "127.0.0.1" ] # Polling interval interval = "60s" # Timeout for each SNMP query. timeout = "10s" # Number of retries to attempt within timeout. retries = 3 # SNMP version version = 2 # SNMP community string. community = "public" [[inputs.snmp.field]] name = "hostname" oid = ".1.0.0.1.1" [[inputs.snmp.field]] name = "uptime" oid = ".1.0.0.1.2" # IF-MIB::ifTable contains counters on input and output traffic as well as errors and discards. [[inputs.snmp.table]] name = "interface" inherit_tags = [ "hostname" ] oid = "IF-MIB::ifTable" # Interface tag - used to identify interface in metrics database [[inputs.snmp.table.field]] name = "ifDescr" oid = "IF-MIB::ifDescr" is_tag = true # IF-MIB::ifXTable contains newer High Capacity (HC) counters that do not overflow as fast for a few of the ifTable counters [[inputs.snmp.table]] name = "interface" inherit_tags = [ "hostname" ] oid = "IF-MIB::ifXTable" # Interface tag - used to identify interface in metrics database [[inputs.snmp.table.field]] name = "ifDescr" oid = "IF-MIB::ifDescr" is_tag = true # EtherLike-MIB::dot3StatsTable contains detailed ethernet-level information about what kind of errors have been logged on an interface (such as FCS error, frame too long, etc) [[inputs.snmp.table]] name = "interface" inherit_tags = [ "hostname" ] oid = "EtherLike-MIB::dot3StatsTable" # Interface tag - used to identify interface in metrics database [[inputs.snmp.table.field]] name = "ifDescr" oid = "IF-MIB::ifDescr" is_tag = true ## SNMP END
Pendant que nous sommes dans ce fichier nous allons activer plusieurs modules pour enrichir les données. Je vous conseille de chercher la bonne ligne via le nom du plugin.
Dans le bloc [[inputs.net]] vous pouvez ajouter plusieurs interfaces réseau à surveiller et/ou ignorer certains protocoles.
# # Read metrics about network interface usage [[inputs.net]] # ## By default, telegraf gathers stats from any up interface (excluding loopback) # ## Setting interfaces will tell it to gather these explicit interfaces, # ## regardless of status. # ## interfaces = ["eth0"] # ## # ## On linux systems telegraf also collects protocol stats. # ## Setting ignore_protocol_stats to true will skip reporting of protocol metrics. # ## # # ignore_protocol_stats = false # ## # # Read TCP metrics such as established, time wait and sockets counts. [[inputs.netstat]] # # no configuration # # Collect kernel snmp counters and network interface statistics [[inputs.nstat]] # ## file paths for proc files. If empty default paths will be used: # ## /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6 # ## These can also be overridden with env variables, see README. proc_net_netstat = "/proc/net/netstat" proc_net_snmp = "/proc/net/snmp" proc_net_snmp6 = "/proc/net/snmp6" # ## dump metrics with 0 values too dump_zeros = true
On redémarre Telegraf pour que les nouveaux éléments soient pris en compte
sudo nano systemctl restart telegraf
Attendez un peu et vérifiez que Telegraf fonctionne correctement avec
sudo systemctl status telegraf
S’il y a une erreur de configuration quelque part, le service va planter et ne pas démarrer.
C’est fini pour cet article, n’hésitez pas à réagir et poser vos questions en commentaire !