<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

---
<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

---
---
<section style="text-align: left;">
## Résultat des tests sur VictoriaMetrics

---
<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"]
```

---
<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

---
<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>