mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.1 KiB

categories title
monitoring Howto Collectd

Collectd 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 et Grafana.

Nous préférons collectd à 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

<Plugin foo>
  Option value
</Plugin>

Plugin network

Le plugin network est indispensable et permet de spécifier vers où envoyer les métriques collectées.

LoadPlugin network

<Plugin network>
  Server "127.0.0.1" "25826"
</Plugin>

Plugin syslog

Le 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

<Plugin syslog>
  LogLevel warning
</Plugin>

Plugin exec

Le plugin exec 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.

<LoadPlugin exec>
  Interval 300
</LoadPlugin>

<Plugin exec>
  Exec "user" "/path/to/script" "arg0" "arg1"
</Plugin>

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

<Plugin snmp>
# Switch
  <Data "ifmib_if_octets64">
    Type "if_octets"
    Table true
    Instance "IF-MIB::ifAlias"
    Values "IF-MIB::ifHCInOctets" "IF-MIB::ifHCOutOctets"
  </Data>
  <Data "ifmib_if_packets64">
    Type "if_packets"
    Table true
    Instance "IF-MIB::ifAlias"
    Values "IF-MIB::ifHCInUcastPkts" "IF-MIB::ifHCOutUcastPkts"
  </Data>

  <Host "Switch">
    Address "192.0.2.1"
    Version 2
    Community "public"
    Collect "ifmib_if_octets64" "ifmib_if_packets64"
  </Host>

# APC
  <Data "apc_current_load">
    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"
  </Data>
  <Data "apc_current_low">
    Type "current"
    Instance "apc_current_low"
    Values ".1.3.6.1.4.1.318.1.1.12.2.2.1.1.2.1"
  </Data>
  <Data "apc_current_near">
    Type "current"
    Instance "apc_current_near"
    Values ".1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.1"
  </Data>
  <Data "apc_current_overload">
    Type "current"
    Instance "apc_current_overload"
    Values ".1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.1"
  </Data>

  <Host "APC">
    Address "192.0.2.2"
    Version 2
    Community "public"
    Collect "apc_current_load" "apc_current_low" "apc_current_near" "apc_current_overload"
    Interval 1800
  </Host>

# ATS
  <Data "ats_input_freq_a">
    Type "frequency"
    Instance "ats_input_freq_a"
    Values ".1.3.6.1.4.1.318.1.1.8.5.3.2.1.4.1"
  </Data>
  <Data "ats_input_volt_a">
    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"
  </Data>
  <Data "ats_input_freq_b">
    Type "frequency"
    Instance "ats_input_freq_b"
    Values ".1.3.6.1.4.1.318.1.1.8.5.3.2.1.4.2"
  </Data>
  <Data "ats_input_volt_b">
    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"
  </Data>

  <Data "ats_output_volt">
    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"
  </Data>
  <Data "ats_output_current">
    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"
  </Data>
  <Data "ats_output_freq">
    Type "frequency"
    Instance "ats_output_freq"
    Values ".1.3.6.1.4.1.318.1.1.8.5.4.2.1.4.1"
  </Data>

  <Data "ats_source_preferred">
    Type "count"
    Instance "ats_source_preferred"
    Values ".1.3.6.1.4.1.318.1.1.8.4.2.0"
  </Data>
  <Data "ats_source_status">
    Type "count"
    Instance "ats_source_status"
    Values ".1.3.6.1.4.1.318.1.1.8.5.1.2.0"
  </Data>

  <Data "ats_status_redundancy">
    Type "count"
    Instance "ats_status_redundancy"
    Values ".1.3.6.1.4.1.318.1.1.8.5.1.3.0"
  </Data>
  <Data "ats_status_current_state">
    Type "current"
    Instance "ats_status_current_state"
    Values ".1.3.6.1.4.1.318.1.1.8.5.1.4.0"
  </Data>
  <Data "ats_status_current_limit">
    Type "current"
    Instance "ats_status_current_limit"
    Values ".1.3.6.1.4.1.318.1.1.8.4.6.0"
  </Data>

  <Host "ATS">
    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
  </Host>
</Plugin>