serveurs:installation:web-srv:docker-grafana

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveurs:installation:web-srv:docker-grafana [2023/05/27 20:20] – [Monitorer InfluxDB] jpmilcentserveurs:installation:web-srv:docker-grafana [2024/08/02 13:36] (Version actuelle) – [InfluxDB v2 : connection au shell et requête de config] jpmilcent
Ligne 80: Ligne 80:
 </code> </code>
  
-===== Configurer InfluxDB =====+===== Configurer InfluxDB v2 =====
   * Si ce n'est pas déjà fait, configurer [[serveurs:installation:parefeu#zone_docker | la zone docker pour le pare-feu Firewalld]]   * Si ce n'est pas déjà fait, configurer [[serveurs:installation:parefeu#zone_docker | la zone docker pour le pare-feu Firewalld]]
-  * Influxdb v2 : +  * Dans Influxdb v2, la politique de rétention est remplacée par les "buckets". La politique de rétention de "telegraf" est donc défini lors du setup d'Influxdb via des variables d'environnement :  
-    * Dans Influxdb v2, la politique de rétention est remplacée par les "buckets". La politique de rétention de "telegraf" est donc défini lors du setup d'Influxdb via des variables d'environnement :  +    * ''INFLUXDB2_INIT_BUCKET=telegraf'' 
-      * ''INFLUXDB2_INIT_BUCKET=telegraf'' +    * ''INFLUXDB2_INIT_RETENTION=90d''3 mois.
-      * ''INFLUXDB2_INIT_RETENTION=365d''1 an.+
  
  
Ligne 95: Ligne 94:
   * Pour définir la période de rétention du bucket telegraf :    * Pour définir la période de rétention du bucket telegraf : 
     * lister les buckets pour récupérer l'id du bucket "telegraf" : <code bash>influx bucket list</code>     * lister les buckets pour récupérer l'id du bucket "telegraf" : <code bash>influx bucket list</code>
-    * définir la période de rétention à 1 an : <code bash>influx bucket update -i <telgraf-bucket-id> -r 365d</code> +    * définir la période de rétention à 7 jours : <code bash>influx bucket update -i <telgraf-bucket-id> -r 7d</code> 
-  * Créer un mapping entre le bucket "telegraf" (v2) et la database/retention policy "telegragf" (v1) pour y accéder avec InfluxQL depuis Grafana : <code bash>influx v1 dbrp create --db telegraf --rp telegraf --bucket-id <telgraf-bucket-id> --default</code>+  * Créer un mapping entre le bucket "telegraf" (v2) et la database/retention policy "telegraf" (v1) pour y accéder avec InfluxQL depuis Grafana : <code bash>influx v1 dbrp create --db telegraf --rp telegraf --bucket-id <telgraf-bucket-id> --default</code> 
 + 
  
-==== Monitorer InfluxDB v2 ==== 
-  * Pour monitorer InfluxDB, il est nécessaire de modifier le fichier de configuration du Telegraf présent sur le serveur hébergeant la base InfluxDB : <code properties> 
-[[outputs.influxdb_v2]] 
-  urls = ["http://monitor-influxdb: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 = "${INFLUXDB2_INIT_BUCKET}" 
-</code> 
-  * Il est aussi recommander de désactiver le monitoring dans la base //_internal// d'InfluxDB en modifiant comme suit le paramètre du fichier de configuration d'InfluxDB : <code properties> 
-[monitor] 
-   store-enabled = false 
-</code> 
  
-===== Notes sur Telegraf ===== 
-  * Pour tester son fonctionnement : ''<nowiki> docker exec -it monitor-telegraf telegraf --test </nowiki>'' 
-  * Tester le plugin //Nginx// : ''<nowiki> docker exec -it monitor-telegraf telegraf --input-filter nginx --test </nowiki>'' 
 ===== Configurer Grafana ===== ===== Configurer Grafana =====
   * Se connecter à //Grafana// sur <nowiki>https://monitor.<domaine-sinp></nowiki>   * Se connecter à //Grafana// sur <nowiki>https://monitor.<domaine-sinp></nowiki>
Ligne 122: Ligne 105:
     * Cliquer sur le menu gauche "Configuration" > "Data sources"     * Cliquer sur le menu gauche "Configuration" > "Data sources"
     * Cliquer sur le bouton "Add data source"     * Cliquer sur le bouton "Add data source"
-    * Sélectionner l'entrée "InfluxDB" dans la section "Time series databases" +      * Sélectionner l'entrée "InfluxDB" dans la section "Time series databases" 
-    * Compléter le formulaire en laissant tout par défaut sauf : +      * Compléter le formulaire en laissant tout par défaut sauf : 
-      * //Name// : InfluxDB - Telegraf +        * //Name// : InfluxDB (Flux) - Telegraf 
-      * //HTTP// : +        * //Query Language// : Flux 
-        * //URL// : http://monitor-influxdb:8086 +        * //HTTP// : 
-      * //Auth// : +          * //URL// : http://monitor-influxdb:8086 
-        * //With Credentials// : à activer pour Influxdb v2. +        * //InfluxDB Details// : 
-      * //Custom HTTP Headers// : +          * //Organization// : silene 
-        * Cliquer sur //Add header// pour InfluxDb v2 et ajouter un entête ''Authorisation'' avec pour valeur ''Token <grafana-api-tocken>''+          * //Token// : créer un nouveau Token intitulé "Grafana's token" avec l'interface d'InfluxDb (//Load Data// > //API Token//) en lecture seulement sur le bucket "telegraf" puis le saisir ici. 
-        * Pour obtenir la valeur de ''<grafana-api-tocken>'', connecter vous à l'interface d'InfluxDB v2 et générer un nouveau token (Data > Api Tockens > Generate API Token) en lecture seulement sur le bucket "telegraf"+          * //Default Bucket// : telegraf 
-      * //InfluxDB Details// : +          * //Min time interval// : 10s 
-        * //Database (ou bucket pour Influxdb2)// : telegraf +        * Cliquer sur "Save and test" 
-        * //User// : telegraf (pour Influxdb2, voir ci-dessus comment créer l'utilisateur telegraf via la ligne de commande) +      * Répéter l'opération mais avec les infos suivante : 
-        * //Password// : <mot-de-passe-de-telegraf> +        * //Name// : InfluxDB (InfluxQL) - Telegraf 
-        * //HTTP Method// : POST +        * //Query Language// : InfluxQL 
-        * //Min time interval// : 10s +        * //HTTP// : 
-      * Cliquer sur "Save and test" +          * //URL// : http://monitor-influxdb:8086 
-    * Répéter l'opération mais avec les infos différentes suivantes dans le formulaire :+        * //Auth// : 
 +          * //With Credentials// : à activer pour Influxdb v2. 
 +        * //Custom HTTP Headers// : 
 +          * Cliquer sur //Add header// pour InfluxDb v2 et ajouter un entête ''Authorisation'' avec pour valeur ''Token <grafana-api-tocken>''
 +          * Pour obtenir la valeur de ''<grafana-api-tocken>'', connecter vous à l'interface d'InfluxDB v2 et générer un nouveau token si ce n'est pas déjà fait (Load Data > Api Tockens > Generate API Token) en lecture seulement sur le bucket "telegraf"
 +        * //InfluxDB Details// : 
 +          * //Database (= le bucket pour Influxdb2)// : telegraf 
 +          * //User// : telegraf (pour Influxdb2, voir ci-dessus comment créer l'utilisateur telegraf via la ligne de commande) 
 +          * //Password// : <mot-de-passe-de-telegraf> 
 +          * //HTTP Method// : POST 
 +          * //Min time interval// : 10s 
 +        * Cliquer sur "Save and test" 
 +    * 🗑️Répéter l'opération mais avec les infos différentes suivantes dans le formulaire :
       * //Name// : InfluxDB - Internal       * //Name// : InfluxDB - Internal
       * //InfluxDB Details// :       * //InfluxDB Details// :
Ligne 173: Ligne 168:
   * Sortir du container : ''exit''   * Sortir du container : ''exit''
   * Se placer dans le dossier contenant le fichier docker-compose.yml contenant le service de Grafana : '' cd ~/docker/monitor/ ''   * Se placer dans le dossier contenant le fichier docker-compose.yml contenant le service de Grafana : '' cd ~/docker/monitor/ ''
-  * Relancer le de service : ''docker-compose restart monitor-grafana ''+  * Relancer le de service : ''docker compose restart monitor-grafana ''
   * Vérifier sur l'interface de Grafana la présence du plugin.   * Vérifier sur l'interface de Grafana la présence du plugin.
 ===== Notes sur la sauvegarde/restauration de la configuration de Grafana ===== ===== Notes sur la sauvegarde/restauration de la configuration de Grafana =====
   * **Notes** : afin de sauvegarder et restaurer la configuration de //Grafana// (dashboards, datasources, alert channels, folders), un script Python spécifique est disponible sous forme de Container Docker présent dans la stack "monitor.silene.eu". Le service a pour nom "//monitor-grafana-backup//" et se base sur l'image [[https://hub.docker.com/r/ysde/docker-grafana-backup-tool|ysde/docker-grafana-backup-tool]].   * **Notes** : afin de sauvegarder et restaurer la configuration de //Grafana// (dashboards, datasources, alert channels, folders), un script Python spécifique est disponible sous forme de Container Docker présent dans la stack "monitor.silene.eu". Le service a pour nom "//monitor-grafana-backup//" et se base sur l'image [[https://hub.docker.com/r/ysde/docker-grafana-backup-tool|ysde/docker-grafana-backup-tool]].
   * Par défaut, ce container n'est pas lancé. Il doit donc être lancer manuellement.   * Par défaut, ce container n'est pas lancé. Il doit donc être lancer manuellement.
-  * Pour sauvegarder la configuration de //Grafana//, utiliser la commande : ''docker-compose run monitor-grafana-backup'' +  * Il est nécessaire de définiri un ID utilisateur à 1337 pour le dossier qui stockera les sauvegardes : '' sudo chown 1337:root /home/admin/docker/monitor/grafana/backup '' 
-    * Les sauvegardes sont présentes sous forme de fichier //.tar.gz// dans le dossier ''/home/admin/docker/monitor.<domaine-sinp>/grafana/backup'' +  * Pour sauvegarder la configuration de //Grafana//, utiliser la commande : ''docker compose run monitor-grafana-backup'' 
-  * Pour restaurer une sauvegarde, utiliser la commande : ''docker-compose run monitor-grafana-backup restore _OUTPUT_/<date>.tar.gz''+    * Les sauvegardes sont présentes sous forme de fichier //.tar.gz// dans le dossier ''/home/admin/docker/monitor/grafana/backup'' 
 +  * Pour restaurer une sauvegarde, utiliser la commande : ''docker compose run monitor-grafana-backup restore _OUTPUT_/<date>.tar.gz''
   * Pour automatiser les sauvegardes, ajouter le fichier //cron// [[https://github.com/cbn-alpin/sinp-paca-srv/blob/master/web-srv/etc/cron.d/grafana|grafana]] dans le dossier ''/etc/cron.d''   * Pour automatiser les sauvegardes, ajouter le fichier //cron// [[https://github.com/cbn-alpin/sinp-paca-srv/blob/master/web-srv/etc/cron.d/grafana|grafana]] dans le dossier ''/etc/cron.d''
-  * Pour réaliser une sauvegarde distante de la configuration de //Grafana//, installer le script //bkp2dbx// et s'assurer que le fichier ///etc/cron.d/bkp2dbx// contient bien une ligne réalisant la sauvegarde du dossier //backup// de //Grafana//.+  * Pour réaliser une sauvegarde distante de la configuration de //Grafana//, assurer vous que le dossier ''/home/admin/'' est bien sauvegarder par Borg.
   * Pour fonctionner, il est nécessaire de générer un jeton d'API dans Grafana via le menu : "Configuration" > "API Keys"   * Pour fonctionner, il est nécessaire de générer un jeton d'API dans Grafana via le menu : "Configuration" > "API Keys"
     * Nom du jeton : "grafana-backup-tool"     * Nom du jeton : "grafana-backup-tool"
     * Rôle : "Admin"     * Rôle : "Admin"
     * Time to live : "5y"     * Time to live : "5y"
-  * Copier ensuite, le jeton obtenu dans le fichier ///home/admin/docker/monitor.<domaine-sinp>/.env// en tant que valeur du paramètre //GRAFANA_TOKEN//+  * Copier ensuite, le jeton obtenu dans le fichier ///home/admin/docker/monitor/.env// en tant que valeur du paramètre //GRAFANA_TOKEN//
  
 ===== Configuration des alertes de Grafana ===== ===== Configuration des alertes de Grafana =====
   * Les requêtes a utiliser pour les alertes ne peuvent pas utiliser de variables utilisateurs, il est donc nécessaire de mettre des valeurs en dur...   * Les requêtes a utiliser pour les alertes ne peuvent pas utiliser de variables utilisateurs, il est donc nécessaire de mettre des valeurs en dur...
-  Pour tester les requêtes, se connecter au shell d'InfluxDB comme indiqué ci-dessous. +    Remplacer ''<nowiki>$__interval</nowiki>'' par ''10s''
-  * Exemple de requête dans Grafana qui peut être testé au préalable dans le shell d'InfluxDB: <code sql> +
-SELECT mean(usage_user) as "user", mean(usage_system) as "system", mean(usage_softirq) as "softirq", mean(usage_steal) as "steal", mean(usage_nice) as "nice", mean(usage_irq) as "irq", mean(usage_iowait) as "iowait", mean(usage_guest) as "guest", mean(usage_guest_nice) as "guest_nice"  FROM "cpu" WHERE "host" =~ /^sinp-paca-(db|web)$/ AND "cpu" = 'cpu-total' AND time > now() - 5m GROUP BY time($__interval),+
-</code> +
-    * Pour tester la requête précédente dans //InfluxDB//, remplacer ''<nowiki>$__interval</nowiki>'' par ''10s''+
   * A priori, il est conseillé de ne pas mettre la valeur ''NoData'' pour le champ "**If no data or all values are null**" qnd on utilise une règle d'alerte utilisant **For**. Vous pouvez utiliser la valeur ''Keep Last State''.   * A priori, il est conseillé de ne pas mettre la valeur ''NoData'' pour le champ "**If no data or all values are null**" qnd on utilise une règle d'alerte utilisant **For**. Vous pouvez utiliser la valeur ''Keep Last State''.
-  * Sur l'interface de //Grafana//, vous pouvez tester l'alerte en cliquant sur le bouton "Test ruleen bas de l'onglet "Alert" +  * Sur l'interface de //Grafana//, vous pouvez construire les requêtes et tester l'alerte en cliquant sur le bouton "Preview". 
-    * Si tout se passe correctement, vous devez obtenir un objet pour chaque entrée de la clause SELECT qui contient par exemple : <code json>{"message": "Condition[0]: Eval: false, Metric: Alert, Value: 4.287"}</code> +  * Exemples de requêtes d'alertes : 
-      * La valeur contient ''Eval: false'' qui indique que les condition ne sont pas réuni pour ce paramètre pour lancer l'alerte +    * **cpu** : <code sql> 
-      * Ici '' Value: 4.287" '' correspond à la moyenne de la propriété ''usage_user'' +A : SELECT mean("usage_user"FROM "autogen"."cpu" WHERE $timeFilter GROUP BY time(10s), "host"::tag fill(null) 
-  * Autres exemples de requêtes d'alertes : +B : MEAN ; A ; DROP NON NUMERIC VALUE 
-    * **cpu** : <code sql>SELECT mean(usage_user) as "user", mean(usage_systemas "system", mean(usage_softirq) as "softirq", mean(usage_steal) as "steal", mean(usage_nice) as "nice", mean(usage_irq) as "irq", mean(usage_iowait) as "iowait", mean(usage_guest) as "guest", mean(usage_guest_nice) as "guest_nice"  FROM "cpu" WHERE "host" =~ /^sinp-paca-(db|web)$/ AND "cpu" = 'cpu-total' AND time > now() - 5m GROUP BY time($__interval), *</code> +C : B IS ABOVE 50 
-    * **Load** : <code sql>SELECT mean(load1) AS short, mean(load5) AS medium, mean(load15) AS long FROM "system" WHERE host =~ /^sinp-paca-(web|db)$/ AND time > now() - 5m GROUP BY time($__interval), * ORDER BY asc+</code> 
 +    * **Load** : <code sql> 
 +A query : SELECT mean("load5") FROM "autogen"."system" WHERE $timeFilter GROUP BY time(10sfill(null) 
 +B reduce : MEAN ; A ; DROP NON NUMERIC VALUE 
 +C threshold : B IS ABOVE 2,5
 </code> </code>
-    * **Memory** pour //sinp-paca-web// : <code sql>SELECT mean(used) AS used FROM "mem" WHERE "host" = 'sinp-paca-web' AND time > now() - 5m GROUP BY time($__interval), host ORDER BY asc</code+    * **Memory** : <code sql> 
-    * **Memory** pour //sinp-paca-web// <code sql>SELECT mean(used) AS used FROM "memWHERE "host" = 'sinp-paca-db' AND time > now() - 5m GROUP BY time($__interval), host ORDER BY asc</code> +A query : SELECT mean("available_percent") AS "mean_available_percent" FROM "autogen"."memWHERE $timeFilter GROUP BY time(10s), "host"::tag fill(null) 
-    * **Disk usage** pour //sinp-paca-web// : <code sql> +B reduce : MEAN ; A ; DROP NON NUMERIC VALUE 
-SELECT mean(used) AS "used FROM "diskWHERE "host= 'sinp-paca-web' AND path = '/' AND time > now() - 5m GROUP BY time($__interval), "host", "path"+C threshold : B IS BELOW 25
 </code> </code>
-    * **Disk usage** pour //sinp-paca-db// : <code sql> +    * **Disk usage** : <code sql> 
-SELECT mean(used) AS "used FROM "diskWHERE "host= 'sinp-paca-db' AND path = '/' AND time > now() - 5m GROUP BY time($__interval), "host", "path"+A query: SELECT mean("used_percent"FROM "autogen"."diskWHERE $timeFilter GROUP BY time(1m), "host"::tag, "device"::tag fill(null) 
 +B reduce : MAX ; A ; DROP NON NUMERIC VALUE 
 +C threshold : B IS ABOVE 80
 </code> </code>
  
Ligne 240: Ligne 238:
   * Pour supprimer un ancien nom d'hôte apparaissant dans Grafana, il faut supprimer les données en fonction du temps et de la métrique (//measurement// => postgresql) : ''DELETE FROM postgresql WHERE time < '2020-01-09 17:00:00' ''   * Pour supprimer un ancien nom d'hôte apparaissant dans Grafana, il faut supprimer les données en fonction du temps et de la métrique (//measurement// => postgresql) : ''DELETE FROM postgresql WHERE time < '2020-01-09 17:00:00' ''
   * Possible aussi de supprimer globalement pour toutes les métriques : ''DELETE WHERE time < '2020-01-09 10:37:00'''   * Possible aussi de supprimer globalement pour toutes les métriques : ''DELETE WHERE time < '2020-01-09 10:37:00'''
 +
 +==== 🗑️ Monitorer InfluxDB v1 ====
 +  * InfluxDb v1 :
 +    * Pour monitorer InfluxDB, il est nécessaire de modifier le fichier de configuration du Telegraf présent sur le serveur hébergeant la base InfluxDB : <code properties>
 +[[outputs.influxdb]]
 +  urls = ["http://monitor-influxdb:8086"]
 +  database = "telegraf"
 +
 +[[inputs.influxdb]]
 +  urls = [
 +    "http://monitor-influxdb:8086/debug/vars"
 +  ]
 +</code>
 +
  • serveurs/installation/web-srv/docker-grafana.1685218847.txt.gz
  • Dernière modification : 2023/05/27 20:20
  • de jpmilcent