<section style="text-align: center;"> # Agent Telegraf sur AWS #### PF-865 26/04/2022 --- <section style="text-align: left;"> ## Objectifs - Tester l'agent telegraf sur AWS : - collecter des métriques - les envoyer vers des multiples destinations (Cloudwatch, VictoriaMetrics) pour alerting et analyse - filtrer les métriques en fonction de destination - comparer l'agent Telegraf avec CWAgent --- <section style="text-align: left;"> ## Telegraf - Agent universel (cloud agnostic) - modulable (plugins par défaut et plugin modulable) - Possibilité de faire une architecture en mode cluster - intégration avec kubernetes par telegraf operator --- <section style="text-align: left;"> ## Fonctionnalités Télégraf - Récupération métriques OS et applicatives sur Linux et Windows - Envoi des métriques vers cloudwatch - filtrage des métriques en input et en output - Envoi des métriques vers un endpoint remote-write(prometheus, victora metrics) - Possibilité de créer ses propres plugins - Plugin pour superviser l'agent - Interfaçage avec des programmes externes grace à son plugin execd - Une large panoplie data formats (csv, logfmt, json etc) --- <section style="text-align: left;"> ## Etapes Installation Telegraf (v1.22) sur VM Linux L'installation se fait manuellement et nécessite des privilèges `root`. Il existe 2 méthodes : 1. Installation Telegraf depuis le repository InfluxData (à l'aide du gestionnaire de paquets apt-get) ```bash wget -qO- https://repos.influxdata.com/influxdb.key | sudo tee /etc/apt/trusted.gpg.d/influxdb.asc >/dev/null source /etc/os-release echo "deb https://repos.influxdata.com/${ID} ${VERSION_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list sudo apt-get update && sudo apt-get install telegraf ``` 2. Installation d'un package.deb --- <section style="text-align: left;"> ## Etapes Installation Telegraf (v1.22) sur VM Windows L'installation se fait manuellement et nécessite des privilèges `Administrator`. - Téléchargement ( dans `C:\Program Files\telegraf`) et dézipper le package ```bash > wget https://dl.influxdata.com/telegraf/releases/telegraf-1.22.1_windows_amd64.zip -UseBasicParsing -OutFile telegraf-1.22.1_windows_amd64.zip > Expand-Archive .\telegraf-1.22.1_windows_amd64.zip -DestinationPath 'C:\Program Files\telegraf\' ``` - Installation et demarrage service ```bash > .\telegraf.exe --service install --config "C:\Program Files\telegraf\telegraf.conf" > telegraf.exe --service start ``` --- <section style="text-align: left;"> ## Étapes post-install Tous les droits sont définis dans un rôle IAM. - Les droits pour envoyer des métriques/logs nécessitent la policy `CloudWatchAgentServerPolicy`. Lorsque le rôle a été créé, il faut [l'attribuer à la VM](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/iam-roles-for-amazon-ec2.html#attach-iam-role). --- <section style="text-align: left;"> ## Configuration - notions Le fichier de configuration contient 5 sections: - Les paramètres de l'agent Telegraf - [Output plugins](https://docs.influxdata.com/telegraf/v1.22/plugins/#output-plugin): Pour définir les destinations des différentes métriques - [Processor plugins](https://docs.influxdata.com/telegraf/v1.22/plugins/#processor-plugins) : pour transformer et enrichir les métriques - [Aggregator plugins]( https://docs.influxdata.com/telegraf/v1.22/plugins/#external-plugins) : pour créer des métriques agrégées (par exemple mean, min, max, quantiles, etc.) - [Input plugins](https://docs.influxdata.com/telegraf/v1.22/plugins/#input-plugins): pour définir les sources des métriques --- <section style="text-align: left;"> ## Configuration: les étapes - Mise à jour du fichier de configuration - Linux: `/etc/telegraf/telegraf.conf` - Windows : `C:\Program Files\telegraf\telegraf.conf` - Relancer le service télégraf --- <section style="text-align: left;"> ## Configuration - ajout tag Telegraf est capable d'ajouter des tags aux métriques. Les tags globaux peuvent être spécifiés au format `clé="valeur"`. ```bash [agent] hostname = "ubuntu-pf-865" [global_tags] cc_prom_source = "echo" ``` --- <section style="text-align: left;"> ## Configuration - ajout tag visualisation ![](/uploads/upload_388e505d996974d1dcd45b46b6db6d12.png) --- <section style="text-align: left;"> ## Configuration - monitoring de l'agent Telegraf (1/2) Il est possible de surveiller la santé de l'agent télégraf, pour cela il faut utiliser [health outputs plugins](https://github.com/influxdata/telegraf/blob/master/plugins/outputs/health/README.md). ```bash [[outputs.health]] service_address = "http://10.0.10.234:8080" namepass = ["internal_write"] [[outputs.health.compares]] field = "buffer_size" lt = 100.0 [[outputs.health.contains]] field = "buffer_size" ``` --- <section style="text-align: left;"> ## Configuration - monitoring de l'agent Telegraf (2/2) Le plugin health fournit une ressource de vérification de l'état HTTP. Cela permet de vérifier les codes d'état HTTP avec blackbox-exporter. - code http `200` - lorsque l'agent Telegraf est en bonne santé - code http `503` - lorsque l'agent Telegraf n'est pas en bonne santé ```bash ubuntu@ip-10-0-10-234:~/Telegraf$ curl 10.0.10.234:8080 OK ``` --- <section style="text-align: left;"> ## Définition destinations Telegraf - Cloudwatch - la configuration de l'output cloudwatch nécessite une clé AK/SK ou un role IAM. - Attribution du role IAM à la VM qui exécute telegraf ``` [[outputs.cloudwatch]] region = "eu-west-3" namespace = "Telegraf" ``` --- <section style="text-align: left;"> ## Définition destinations Telegraf - VictoriaMetrics - Utilisation plugin ouput http. - Définition des différents headers http ``` [[outputs.http]] url = "https://pf-865-victoriametrics.ocb-test06.caascad.com/api/v1/write" # adresse ou envoyer les métriques data_format = "prometheusremotewrite" # format métriques en sortie [outputs.http.headers] Content-Type = "application/x-protobuf" Content-Encoding = "snappy" X-Prometheus-Remote-Write-Version = "0.1.0" ``` --- <section style="text-align: left;"> ## Empreinte de l'agent (CPU/MEM) - Linux - memoire: 104M - cpu: 1% - Windows - memoire: 37M - cpu: 0.1% --- <section style="text-align: left;"> ## Métriques applicatives - il existe des nombreux plugins pour récupérer les métriques applicatives (mysql, postgres, nginx mongodb etc) - plugins natifs pour statsd, cgroup, procstat, snmp etc - Plusieurs plugins http et webhook (github, filestack etc) - possibilité de s'interfacer avec des plugins externes en utilisant le plugins execd --- <section style="text-align: left;"> ## Métriques applicatives : caddy - webserver qui exporte les métriques en format prometheus - plugins input pour collecter les métriques en format prometheus: `input.prometheus` - Configuration de telegraf : ``` [[inputs.prometheus]] urls = ["http://localhost:2019/metrics"] ``` - Logs: ``` Loaded inputs: cpu disk diskio kernel mem processes prometheus swap system ``` --- <section style="text-align: left;"> ## Résultat des tests sur Cloudwatch ![](/uploads/upload_2d46cf85d10ff6659906f62ca0161ec5.png) --- --- <section style="text-align: left;"> ## Résultat des tests sur VictoriaMetrics ![](/uploads/upload_1c7f4bdd2e5eabd87db76bdf0d58068a.png) --- <section style="text-align: left;"> ## Filtrage des métriques - Possibilté d'utiliser du regex pour les filtres - Filtrage sur différents niveaux (inputs, outputs, aggregator et processors) - Filtrage sur les champs des metriques: ``` process_virtual_memory_bytes,cc_prom_source=echo,host=ubuntu-pf-865,url=http://localhost:2019/metrics gauge=755904512 1650642517000000000 ``` - Possibilité d'utiliser 8 filtres: - `namepass/namedrop` & `tagpass/tagdrop` => pour le métriques - `fieldpass/fileddrop` => pour les fields - `taginclude/tagexclude` => pour les tags --- <section style="text-align: left;"> ## Filtrage des métriques - visualisation ``` [[outputs.cloudwatch]] namepass = ["process_virtual_memory_bytes"] ``` ![](/uploads/upload_eb429d18839ce9f8a27ff988bc075386.png) --- <section style="text-align: left;"> ## Telegraf vs CWAgent (1/2) **Avantages** - binaire statique open-source avec une communauté trés active - permet d'envoyer vers d'autres destinations que Cloudwatch ( Prometheus, VictoriaMetrics, etc) - plus flexible grace à ces [plugins](https://docs.influxdata.com/telegraf/v1.22/plugins/) - filtrage des métriques plus fin - au niveau des metriques/tags/fields - au niveau des inputs/outputs --- <section style="text-align: left;"> ## Telegraf vs CWAgent (2/2) **Avantages** - permet ajouter des tags aux métriques - Telegraf a un repo deb/rpm à ajouter sur Linux pour pouvoir faire un apt-get install/dnf install - Pour simplifier les configurations extrement complexes, il est possible de la diviser en parties gérables - plugin qui permet d'être supervisé (`outputs.health`) --- <section style="text-align: center;"> ## Tableau récapitulatif ![](/uploads/upload_f7a0eebc921aab7597bb125ca2bedc72.png) --- <section style="text-align: left;"> ## Conclusions - Agent cloud agnostic, open source avec une ampreinte ressources tres faible - Se déploie facilement et son industrialisation ne devrait pas poser de problème - La documentation n'est pas exhaustive mais elle est suffisante - La configuration de telegraf est très modulable grâce aux différents plugins - Le support de multiples protocoles externes permet un interfaçage facilité. --- <section style="text-align: left;"> ## Liens : * [Référence de l'étude dans Confluence](https://confluence.corp.cloudwatt.com/display/CAAS/Agent+Telegraf+AWS) * [Documentation de l'agent Telegraf v1.22](https://docs.influxdata.com/telegraf/v1.22/) --- <section style="text-align: left;"> ## Questions ... et sinon, merci pour votre attention :slightly_smiling_face: <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}}