<!-- .slide: class="center" --> # Agent Telegraf GCP ![](/uploads/upload_824207cff3bfd2cb18b902ddf7a3ba2d.png) <!-- .element: style="text-align: center" --> --- ## Objectifs - Découvrir Telegraf - Tester l'agent Telegraf pour envoyer les métriques dans : - Cloud monitoring - Prometheus - Comparer l'agent natif Ops agent et Telegraf --- ## Prérequis - Création des VMs sur un projet GCP - Installation de telegraf - Autorisations nécessaires à la VM pour communiquer avec le CSP: - https://www.googleapis.com/auth/logging.write - https://www.googleapis.com/auth/monitoring.write Présentation en vidéo sur l'installation de telegraf, 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) --- ## Authentification pour envoyer dans cloud monitoring Deux méthodes: - Service account généré par défaut lors de la creation de la VM - Création d'un user avec les roles nécessaires Côté Telegraf, pas de configuration spécifique à faire --- ## Métriques dans cloud monitoring (1/3) - Le plugin de type output `stackdriver` envoie les métriques vers cloud monitoring - Seul le champ project_id est obligatoire - Les métriques remontées seront considérées comme custom - Les métriques seront dans le sous dossier custom --- ## Métriques dans cloud monitoring (2/3) Exemple de configuration ``` # # Configuration for Google Cloud Stackdriver to send metrics to [[outputs.stackdriver]] # ## GCP Project project = "fluted-airline-347207" # # ## The namespace for the metric descriptor namespace = "telegraf" # # ## Custom resource type # # resource_type = "generic_node" # # ## Additional resource labels # # [outputs.stackdriver.resource_labels] # # node_id = "$HOSTNAME" # # namespace = "myapp" # # location = "eu-north0"``` --- ## Métriques dans Cloud monitoring (3/3) ![](/uploads/upload_801f5121817ea6d0fcc572deff266092.png =x350) --- ## 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" ``` --- ## Métriques dans Prometheus (push) (2/2) ![](/uploads/upload_b87c73e38b3e301bed8fd24b2e5b1cff.png) --- ## 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. ``` # Configuration for the Prometheus client to spawn [[outputs.prometheus_client]] ## Address to listen on. listen = ":9273" ``` --- ## Focus sur le plugin processor Permet de réaliser des opérations sur les métriques définies en input. Parmi ces opérations on a: - Transformation - Décoration - Filtrage exemple 1: ``` [[processors.clone]] namepass = [ "cpu" ] [processors.clone.tags] instance = "gcp-instance" ``` --- ## Focus sur le plugin processor exemple 2: ``` [[processors.regex]] [[processors.regex.tags]] key = "host" pattern = "^(.*)$" replacement = "${1}" result_key = "instance" ``` --- ## 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 dur - `contains` : ça vérifie que la métrique contient bien un field Si : - échec : code retour 503 - succès : code retour 200 --- ## 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" ``` --- ## 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 - ... --- ## 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 --- ## 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 --- ## Problème connu avec telegraf (1/2) ### Description - des métriques en out-of-order (quand le buffer telegraf est rempli) ``` E! [agent] Error writing to outputs.stackdriver: rpc error: code = InvalidArgument desc = One or more TimeSeries could not be written: Points must be written in order. One or more of the points specified had an older end time than the most recent point.: global{} timeSeries[52,62,118,143,150,190]: custom.googleapis.com/telegraf/diskio/write_bytes{cloudGCP,nameloop9,hostdemo-pf-918}; Points must be written in order. One or more of the points specified had an older end time than the most recent point.: global{} timeSeries[9,16,27,39,84,108,131,139]: custom.googleapis.com/telegraf/diskio/read_bytes{nameloop1,cloudGCP,hostdemo-pf-918}; ``` --- ## Problème connu avec telegraf (2/2) ### Description - Toutes les métriques remontées par telegraf sont considérées comme custom - Les métriques se retrouvent dans le sous dossier custom - Une limite de 10000 métriques custom est imposée par google --- ## Limitations - la limite imposée sur les custom metrics - Supporte pas des valeurs de type string dans les métriques - Des logs d'erreur sur "out of order". --- ## Ressources utilisées (CPU/RAM) <font size="4"> * usage mémoire = 14% ==> 250 MB * usage cpu = 0,6% </font> ![](/uploads/upload_3f53907297cb0e78510170169f97df51.png =x400) ![](/uploads/upload_996a51af5a361c72bf0a6b9aea5251d7.png =x400) --- ## Comparaison entre Telegraf et l'Ops agent <!-- .slide: class="center" --> ![](/uploads/upload_813121f8e312b00f7df0eb81e0655925.png =x400) <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}}