Collecter la température CPU/GPU et les données réseau avec Telegraf

collecter températeur cpu gpu et données réseau

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 !

4.9/5 - (17 votes)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Articles de la même catégorie

Retour en haut