dj-wasabi.telegraf
dj-wasabi.telegraf
- dj-wasabi.telegraf
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. Wenntelegraf_agent_package_state
auflatest
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
oderzypper
("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. Wenntelegraf_agent_package_method
aufonline
oderoffline
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
oderonline
gewählt werden.telegraf_agent_package_state
: Ob das Paketpresent
oderlatest
sein soll. Wenn auflatest
gesetzt, wirdtelegraf_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: Truetelegraf_agent_flush_interval
: Standard-Datenleerausgabeintervall für alle Ausgaben. Standard: 10telegraf_agent_flush_jitter
: Jittert das Leeren des Intervalls um einen zufälligen Betrag. Standard: 0telegraf_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ürtelegraf_agent_version
angegeben wurde. Kann auflatest
gesetzt werden, um das tatsächlichelatest
-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
telegraf_zypper_baseurl
: Die URL zum openSUSE-Repository, das Telegraf hostet (z.B. für openSUSE Leap: "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Leap_{{ ansible_distribution_version }}/"). Wenn dies nicht angegeben ist, wird ein Standard-Repository verwendet.
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, wiegrok
für einlogparser
-Plugin.filter.config
: Die zusätzliche Konfiguration für den - im Beispielfilter.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
ansible-galaxy install dj-wasabi.telegraf