<!-- .slide: class="center" --> # Agent Telegraf Azure ![](/uploads/upload_824207cff3bfd2cb18b902ddf7a3ba2d.png) <!-- .element: style="text-align: center" --> --- <section style="text-align: left;"> ## Objectifs - Découvrir Telegraf - Tester l'agent Telegraf pour envoyer les métriques dans : - Prometheus - Azure Monitor - Comparer l'agent natif d'Azure et Telegraf --- <section style="text-align: left;"> ## Prérequis Nous allons faire dans cette présentation l'impasse sur : - l'installation/configuration de l'agent Télégraf - le fonctionnement de Telegraf qui ont déjà étaient abordés dans l'excellente présentation vidéo, disponible [ICI](https://orange0-my.sharepoint.com/:v:/g/personal/mor_fall_orange_com/EYCDYFtUO-FApXyieIfg_sMBsbkMLVt21SvYR6WiGHZpZg) --- ## Concepts de base Telegraf ![](/uploads/upload_e3ef7a15d53e75cc25309cf10c6fac6e.png) --- <section style="text-align: left;"> ## C'est quoi une métrique dans Télégraf ? Une métrique est composé d'un nom (name), de balise (tags), de champs (fields). ``` > cpu,client=pf_pf-866,cluster=pf_azure,cpu=cpu0,host=pf-791-linux,os=pf_linux usage_guest=0,usage_guest_nice=0,usage_idle=95.99999999999534,usage_iowait=2.000000000000199,usage_irq=0,usage_nice=0,usage_softirq=0,usage_steal=0,usage_system=0,usage_user=1.9999999999998437 1651214259000000000 ``` Les valeurs sont présentées en key=value avec l'horodatage en dernier. * Name => cpu * Tags => client=pf_pf-866,[...],os=pf_linux * Fields => usage_guest=0 etc... --- <section style="text-align: left;"> ## Authentification pour envoyer dans Azure Monitor - Création d'une identitée managée pour la VM (comme pour l'agent Azure Monitor) - Une identité est automatiquement crée pour la VM dans Azure AD - Seule cette ressource Azure peut utiliser cette identité pour demander des tokens à Azure AD - Côté Telegraf, pas de configuration spécifique à faire --- <section style="text-align: left;"> ## Métriques dans Azure Monitor (1/4) - Le plugin de type output `azure_monitor` envoie les métriques vers Azure Monitor - Le plugin est encore en preview - Il aggrége les métriques récupérées en tranches d'une minute - Ensuite les tranches sont envoyées à Azure Monitor à chaque intervalle de flush --- ## Métriques dans Azure Monitor (2/4) Exemple de configuration ``` [[outputs.azure_monitor]] ## Set the namespace prefix, defaults to "Telegraf/<input-name>". # namespace_prefix = "Telegraf/" ## Azure Monitor doesn't have a string value type, so convert string ## fields to dimensions (a.k.a. tags) if enabled # strings_as_dimensions = false ## Azure Region to publish metrics against. ## ex: region = "southcentralus" # region = "" # resource_id = "" # endpoint_url = "https://monitoring.core.usgovcloudapi.net" ``` --- <section style="text-align: left;"> ## Métriques dans Azure Monitor (3/4) ![](/uploads/upload_b955890f26e4d4464046b71adbcb538e.png) --- <section style="text-align: left;"> ## Métriques dans Azure Monitor (4/4) ![](/uploads/upload_5f89ab517d7c5c497cb0613c6a1ea4ae.png) --- <section style="text-align: left;"> ## Métriques dans Prometheus (push) (1/3) Le plugin de type output `http` envoie les données dans un message http, dans un format `prometheusremotewrite`. Le header `Authorization` associé permet l'authentification dans Rancher. ``` [[outputs.http]] alias = "prometheus-0" url = "https://rancher.ocb-test06[...]/prometheus-0[...]/v1/write" data_format = "prometheusremotewrite" [outputs.http.headers] Authorization = "Bearer xxx" Content-Type = "application/x-protobuf" Content-Encoding = "snappy" X-Prometheus-Remote-Write-Version = "0.1.0" ``` --- <section style="text-align: left;"> ## Métriques dans Prometheus (push) (2/3) ![](/uploads/upload_e3213fd86db93ec07daa14bc299729d3.png) --- <section style="text-align: left;"> ## Métriques dans Prometheus (push) (3/3) ![](/uploads/upload_478714b0a5e816eaabb6618207c5277a.png) --- <section style="text-align: left;"> ## Métriques dans Prometheus (pull) Le plugin de type output `prometheus_client` expose les métriques sur un endpoint http (par défaut : `/metrics`). Un serveur Prometheus va ensuite récupérer les données par pulling. Ce mode de fonctionnement est à privilégier dans le cas de métriques de type `Summary` et `Histogram`. ``` # Configuration for the Prometheus client to spawn [[outputs.prometheus_client]] ## Address to listen on. listen = ":9273" ``` --- <section style="text-align: left;"> ## Monitoring de Telegraf : output health (1/2) Permet d'avoir un healtcheck http Différents tests peuvent être réalisés : - `compares` : ça compare la valeur d'un field à une valeur en dure - `contains` : ça vérifie que la métrique contient bien un field Si : - échec : code retour 503 - succès : code retour 200 --- <section style="text-align: left;"> ## Monitoring de Telegraf : output health (2/2) ### Exemple de configuration ```bas [[outputs.health]] service_address = "http://localhost:8080" namepass = ["internal_agent", "internal_write"] [[outputs.health.compares]] field = "gather_errors" lt = 5.0 [[outputs.health.contains]] field = "buffer_size" ``` --- <section style="text-align: left;"> ## Monitoring de Telegraf : input internal (1/2) ### Permet d'avoir des métriques sur Telegraf lui-même : - le nombre de métriques collectées - le nombre de métriques écrites - la taille limite du buffer - la taille du buffer - des stats sur la mémoire - ... --- <section style="text-align: left;"> ## Monitoring de Telegraf : input internal (2/2) - Configuration : ```bas # Collect statistics about itself [[inputs.internal]] ## If true, collect telegraf memory stats. # collect_memstats = true ``` - Dashboard upstream disponible (à améliorer) --- <section style="text-align: left;"> ## Monitoring de Telegraf : mix des deux solutions Les deux plugins utilisés séparément ne permettent pas de valider la chaine de bout en bout. On pourrait utiliser les deux plugins pour monitorer Telegraf. - internal pour récupérer les métriques internes de Telegraf - health pour vérifier que le plugin internal fonctionne comme attendu --- <section style="text-align: left;"> ## Problème connu avec Azure Monitor (1/3) ### Description - Azure Monitor n'accepte pas les valeurs négatives (contrairement à Prometheus ou Cloudwatch) - Une seule métrique avec une valeur négative -> toutes les écritures sur Azure Monitor sont bloquées --- <section style="text-align: left;"> ## Problème connu avec Azure Monitor (2/3) ### Solutions - Filtrer les métriques ayant une valeur négative `fielddrop = ["tcp_maxconn"]` - Toutes les valeurs négatives -> 0 ```bas [[processors.execd]] command = ["sed", "s/=-[0-9]*i/=0i/"] ``` - Faire un patch upstream pour que les valeurs négatives ne soient plus envoyées dans Azure Monitor --- <section style="text-align: left;"> ## Problème connu avec Azure Monitor (3/3) **Supervision de ce problème** : ![](/uploads/upload_298f4031ca45e71f2817d3d9a4f23fb4.png) --- <section style="text-align: left;"> ## Limitations - Le problème des valeurs négatives - Le plugin output Azure monitor est en preview. Il ne fonctionne pas avec toutes les régions. --- <section style="text-align: left;"> ## Ressources utilisées (CPU/RAM) ![CPU Usage](/uploads/upload_2e77c7ce9fb351e5b1ca676295d7295c.png =x220) ![Memory Usage](/uploads/upload_4880c945755a79b76ed1b092a21cb6a2.png =x220) --- <section style="text-align: left;"> ## Comparaison entre Telegraf et l'agent Azure Monitor ![](/uploads/upload_9eef786aac7894615d555d9f6877cb38.png) <style type="text/css"> p { font-size: smaller; } .reveal ul ul li { font-size: smaller; } .reveal ol li { font-size: smaller; } .reveal ol li ul li { font-size: smaller; } .reveal section { text-align: left; } } .reveal h3 { color: orange; text-align: center; border-bottom: 1px solid orange; } .reveal h2 { color: orange; text-align: center; border-bottom: 1px solid orange; } .reveal h1 { color: orange; text-align: center; border-bottom: 1px solid orange; margin-bottom: 0.4em; } .reveal code { color: aquamarine; font-size: smaller; } </style>
{"type":"slide","slideOptions":{"transition":"slide","center":true}}