dj-wasabi.telegraf

dj-wasabi.telegraf

État de la construction :

É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. Si telegraf_agent_package_state est défini sur latest, 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 ou zypper ("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. Lorsque telegraf_agent_package_method est défini sur online ou offline, 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 ou online.
  • telegraf_agent_package_state: Si le package doit être présent ou latest. Lorsque défini sur latest, 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 : True
  • telegraf_agent_flush_interval: Intervalle de vidage des données par défaut pour toutes les sorties. Par défaut : 10
  • telegraf_agent_flush_jitter: Varie l'intervalle de vidage d'un montant aléatoire. Par défaut : 0
  • telegraf_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 pour telegraf_agent_version. Peut être définie sur latest pour obtenir le tag latest 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

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, comme grok pour un plugin logparser.
  • filter.config : La configuration supplémentaire pour le - dans l'exemple de filter.name - filtre grok. (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

À propos du projet

Installing and configuring Telegraf

Installer
ansible-galaxy install dj-wasabi.telegraf
Licence
mit
Téléchargements
787.8k
Propriétaire
DevOps Engineer, Technical reviewer Packt Pub / Manning / BPB Online / O'Reilly Media