dj-wasabi.telegraf

dj-wasabi.telegraf

Build-Status:

Build-Status

Diese Rolle installiert und konfiguriert Telegraf.

Telegraf ist ein Agent, der in Go geschrieben wurde, um Metriken vom System, auf dem er läuft, oder von anderen Diensten zu sammeln und in InfluxDB zu schreiben.

Das Ziel ist es, einen geringen Speicherverbrauch mit einem Pluginsystem zu haben, damit Entwickler in der Community leicht Unterstützung für das Sammeln von Metriken aus bekannten Diensten (wie Hadoop, Postgres oder Redis) und von Drittanbieter-APIs (wie Mailchimp, AWS CloudWatch oder Google Analytics) hinzufügen können.

(https://github.com/influxdb/telegraf)

Voraussetzungen

Unterstützte Systeme

Diese Rolle unterstützt die folgenden Systeme:

  • Red Hat
  • Debian
  • Ubuntu
  • Docker-Container
  • (Open)Suse
  • Windows (Best Effort)
  • FreeBSD (Best Effort)
  • Archlinux (nur "Online"-Modus)

Sie benötigen eines dieser Systeme.. :-) Bitte senden Sie Pull-Requests oder Vorschläge, wenn Sie diese Rolle für andere Systeme verwenden möchten.

InfluxDB

Sie benötigen eine InfluxDB-Instanz, die irgendwo in Ihrem Netzwerk läuft. Oder 1 der anderen Ausgabetypen, die auf https://github.com/influxdata/telegraf/#output-plugins zu finden sind.

Docker

Docker muss auf dem Zielhost installiert sein. Ich kann diese Rollen empfehlen, um Docker zu installieren:

Dies gilt nur, wenn die Konfiguration für Telegraf innerhalb eines Docker-Containers benötigt wird (Wenn telegraf_agent_docker: True).

Update

0.7.0

Es gab ein Problem:

Wenn ich telegraf_plugins_extra konfiguriere, Ansible ausführe, das Plugin lösche und Ansible erneut ausführe, bleibt das Plugin auf der Maschine.

Rollenvariablen

Spezifische Variablen für die Ansible-Rolle

Version, die installiert werden soll:

  • telegraf_agent_version: Die Version von Telegraf, die installiert werden soll. Wenn telegraf_agent_package_state auf latest gesetzt ist, wird diese Eigenschaft und ihr Wert ignoriert. Standard: 1.10.0

Wie Telegraf installiert werden soll. Es gibt 4 Methoden, um Telegraf auf dem Zielhost zu installieren:

  • Über den Paketmanager, wie yum, apt oder zypper ("Repo");
  • Über einen Download von der https://dl.influxdata.com/ Seite ("Online");
  • Bereits bereitgestellt und bereits auf dem Zielhost verfügbar, aber noch nicht installiert/konfiguriert ("Offline");
  • Bereitgestellt auf dem Zielhost oder manuell erledigt, aber noch nicht konfiguriert ("Manuell");

Dies kann konfiguriert werden, indem telegraf_agent_package_method auf einen der entsprechenden Werte ( repo, online, offline oder manual) gesetzt wird.

Telegraf-Paket

Diese Parameter legen fest, wie und welches Paket installiert wird.

  • telegraf_agent_package: Der Name des Telegraf-Pakets, das installiert werden soll. Wenn telegraf_agent_package_method auf online oder offline gesetzt ist, muss der vollständige Pfad zur Datei angegeben werden. Beispiel: telegraf_agent_package: /tmp/telegraf.rpm. Standard: telegraf_agent_package: telegraf.
  • telegraf_agent_package_method: Die verwendete Installationsmethode. Kann zwischen: repo, offline oder online gewählt werden.
  • telegraf_agent_package_state: Ob das Paket present oder latest sein soll. Wenn auf latest gesetzt, wird telegraf_agent_version ignoriert. Standard: present

Konfiguration des Telegraf-Agentenprozesses

  • telegraf_agent_interval: Das Intervall, das für das Senden von Daten an den Server konfiguriert ist. Standard: 10
  • telegraf_agent_debug: Telegraf im Debug-Modus ausführen. Standard: False
  • telegraf_agent_round_interval: Rundet das Erfassungsintervall auf 'Intervall'. Standard: True
  • telegraf_agent_flush_interval: Standard-Datenleerausgabeintervall für alle Ausgaben. Standard: 10
  • telegraf_agent_flush_jitter: Jittert das Leeren des Intervalls um einen zufälligen Betrag. Standard: 0
  • telegraf_agent_aws_tags: AWS-EC2-Tags in den Telegraf-Tags konfigurieren. Standard: False
  • telegraf_agent_aws_tags_prefix: definiert ein Präfix für AWS-EC2-Tags. Standard: ""
  • telegraf_agent_collection_jitter: Jittert die Sammlung um einen zufälligen Betrag. Standard: 0 (seit v0.13)
  • telegraf_agent_metric_batch_size: Die Batchgröße der Agentenmetriken. Standard: 1000 (seit v0.13)
  • telegraf_agent_metric_buffer_limit: Das Limit für den Metrikpuffer des Agenten. Standard: 10000 (seit v0.13)
  • telegraf_agent_quiet: Telegraf im ruhigen Modus ausführen (nur Fehlermeldungen). Standard: False (seit v0.13)
  • telegraf_agent_logfile: Der Name der Log-Datei des Agenten. Standard: '' (bedeutet, dass in stdout geloggt wird) (seit v1.1)
  • telegraf_agent_hostname: Der Hostname des Agenten. Standard: ansible_fqdn
  • telegraf_agent_omit_hostname: Setzt nicht das "host"-Tag im Agenten. Standard: False (seit v1.1)

