dj-wasabi.telegraf
dj-wasabi.telegraf
- dj-wasabi.telegraf
État de la construction :
Ce rôle installera et configurera Telegraf.
Telegraf est un agent écrit en Go pour collecter des métriques du système sur lequel il s'exécute, ou d'autres services, et pour les écrire dans InfluxDB.
Les objectifs de conception sont d'avoir une empreinte mémoire minimale avec un système de plugins permettant aux développeurs de la communauté d'ajouter facilement le support pour collecter des métriques provenant de services bien connus (comme Hadoop, Postgres ou Redis) et d'API tierces (comme Mailchimp, AWS CloudWatch ou Google Analytics).
(https://github.com/influxdb/telegraf)
Exigences
Systèmes pris en charge
Ce rôle prend en charge les systèmes suivants :
- Red Hat
- Debian
- Ubuntu
- Conteneur Docker
- (Open)Suse
- Windows (meilleur effort)
- FreeBSD (meilleur effort)
- Archlinux (mode "en ligne" uniquement)
Vous aurez donc besoin de l'un de ces systèmes.. :-) Veuillez envoyer des Pull Requests ou des suggestions si vous souhaitez utiliser ce rôle pour d'autres systèmes.
InfluxDB
Vous aurez besoin d'une instance InfluxDB fonctionnant quelque part sur votre réseau. Ou un des autres types de sortie trouvés sur https://github.com/influxdata/telegraf/#output-plugins
Docker
Docker doit être installé sur l'hôte cible. Je peux recommander ces rôles pour installer Docker :
Ceci est uniquement le cas lorsque la configuration est nécessaire pour un Telegraf à l'intérieur d'un conteneur Docker (Lorsque telegraf_agent_docker: True
).
Mise à jour
0.7.0
Il y avait un problème :
Si je configure un telegraf_plugins_extra, exécute Ansible, supprime le plugin et exécute Ansible à nouveau, le plugin reste sur la machine.
Variables de rôle
Variables spécifiques au rôle Ansible
Spécification de la version à installer :
telegraf_agent_version
: La version de Telegraf à installer. Sitelegraf_agent_package_state
est défini surlatest
, alors cette propriété et sa valeur sont ignorées. Par défaut :1.10.0
Comment Telegraf
doit être installé. Il existe 4 méthodes pour installer Telegraf
sur l'hôte cible :
- Via le gestionnaire de packages, comme
yum
,apt
ouzypper
("repo") ; - Via un téléchargement depuis le site
https://dl.influxdata.com/
("en ligne") ; - Déjà fourni et déjà disponible sur l'hôte cible, mais pas encore installé/configuré ("hors ligne") ;
- Déjà installé sur l'hôte cible ou fait manuellement, mais pas encore configuré ("manuel") ;
Cela peut être configuré en définissant telegraf_agent_package_method
sur l'une des valeurs appropriées (repo
, online
, offline
ou manual
).
Package Telegraf
Ces propriétés définissent comment et quel package sera installé.
telegraf_agent_package
: Le nom du package Telegraf à installer. Lorsquetelegraf_agent_package_method
est défini suronline
ouoffline
, il doit avoir le chemin complet du fichier. Exemple :telegraf_agent_package: /tmp/telegraf.rpm
. Par défaut :telegraf_agent_package: telegraf
.telegraf_agent_package_method
: La méthode d'installation à utiliser. Peut choisir entre :repo
,offline
ouonline
.telegraf_agent_package_state
: Si le package doit êtreprésent
oulatest
. Lorsque défini surlatest
,telegraf_agent_version
sera ignoré. Par défaut :présent
.
Configuration du processus de l'agent Telegraf.
telegraf_agent_interval
: L'intervalle configuré pour envoyer des données au serveur. Par défaut :10
telegraf_agent_debug
: Exécute Telegraf en mode débogage. Par défaut :False
telegraf_agent_round_interval
: Arrondit l'intervalle de collecte à 'interval' Par défaut : Truetelegraf_agent_flush_interval
: Intervalle de vidage des données par défaut pour toutes les sorties. Par défaut : 10telegraf_agent_flush_jitter
: Varie l'intervalle de vidage d'un montant aléatoire. Par défaut : 0telegraf_agent_aws_tags
: Configure les tags AWS EC2 dans la section des tags de Telegraf Par défaut :False
telegraf_agent_aws_tags_prefix
: Définit un préfixe pour les tags AWS EC2. Par défaut :""
telegraf_agent_collection_jitter
: Varie la collecte d'un montant aléatoire. Par défaut : 0 (depuis v0.13)telegraf_agent_metric_batch_size
: La taille du lot des métriques de l'agent. Par défaut : 1000 (depuis v0.13)telegraf_agent_metric_buffer_limit
: La limite du tampon des métriques de l'agent. Par défaut : 10000 (depuis v0.13)telegraf_agent_quiet
: Exécute Telegraf en mode silencieux (uniquement les messages d'erreur). Par défaut :False
(depuis v0.13)telegraf_agent_logfile
: Le nom du fichier journal de l'agent. Par défaut : '' (signifie logger sur stdout) (depuis v1.1)telegraf_agent_hostname
: Le nom d'hôte de l'agent. Par défaut :ansible_fqdn
telegraf_agent_omit_hostname
: Ne pas définir le tag "host" dans l'agent. Par défaut :False
(depuis v1.1)
Variables spécifiques au rôle Docker :
telegraf_agent_docker
: Installer Telegraf comme un conteneur Docker. Par défaut :False
telegraf_agent_docker_name
: Nom du conteneur Docker. Par défaut :telegraf
telegraf_agent_docker_network_mode
: Mode réseau du conteneur Docker. Par défaut :bridge
telegraf_agent_docker_restart_policy
: Politique de redémarrage du conteneur Docker. Par défaut :unless-stopped
telegraf_agent_docker_image_version
: La version de l'image Docker Telegraf à utiliser. Par défaut, la valeur contient la valeur donnée pourtelegraf_agent_version
. Peut être définie surlatest
pour obtenir le taglatest
actuel pour l'image Docker fournie.telegraf_uid_docker
: Remplacer l'ID utilisateur. Par défaut :995
telegraf_gid_docker
: Remplacer l'ID de groupe. Par défaut :998
Référence complète des paramètres de l'agent : https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration.
Informations supplémentaires
ansible_fqdn problème pour obtenir le nom d'hôte
Informations supplémentaires concernant : ansible_fqdn problème pour obtenir le nom d'hôte #105
Décrivez le bug
Dans certains nœuds, j'obtiens des noms d'hôtes étranges, principalement localhost.localdomain. Ces nœuds montrent une configuration correcte dans hostnamectl. J'ai vu que vous utilisez 'ansible_fqdn' par défaut.
On dirait que ansible_fqdn et ansible_hostname peuvent donner des résultats différents, et parfois même des résultats très étranges, car cela nécessite parfois des appels DNS (qui ne sont pas sous mon contrôle dans ces cas) pour inférer ces noms.
Proposition de correction
Dans mon playbook, j'ai ajouté ce paramètre :
telegraf_agent_hostname: "{{ ansible_nodename }}"
Définir des tags
Vous pouvez définir des tags pour l'hôte exécutant Telegraf :
telegraf_global_tags:
- tag_name: some_name
tag_value: some_value
Spécification d'une sortie. La valeur par défaut est définie sur localhost, vous devrez spécifier le serveur InfluxDB correct :
telegraf_agent_output:
- type: influxdb
config:
- urls = ["http://localhost:8086"]
- database = "telegraf"
tagpass:
- cpu = ["cpu0"]
La configuration sera imprimée ligne par ligne dans la configuration, vous pourriez également utiliser :
config:
- # Imprimez une ligne de documentation
et elle sera imprimée dans le fichier de configuration.
Détails Docker
Image Docker
L'image officielle Influxdata Telegraf est utilisée. telegraf_agent_version
sera traduite en tag d'image.
Montages Docker
Veuillez noter que le conteneur Docker monte essentiellement tout votre système (en lecture seule) pour surveiller l'hôte du moteur Docker depuis l'intérieur du conteneur. Pour être précis :
- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro
Plus d'informations : https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md.
Exemple de configuration Docker
telegraf_agent_docker: True
# Force le mode réseau de l'hôte, afin que les métriques de trafic de l'hôte du moteur Docker puissent être collectées.
telegraf_agent_docker_network_mode: host
# Force un tag d'image spécifique.
telegraf_agent_version: 1.10.0-alpine
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
tagpass:
- fstype = [ "ext4", "xfs" ]
tagdrop:
- path = [ "/etc", "/etc/telegraf", "/etc/hostname", "/etc/hosts", "/etc/resolv.conf" ]
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
- plugin: processes
- plugin: docker
config:
- endpoint = "unix:///var/run/docker.sock"
- timeout = "5s"
Variables spécifiques à Windows
REMARQUE
Supporter Windows est un meilleur effort (je n'ai pas la possibilité de tester/vérifier les changements sur les différents types d'instances Windows disponibles). Les PR spécifiques à Windows seront presque immédiatement fusionnées, à moins que quelqu'un ne soit en mesure de fournir un mécanisme de test Windows via Travis ou un autre service pour les Pull Requests.
telegraf_win_install_dir
: Le répertoire où Telegraf sera installé.telegraf_win_logfile
: L'emplacement du fichier journal de Telegraf.telegraf_win_include
: Le répertoire qui contiendra toute la configuration des plugins.
Variables spécifiques à openSUSE
telegraf_zypper_baseurl
: L'URL du dépôt openSUSE qui héberge Telegraf (par exemple, pour openSUSE Leap : "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Leap_{{ ansible_distribution_version }}/"). Si cela n'est pas spécifié, un dépôt par défaut sera utilisé.
Variables spécifiques à MacOS
REMARQUE
Le support de MacOS est, comme le support Windows, un meilleur effort et n'est pas officiellement pris en charge.
telegraf_mac_user
: Telegraf fonctionnera en tant que cet utilisateur (nécessaire car exécuter des choses en tant qu'autres utilisateurs avec brew est problématique).
Informations supplémentaires
Il y a deux propriétés similaires, mais utilisées différemment. Ce sont :
telegraf_plugins_default
telegraf_plugins_extra
telegraf_plugins_default
Avec la propriété telegraf_plugins_default
, il est défini pour utiliser le jeu par défaut des plugins Telegraf. Vous pouvez l'écraser avec plus de plugins, qui devraient être activés par défaut.
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
Chaque agent Telegraf a ceci comme configuration par défaut.
telegraf_plugins_extra
Le 2ème paramètre telegraf_plugins_extra
peut être utilisé pour ajouter des plugins spécifiques à l'objectif des serveurs. C'est un hachage au lieu d'une liste, ce qui vous permet de fusionner des valeurs de plusieurs fichiers de variables ensemble. Voici un exemple d'utilisation de ce paramètre pour les serveurs de base de données MySQL :
cat group_vars/mysql_database
telegraf_plugins_extra:
mysql:
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
Il existe une option pour supprimer les fichiers de plugins supplémentaires dans /etc/telegraf/telegraf.d s'ils n'ont pas été générés par ce playbook avec la variable telegraf_plugins_extra_exclusive
.
Options du plugin Telegraf :
tags
: Des tags k/v à appliquer aux mesures d'une entrée spécifique. Peut être utilisé à n'importe quelle étape pour un meilleur filtrage, par exemple dans les sorties.tagpass
: (ajouté dans Telegraf 0.1.5) noms de tags et tableaux de chaînes qui sont utilisés pour filtrer des métriques par le plugin actuel. Chaque chaîne dans le tableau est testée comme une correspondance exacte contre le nom du tag, et si cela correspond, la métrique est émise.tagdrop
: (ajouté dans Telegraf 0.1.5) L'inverse de tagpass. Si un tag correspond, la métrique n'est pas émise. Cela est testé sur les métriques qui ont passé le test tagpass.interval
: À quelle fréquence collecter cette métrique. Les plugins normaux utilisent un seul intervalle global, mais si un plugin particulier doit être exécuté moins ou plus souvent, vous pouvez le configurer ici.filter.name
: Comme lorsqu'il y a un filtre supplémentaire à configurer, commegrok
pour un pluginlogparser
.filter.config
: La configuration supplémentaire pour le - dans l'exemple defilter.name
- filtregrok
. (Voir l'exemple ci-dessous)sub_inputs
: Si l'entrée nécessite d'autres sous entrées, vous pouvez les ajouter ici (voir l'exemple ci-dessous).
Un exemple pourrait ressembler à ceci :
telegraf_plugins_default:
- plugin: disk
interval: 12
tags:
- diskmetrics = "true"
tagpass:
- fstype = [ "ext4", "xfs" ]
- path = [ "/opt", "/home" ]
Si vous souhaitez définir des processeurs, vous pouvez simplement utiliser la variable telegraf_processors
. Un exemple pourrait ressembler à ceci :
telegraf_processors:
- processor: rename
- processor: rename.replace
config:
- tag = "level"
- dest = "LogLevel"
Lorsque vous souhaitez utiliser le filtre grok
pour le logparser :
telegraf_plugins_extra:
logparser:
plugin: logparser
config:
- files = ["/var/log/messages"]
- from_beginning = false
filter:
name: grok
config:
- patterns = ["invoked oom-killer"]
Lorsque vous souhaitez inclure des sous-entrées avec leur propre configuration :
sqs:
plugin: cloudwatch
config:
- region = "eu-west-1"
- access_key = "foo"
- secret_key = "bar"
- period = "1m"
- delay = "2m"
- interval = "1m"
- namespace = "AWS/SQS"
- statistic_include = ["average"]
sub_inputs:
metrics:
- names = [
"ApproximateAgeOfOldestMessage",
"ApproximateNumberOfMessagesVisible",
]
metrics.dimensions:
- name = "QueueName"
- value = "*"
Dépendances
Aucune dépendance
Exemple de Playbook
- hosts: serveurs
roles:
- { role: dj-wasabi.telegraf }
Molecule
Ce rôle est configuré pour être testé avec Molecule. Vous pouvez trouver sur cette page plus d'informations concernant Molecule : https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/
Licence
BSD
Informations sur l'auteur
Veuillez me faire savoir si vous avez des problèmes. Les Pull requests sont également acceptées ! :-)
mail : ikben [ at ] werner-dijkerman . nl
ansible-galaxy install dj-wasabi.telegraf