--- categories: monitoring title: Howto Collectd ... * Documentation : [Collectd](https://collectd.org/) est un démon collectant des métriques systèmes et applications à intervalles réguliers. Il peut ensuite stocker ces métriques de différentes manières. Nous l'utilisons en combinaison avec [InfluxDB](HowtoInfluxDB) et [Grafana](HowtoGrafana). Nous préférons collectd à [telegraf](https://www.influxdata.com/time-series-platform/telegraf/) pour lequel aucun paquet n'est disponible sous OpenBSD. ## Installation ### Debian ~~~ # apt install collectd $ apt list collectd Listing... Done collectd/stable,now 5.7.1-1.1 amd64 [installed] $ systemctl status collectd ● collectd.service - Statistics collection and monitoring daemon Loaded: loaded (/lib/systemd/system/collectd.service; enabled; vendor preset: enabled) Docs: man:collectd(1) man:collectd.conf(5) https://collectd.org Process: 2378 ExecStartPre=/usr/sbin/collectd -t (code=exited, status=0/SUCCESS) Main PID: 2446 (collectd) Tasks: 11 (limit: 4915) CGroup: /system.slice/collectd.service └─2446 /usr/sbin/collectd ~~~ ### OpenBSD ~~~ # pkg_add collectd $ pkg_info -Q collectd collectd-5.8.1p0 (installed) ~~~ ## Configuration Collectd fonctionne à l'aide de plugins à activer selon ses besoins. ~~~ Interval 60 Timeout 2 LoadPlugin foo Option value ~~~ ### Plugin network Le plugin [network](https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_network) est indispensable et permet de spécifier vers où envoyer les métriques collectées. ~~~ LoadPlugin network Server "127.0.0.1" "25826" ~~~ ### Plugin syslog Le plugin [syslog](https://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_syslog) permet de définir le log-level du démon. S'il n'est pas activé, aucun log ne sera présent. ~~~ LoadPlugin syslog LogLevel warning ~~~ ### Plugin exec Le plugin [exec](https://collectd.org/documentation/manpages/collectd-exec.5.shtml) est intéressant puisqu'il permet d'exécuter n'importe quel script afin de récupérer toutes sortes de métriques non prises en charge par un autre plugin. ~~~ Interval 300 Exec "user" "/path/to/script" "arg0" "arg1" ~~~ La sortie du script doit respecter un format particulier : ~~~ PUTVAL host/plugin-instance/type-instance date:value ~~~ Avec : * `host` : le nom de la machine associée à la mesure ; * `plugin` : le nom de la mesure ; * `instance` (facultatif) : un tag pouvant caractériser la mesure ; * `type` : le type de mesure, parmi ceux présents dans le fichier `/usr/share/collectd/types.db` (ou `/usr/local/share/collectd/types.db` sous OpenBSD), et définissant le format de `value` ; * `instance` (facultatif) : un tag pouvant caractériser la mesure ; * `date` : la date à laquelle la mesure est récupérée, utiliser `N` pour remplacer par la date actuelle ; * `value` : la valeur à récupérer. Par exemple, pour récupérer le nombre de préfixes BGP partagés par un voisin : ~~~ PUTVAL $(hostname)/bgp_prefixes/count-${PEER} N:${CURRENT_PREFIXES} ~~~ ### Plugin snmp Le plugin [snmp](https://collectd.org/documentation/manpages/collectd-snmp.5.shtml) permet de faire des requêtes SNMP à des machines spécifiques. Un block `Data` définit l'OID et sous quel format stocker les valeurs récupérées, et un block `Host` définit quelles machines interroger ainsi que la configuration SNMP. Exemple pour récupérer le débit et le nombre de paquets unicast d'un switch, la charge d'un APC, et la fréquence, la tension, l'intensité, la source préférée et le statut d'un ATS. Sous debian, le paquet `snmp-mibs-downloader` est nécessaire pour la MIB réseau. ~~~ LoadPlugin snmp # Switch Type "if_octets" Table true Instance "IF-MIB::ifAlias" Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets" Type "if_packets" Table true Instance "IF-MIB::ifAlias" Values "IF-MIB::ifHCInUcastPkts" "IF-MIB::ifHCOutUcastPkts" Address "192.0.2.1" Version 2 Community "public" Collect "ifmib_if_octets64" "ifmib_if_packets64" # APC Type "current" Instance "apc_current_load" Scale 0.1 Values ".1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1" Type "current" Instance "apc_current_low" Values ".1.3.6.1.4.1.318.1.1.12.2.2.1.1.2.1" Type "current" Instance "apc_current_near" Values ".1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.1" Type "current" Instance "apc_current_overload" Values ".1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.1" Address "192.0.2.2" Version 2 Community "public" Collect "apc_current_load" "apc_current_low" "apc_current_near" "apc_current_overload" Interval 1800 # ATS Type "frequency" Instance "ats_input_freq_a" Values ".1.3.6.1.4.1.318.1.1.8.5.3.2.1.4.1" Type "voltage" Instance "ats_input_volt_a" Values ".1.3.6.1.4.1.318.1.1.8.5.3.3.1.3.1.1.1" Type "frequency" Instance "ats_input_freq_b" Values ".1.3.6.1.4.1.318.1.1.8.5.3.2.1.4.2" Type "voltage" Instance "ats_input_volt_b" Values ".1.3.6.1.4.1.318.1.1.8.5.3.3.1.3.2.1.1" Type "voltage" Instance "ats_output_volt" Values ".1.3.6.1.4.1.318.1.1.8.5.4.3.1.3.1.1.1" Type "current" Instance "ats_output_current" Scale 0.1 Values ".1.3.6.1.4.1.318.1.1.8.5.4.3.1.4.1.1.1" Type "frequency" Instance "ats_output_freq" Values ".1.3.6.1.4.1.318.1.1.8.5.4.2.1.4.1" Type "count" Instance "ats_source_preferred" Values ".1.3.6.1.4.1.318.1.1.8.4.2.0" Type "count" Instance "ats_source_status" Values ".1.3.6.1.4.1.318.1.1.8.5.1.2.0" Type "count" Instance "ats_status_redundancy" Values ".1.3.6.1.4.1.318.1.1.8.5.1.3.0" Type "current" Instance "ats_status_current_state" Values ".1.3.6.1.4.1.318.1.1.8.5.1.4.0" Type "current" Instance "ats_status_current_limit" Values ".1.3.6.1.4.1.318.1.1.8.4.6.0" Address "192.0.2.3" Version 2 Community "public" Collect "ats_input_freq_a" "ats_input_volt_a" "ats_input_freq_b" "ats_input_volt_b" "ats_output_volt" "ats_output_current" "ats_output_freq" "ats_source_preferred" "ats_source_status" "ats_status_redundancy" "ats_status_current_state" "ats_status_current_limit" Interval 1800 ~~~