Spezifische Variablen für Docker:

  • telegraf_agent_docker: Telegraf als Docker-Container installieren. Standard: False
  • telegraf_agent_docker_name: Name des Docker-Containers. Standard: telegraf
  • telegraf_agent_docker_network_mode: Netzwerkmodus des Docker-Containers. Standard: bridge
  • telegraf_agent_docker_restart_policy: Neustartpolitik des Docker-Containers. Standard: unless-stopped
  • telegraf_agent_docker_image_version: Die Version des Docker-Telegraf-Images, die verwendet werden soll. Standardwert enthält den Wert, der für telegraf_agent_version angegeben wurde. Kann auf latest gesetzt werden, um das tatsächliche latest-Tag für das bereitgestellte Docker-Image zu erhalten.
  • telegraf_uid_docker: Benutzer-ID überschreiben. Standard: 995
  • telegraf_gid_docker: Gruppen-ID überschreiben. Standard: 998

Vollständiger Referenz zu den Agenteneinstellungen: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration.

Zusätzliche Informationen

ansible_fqdn problematisch für Hostnamen

Zusätzliche Informationen zu: ansible_fqdn problematisch für Hostnamen #105

Beschreiben Sie den Fehler

In einigen Knoten erhalte ich seltsame Hostnamen, meist localhost.localdomain. Diese Knoten zeigen eine ordnungsgemäße Konfiguration in hostnamectl. Ich habe gesehen, dass Sie 'ansible_fqdn' als Standard verwenden.

Es scheint, als könnten ansible_fqdn und ansible_hostname unterschiedliche Ergebnisse liefern, und manchmal sogar sehr merkwürdige Ergebnisse, da es manchmal DNS-Abfragen durchführt (was in diesen Fällen nicht unter meiner Kontrolle steht), um Namen abzuleiten.

Vorschlag zur Behebung

In meinem Playbook habe ich diesen Parameter hinzugefügt:

telegraf_agent_hostname: "{{ ansible_nodename }}"

Tags festlegen

Sie können Tags für den Host, der Telegraf ausführt, festlegen:

telegraf_global_tags:
  - tag_name: some_name
    tag_value: some_value

Ausgabe festlegen. Der Standard ist auf localhost gesetzt, Sie müssen den richtigen InfluxDB-Server angeben:

telegraf_agent_output:
  - type: influxdb
    config:
      - urls = ["http://localhost:8086"]
      - database = "telegraf"
    tagpass:
      - cpu = ["cpu0"]

Die Konfiguration wird zeilenweise in die Konfiguration gedruckt, sodass Sie auch Folgendes verwenden könnten:

config:
    - # Drucken einer Dokumentationszeile

und es wird in die Konfigurationsdatei gedruckt.

Docker-Spezifika

Docker-Image

Das offizielle Influxdata Telegraf-Image wird verwendet. telegraf_agent_version wird auf das Image-Tag übersetzt.

Docker-Mounts

Bitte beachten Sie, dass der Docker-Container im Grunde Ihr ganzes System (read-only) bindet, um den Docker-Engine-Host innerhalb des Containers zu überwachen. Genauer gesagt:

- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro

Weitere Informationen: https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md.

Beispiel für die Docker-Konfiguration

telegraf_agent_docker: True
# Erzwinge den Host-Netzwerkmodus, damit Metriken des Docker-Engine-Hostverkehrs gesammelt werden können.
telegraf_agent_docker_network_mode: host
# Erzwinge ein bestimmtes Image-Tag.
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"

Windows-spezifische Variablen

HINWEIS

Die Unterstützung für Windows erfolgt nach besten Kräften (ich habe nicht die Möglichkeit, Änderungen auf den verschiedenen verfügbaren Windows-Instanzen zu testen/verifizieren). PRs, die auf Windows spezifisch sind, werden nahezu sofort zusammengeführt, es sei denn, jemand kann einen Windows-Testmechanismus über Travis oder einen anderen Dienst für Pull Requests bereitstellen.

  • telegraf_win_install_dir: Das Verzeichnis, in dem Telegraf installiert wird.
  • telegraf_win_logfile: Der Speicherort der Log-Datei von Telegraf.
  • telegraf_win_include: Das Verzeichnis, das alle Plugin-Konfigurationen enthalten wird.

openSUSE-spezifische Variablen

MacOS-spezifische Variablen

HINWEIS

