| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
| serveurs:installation:docker-telegraf [2023/06/01 14:02] – jpmilcent | serveurs:installation:docker-telegraf [2025/07/03 06:53] (Version actuelle) – [Problème : valeurs des métriques introuvables dans InfluxDB] jpmilcent |
|---|
| * Se connecter en tant qu'admin : ''ssh admin@db-<region>-sinp'' | * Se connecter en tant qu'admin : ''ssh admin@db-<region>-sinp'' |
| * Se placer dans le dossier : ''cd ~/docker/telegraf'' | * Se placer dans le dossier : ''cd ~/docker/telegraf'' |
| * Lancer le container afin d'afficher les logs : '' docker-compose up '' | * Lancer le container afin d'afficher les logs : '' docker compose up '' |
| * Corriger les éventuels problèmes de configuration de Telegraf s'affichant dans les logs | * Corriger les éventuels problèmes de configuration de Telegraf s'affichant dans les logs |
| * Lorsque tout fonctionne correctement, lancer le container en tant que service (option ''-d'') : ''docker-compose up -d'' | * Lorsque tout fonctionne correctement, lancer le container en tant que service (option ''-d'') : ''docker compose up -d'' |
| |
| ===== Monitorer différents services spécifiques ===== | ===== Monitorer différents services spécifiques ===== |
| * Disques additionnels : ajouter les entrées complémentaires à l'input ''diskio''. | * Disques additionnels : ajouter les entrées complémentaires à l'input ''diskio''. |
| |
| | ==== Monitorer InfluxDB v2 ==== |
| | * Pour monitorer InfluxDB v2, il est nécessaire d'utiliser l'url influxdb.<domaine-sinp>/metrics qui retourne des infos au format //prometheus//. |
| | * Il est conseille de stocker ces métriques dans un bucket distinct nommé ''oss_metrics''. |
| | * Pour créer le bucket, il est possible via l'interface influxdb.<domaine-sinp> d'ajouter un template qui va le créer pour nous ainsi qu'un dashboard : |
| | * Aller sur le menu Settings > Templates |
| | * Ajouter l'url suivante : https://raw.githubusercontent.com/influxdata/community-templates/master/influxdb2_oss_metrics/influxdb2_oss_metrics.yml |
| | * Vérifier la création du bucket "oss_metrics" et du Dashboard |
| | * Configurer ensuite Telegraf en ajoutant une seconde sortie vers le bucket "oss_metrics", le plugin ''inputs.prometheus'' et utiliser la mécanique de tag du fichier de conf de Telegraf pour rediriger les métriques prometheus vers la sortie correspondant au bucket "oss_metrics". |
| | * Redémarrer la stack telegraf : '' docker compose down ; docker compose up -d'' |
| | * Vérifier sur manager.<domaine-sinp> la sortie des logs de Telegraf. |
| | * Vérifier dans influxdb.<domaine-sinp> que le plugin prometheus alimente bien le bucket "oss_metrics". |
| | * Les métriques renvoyées par le plugin prometheus doivent être en version 1 pour êter compatible avec les Dashboard open source proposé pour Grafana et l'interface web d'InfluxDB. |
| ===== Exemple de fichier telegraf.conf complet ===== | ===== Exemple de fichier telegraf.conf complet ===== |
| Exemple avec : | Exemple avec : |
| ## Destination bucket to write into. | ## Destination bucket to write into. |
| bucket = "${INFLUXDB2_INIT_BUCKET}" | bucket = "${INFLUXDB2_INIT_BUCKET}" |
| | # Get all metrics except the one with "influxdb_database" tag with value equal to "oss_metrics" : |
| | [outputs.influxdb_v2.tagdrop] |
| | influxdb_database = ["*"] |
| | |
| | [[outputs.influxdb_v2]] |
| | urls = ["http://10.0.1.30:8086"] |
| | # Token for authentication. |
| | token = "${INFLUXDB2_TELEGRAF_TOKEN}" |
| | # Organization is the name of the organization you wish to write to. |
| | organization = "${INFLUXDB2_INIT_ORG}" |
| | # Destination bucket to write into. |
| | bucket = "oss_metrics" |
| | # Get only metrics with tag "influxdb_database" with a value equal to "oss_metrics" : |
| | tagexclude = ["influxdb_database"] |
| | [outputs.influxdb_v2.tagpass] |
| | influxdb_database = ["oss_metrics"] |
| |
| [[inputs.conntrack]] | [[inputs.conntrack]] |
| docker_label_exclude = [] | docker_label_exclude = [] |
| |
| # Monitoring of Systemd services with help of Srvstatus scripts | # Monitoring of Systemd services with help of Srvstatus scripts (inputs.systemd_status not working inside a Docker container) |
| [[inputs.exec]] | [[inputs.exec]] |
| commands = [ | commands = ["cat /opt/srvstatus/status.json"] |
| "cat /opt/srvstatus/status.json" | |
| ] | |
| timeout = "5s" | timeout = "5s" |
| name_override = "services_stats" | name_override = "services_stats" |
| data_format = "json" | data_format = "json" |
| tag_keys = [ | tag_keys = ["service"] |
| "service" | |
| ] | |
| |
| [[inputs.internal]] | [[inputs.internal]] |
| |
| [[inputs.net]] | [[inputs.net]] |
| | ignore_protocol_stats = true |
| |
| [[inputs.netstat]] | [[inputs.netstat]] |
| |
| [[inputs.postgresql]] | [[inputs.postgresql]] |
| | # WARNING: ${POSTGRESQL_TELEGRAF_PWD} is not replaced here. See: https://github.com/influxdata/telegraf/issues/12458 |
| | # address = "host=172.18.5.1 user=telegraf password=${POSTGRESQL_TELEGRAF_PWD} dbname=postgres sslmode=disable" |
| | # Need to add CONNECT right on postgres database to user telegraf. |
| address = "host=172.18.5.1 user=telegraf password=<password> dbname=postgres sslmode=disable" | address = "host=172.18.5.1 user=telegraf password=<password> dbname=postgres sslmode=disable" |
| outputaddress="postgresql-floresentinelle" | outputaddress="postgresql-floresentinelle" |
| |
| [[inputs.processes]] | [[inputs.processes]] |
| | |
| | # For InfluxDb metrics |
| | [[inputs.prometheus]] |
| | urls = ["http://10.0.1.30:8086/metrics"] |
| | metric_version = 1 |
| | [inputs.prometheus.tags] |
| | influxdb_database = "oss_metrics" |
| |
| # Monitoring of Gunicorn for GeoNature, UsersHub, TaxHub and Atlas. | # Monitoring of Gunicorn for GeoNature, UsersHub, TaxHub and Atlas. |
| |
| [[inputs.system]] | [[inputs.system]] |
| | |
| | # WARNING: disable because we can't use systemd inside a Docker container... |
| | # Use inputs.exec instead with Srvstatus scripts on Host. |
| | # See: https://github.com/influxdata/telegraf/issues/7689 |
| | #[[inputs.systemd_units]] |
| |
| # Nginx access log monitoring | # Nginx access log monitoring |
| # influx_sort_fields = true | # influx_sort_fields = true |
| </code> | </code> |
| | |
| | ===== Tester une métrique ===== |
| | * Pour tester une métrique, il est possible de rajouter une sortie au fichier config comme dans l'exemple ci-dessus présent à la fin du fichier. |
| | * Il est aussi possible de : |
| | * se connecter au container : ''docker exec -it telegraf /bin/bash'' |
| | * d'exectuer un test avec la commande (Ex. ici avec la métrique //disk//) : ''%%telegraf --input-filter=disk --test --debug%%'' |
| | |
| | ===== Problème ===== |
| | |
| | ==== Problème : valeurs des métriques introuvables dans InfluxDB ==== |
| | * **Contexte** : Telegraf semble fonctionner correctement et envoie les métriques sur le serveur hébergeant InfluxDB mais aucune métrique récente n'est trouvable dans InfluxDB. |
| | * **Solution** : vérifier que le serveur à une heure correctement configuré : ''date'' doit afficher la même heure que le serveur hébergeant InfluxDB. Vérifier que le service Ntpsec est démarré et fonctionne correctement. Si le serveur NTPSec génère l'erreur ''CLOCK: Panic: offset too big'' essayer de définir le paramètre ''tinker panic 0'' au début du fichier ''/etc/ntpsec/ntp.conf''. Ex. : <code> |
| | # /etc/ntpsec/ntp.conf, configuration for ntpd; see ntp.conf(5) for help |
| | |
| | # Set this value to avoid error "CLOCK: Panic: offset too big" |
| | tinker panic 0 |
| | </code> |
| | |
| | ==== Problème : toutes les interfaces réseaux de l'hôte ne sont pas remontées ==== |
| | * **Contexte** : Telegraf remonte une seule interface réseau alors que l'hôte en possède plusieurs. |
| | * **Solution** : le mode réseau empêche la collecte des infos : Telegraf était captif de la stack réseau du conteneur (d'où le eth0), donc ce qui était surveillé c'était uniquement les stats réseau des containers Telegraf eux-mêmes, et non pas celles de l’hôte. |
| | * Avant : <code yaml> |
| | networks: |
| | default: |
| | name: nginx-proxy |
| | external: true |
| | </code> |
| | * Après : <code yaml> network_mode: "host" </code> |