Die Unterstützung für MacOS erfolgt ebenfalls nach besten Kräften und ist nicht offiziell unterstützt.

  • telegraf_mac_user: Telegraf wird als dieser Benutzer ausgeführt (notwendig, da es problematisch ist, Dinge als andere Benutzer unter Verwendung von brew auszuführen).

Zusätzliche Informationen

Es gibt zwei Eigenschaften, die ähnlich sind, aber unterschiedlich verwendet werden. Das sind:

  • telegraf_plugins_default
  • telegraf_plugins_extra

telegraf_plugins_default

Mit der Eigenschaft telegraf_plugins_default wird das Standardset von Telegraf-Plugins verwendet. Sie können dies mit mehr Plugins überschreiben, die standardmäßig aktiviert sein sollten.

telegraf_plugins_default:
  - plugin: cpu
    config:
      - percpu = true
  - plugin: disk
  - plugin: io
  - plugin: mem
  - plugin: system
  - plugin: swap
  - plugin: netstat

Jeder Telegraf-Agent hat diese als Standardkonfiguration.

telegraf_plugins_extra

Der 2. Parameter telegraf_plugins_extra kann verwendet werden, um serverbezogene Plugins hinzuzufügen. Es handelt sich um einen Hash statt um eine Liste, sodass Sie Werte aus mehreren Var-Dateien zusammenführen können. Folgendes Beispiel zeigt die Verwendung dieses Parameters für MySQL-Datenbankserver:

cat group_vars/mysql_database
telegraf_plugins_extra:
  mysql:
    config:
      - servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]

Es gibt eine Option, die Dateien für zusätzliche Plugins in /etc/telegraf/telegraf.d zu löschen, wenn sie nicht mit der telegraf_plugins_extra_exclusive-Variablen durch dieses Playbook generiert wurden.

Telegraf-Pluginoptionen:

  • tags An k/v-Tags, die auf die Messungen eines spezifischen Eingangs angewendet werden. Kann in jedem Stadium zur besseren Filterung, z.B. in Ausgaben, verwendet werden.
  • tagpass: (hinzugefügt in Telegraf 0.1.5) Tag-Namen und Arrays von Strings, die verwendet werden, um Metriken nach dem aktuellen Plugin zu filtern. Jeder String im Array wird als exakte Übereinstimmung mit dem Tag-Namen getestet, und wenn er übereinstimmt, wird die Metrik ausgegeben.
  • tagdrop: (hinzugefügt in Telegraf 0.1.5) Das Gegenstück zu tagpass. Wenn ein Tag übereinstimmt, wird die Metrik nicht ausgegeben. Dies wird an Metriken getestet, die den tagpass-Test bestanden haben.
  • interval: Wie oft diese Metrik gesammelt werden soll. Normale Plugins verwenden ein einzelnes globales Intervall, aber wenn ein bestimmtes Plugin seltener oder häufiger ausgeführt werden soll, können Sie das hier konfigurieren.
  • filter.name: Wie wenn ein zusätzlicher Filter konfiguriert werden muss, wie grok für ein logparser-Plugin.
  • filter.config: Die zusätzliche Konfiguration für den - im Beispiel filter.name - grok-Filter. (Siehe Beispiel unten)
  • sub_inputs: Wenn der Eingang andere Teil-Eingänge benötigt, können Sie diese hier hinzufügen (siehe Beispiel unten).

Ein Beispiel könnte so aussehen:

telegraf_plugins_default:
  - plugin: disk
    interval: 12
    tags:
      - diskmetrics = "true"
    tagpass:
      - fstype = [ "ext4", "xfs" ]
      - path = [ "/opt", "/home" ]

Wenn Sie Bearbeiter definieren möchten, können Sie einfach die Variable telegraf_processors verwenden. Ein Beispiel könnte so aussehen:

telegraf_processors:
  - processor: rename
  - processor: rename.replace
    config:
        - tag = "level"
        - dest = "LogLevel"

Wenn Sie den grok-Filter für den Logparser verwenden möchten:

telegraf_plugins_extra:
    logparser:
    plugin: logparser
    config:
        - files = ["/var/log/messages"]
        - from_beginning = false
    filter:
        name: grok
        config:
        - patterns = ["invoked oom-killer"]

Wenn Sie zusätzliche Eingaben mit ihren eigenen Konfigurationen einschließen möchten:

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 = "*"

Abhängigkeiten

Keine Abhängigkeiten

Beispiel-Playbook

- hosts: servers
  roles:
     - { role: dj-wasabi.telegraf }

Molecule

Diese Rolle ist so konfiguriert, dass sie mit Molecule getestet wird. Sie können auf dieser Seite weitere Informationen über Molecule finden: https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/

Lizenz

BSD

Autor-Informationen

Bitte lassen Sie mich wissen, wenn Sie Probleme haben. Pull-Requests sind ebenfalls willkommen! :-)

mail: ikben [ at ] werner-dijkerman . nl

Über das Projekt

Installing and configuring Telegraf

Installieren
ansible-galaxy install dj-wasabi.telegraf
Lizenz
mit
Downloads
787.8k
Besitzer
DevOps Engineer, Technical reviewer Packt Pub / Manning / BPB Online / O'Reilly Media