dj-wasabi.telegraf
dj-wasabi.telegraf
- dj-wasabi.telegraf
Status kompilacji:
Ta rola zainstaluje i skonfiguruje Telegraf.
Telegraf to agent napisany w Go, który zbiera metryki z systemu, na którym działa, lub z innych usług i zapisuje je w InfluxDB.
Celem projektu jest minimalizacja zużycia pamięci oraz system pluginów, aby programiści mogli łatwo dodawać obsługę zbierania metryk z popularnych usług (jak Hadoop, Postgres czy Redis) i interfejsów API innych firm (jak Mailchimp, AWS CloudWatch czy Google Analytics).
(https://github.com/influxdb/telegraf)
Wymagania
Obsługiwane systemy
Ta rola obsługuje następujące systemy:
- Red Hat
- Debian
- Ubuntu
- Kontener Docker
- (Open)Suse
- Windows (na zasadzie najlepszego wysiłku)
- FreeBSD (na zasadzie najlepszego wysiłku)
- Archlinux (tylko tryb "online")
Potrzebujesz więc jednego z tych systemów. :-) Zachęcam do przesyłania Pull Requestów lub sugestii, jeśli chcesz używać tej roli w innych systemach.
InfluxDB
Potrzebujesz instancji InfluxDB działającej gdzieś w swojej sieci. Lub jednego z innych typów wyjściowych, które znajdziesz na https://github.com/influxdata/telegraf/#output-plugins
Docker
Docker musi być zainstalowany na docelowym hoście. Mogę polecić te role do instalacji Dockera:
To dotyczy tylko sytuacji, gdy konfiguracja jest potrzebna dla Telegraf w kontenerze Docker (gdy telegraf_agent_docker: True
).
Aktualizacja
0.7.0
Wystąpił problem:
Jeśli skonfiguruję telegraf_plugins_extra, uruchomię ansible, usunę plugin i uruchomię ansible ponownie, plugin pozostaje na maszynie.
Zmienne roli
Zmienne specyficzne dla roli Ansible
Określenie wersji do zainstalowania:
telegraf_agent_version
: Wersja Telegraf do zainstalowania. Jeślitelegraf_agent_package_state
jest ustawione nalatest
, ta właściwość i wartość są ignorowane. Domyślnie:1.10.0
Jak zainstalować Telegraf
. Istnieją cztery metody instalacji Telegraf
na docelowym hoście:
- Przez menedżera pakietów, takiego jak
yum
,apt
lubzypper
("repo"); - Poprzez pobranie z strony
https://dl.influxdata.com/
("online"); - Już dostarczony i dostępny na docelowym hoście, ale nie jeszcze zainstalowany/skonfigurowany ("offline");
- Już zainstalowany na docelowym hoście lub zrobiony ręcznie, ale nie jeszcze skonfigurowany ("manual");
Można to skonfigurować, ustawiając telegraf_agent_package_method
na jedną z odpowiednich wartości (repo
, online
, offline
lub manual
).
Pakiet Telegraf
Te właściwości określają, jak i jaki pakiet zostanie zainstalowany.
telegraf_agent_package
: Nazwa pakietu Telegraf do zainstalowania. Gdytelegraf_agent_package_method
jest ustawione naonline
luboffline
, musi zawierać pełną ścieżkę do pliku. Przykład:telegraf_agent_package: /tmp/telegraf.rpm
. Domyślnie:telegraf_agent_package: telegraf
.telegraf_agent_package_method
: Metoda instalacji, która ma być używana. Można wybrać między:repo
,offline
lubonline
.telegraf_agent_package_state
: Czy pakiet powinien byćpresent
czylatest
. Gdy ustawione nalatest
,telegraf_agent_version
zostanie zignorowane. Domyślnie:present
Konfiguracja procesu agenta Telegraf.
telegraf_agent_interval
: Interwał skonfigurowany do wysyłania danych do serwera. Domyślnie:10
telegraf_agent_debug
: Uruchom Telegraf w trybie debugowania. Domyślnie:False
telegraf_agent_round_interval
: Zaokrągla interwał zbierania do 'interval'. Domyślnie: Truetelegraf_agent_flush_interval
: Domyślny interwał opróżniania danych dla wszystkich wyjść. Domyślnie: 10telegraf_agent_flush_jitter
: Dodaje losowy czas do interwału opróżniania. Domyślnie: 0telegraf_agent_aws_tags
: Konfiguruje tagi AWS ec2 w sekcji tagów Telegraf. Domyślnie:False
telegraf_agent_aws_tags_prefix
: Określa prefiks dla tagów AWS ec2. Domyślnie:""
telegraf_agent_collection_jitter
: Dodaje losowy czas do zbierania. Domyślnie: 0 (od v0.13)telegraf_agent_metric_batch_size
: Rozmiar wsadu metryk agenta. Domyślnie: 1000 (od v0.13)telegraf_agent_metric_buffer_limit
: Limit bufora metryk agenta. Domyślnie: 10000 (od v0.13)telegraf_agent_quiet
: Uruchom Telegraf w trybie cichym (tylko wiadomości o błędach). Domyślnie:False
(od v0.13)telegraf_agent_logfile
: Nazwa pliku dziennika agenta. Domyślnie: '' (oznacza logowanie do stdout) (od v1.1)telegraf_agent_hostname
: Nazwa hosta agenta. Domyślnie:ansible_fqdn
telegraf_agent_omit_hostname
: Nie ustawiaj tagu "host" w agencie. Domyślnie:False
(od v1.1)
Zmienne roli specyficzne dla Dockera:
telegraf_agent_docker
: Zainstaluj Telegraf jako kontener dockera. Domyślnie:False
telegraf_agent_docker_name
: Nazwa kontenera dockera. Domyślnie:telegraf
telegraf_agent_docker_network_mode
: Tryb sieciowy kontenera dockera. Domyślnie:bridge
telegraf_agent_docker_restart_policy
: Polityka ponownego uruchamiania kontenera dockera. Domyślnie:unless-stopped
telegraf_agent_docker_image_version
: Wersja obrazu Telegraf w Dockerze do użycia. Domyślnie zawiera wartość podaną dlatelegraf_agent_version
. Może być ustawiona nalatest
, aby uzyskać aktualny taglatest
dla podanego obrazu Dockera.telegraf_uid_docker
: Nadpisuje identyfikator użytkownika. Domyślnie:995
telegraf_gid_docker
: Nadpisuje identyfikator grupy. Domyślnie:998
Pełna dokumentacja ustawień agenta: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration.
Dodatkowe informacje
problem z ansible_fqdn przy uzyskiwaniu hostname
Dodatkowe informacje dotyczące: problemu z ansible_fqdn przy uzyskiwaniu hostname #105
Opisz błąd
Na niektórych węzłach otrzymuję dziwne nazwy hostów, głównie localhost.localdomain. Te węzły pokazują poprawną konfigurację w hostnamectl. Zauważyłem, że używasz 'ansible_fqdn' jako domyślnej.
Okazuje się, że ansible_fqdn i ansible_hostname mogą dawać różne wyniki, a czasami nawet bardzo dziwne wyniki, ponieważ czasami wykonuje wywołania DNS (co nie jest pod moją kontrolą w takich przypadkach), aby określić te nazwy.
Propozycja naprawy
W moim playbooku dodałem ten parametr:
telegraf_agent_hostname: "{{ ansible_nodename }}"
Ustawianie tagów
Możesz ustawić tagi dla hosta uruchamiającego Telegraf:
telegraf_global_tags:
- tag_name: some_name
tag_value: some_value
Określając wyjście. Domyślnie ustawione jest na localhost, musisz określić poprawny serwer influxdb:
telegraf_agent_output:
- type: influxdb
config:
- urls = ["http://localhost:8086"]
- database = "telegraf"
tagpass:
- cpu = ["cpu0"]
Konfiguracja będzie wydrukowana linia po linii, więc możesz również użyć:
config:
- # Wydrukuj linię dokumentującą
i zostanie to wydrukowane w pliku konfiguracyjnym.
Szczegóły dotyczące Dockera
Obraz Dockera
Używany jest oficjalny Obraz Influxdata Telegraf. telegraf_agent_version
będzie tłumaczyć się na tag obrazu.
Montaże Dockera
Proszę zauważyć, że kontener Dockera montuje zasadniczo cały twój system (tylko do odczytu), aby monitorować hosta silnika Dockera z wnętrza kontenera. Dokładnie:
- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro
Więcej informacji: https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md.
Przykład konfiguracji Dockera
telegraf_agent_docker: True
# Wymusza tryb sieciowy hosta, aby można było zbierać metryki ruchu hosta silnika Docker.
telegraf_agent_docker_network_mode: host
# Wymusza użycie konkretnego tagu obrazu.
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"
Zmienne specyficzne dla Windows
UWAGA
Wsparcie dla Windows jest realizowane na zasadzie najlepszego wysiłku (nie mam możliwości testowania/weryfikowania zmian na różnych dostępnych instancjach Windows). Pull requesty specyficzne dla Windows są niemal natychmiast akceptowane, chyba że ktoś może zaoferować mechanizm testowy Windows przy pomocy Travis lub innej usługi dla Pull Requestów.
telegraf_win_install_dir
: Katalog, w którym Telegraf będzie zainstalowany.telegraf_win_logfile
: Lokalizacja pliku dziennika Telegraf.telegraf_win_include
: Katalog, który będzie zawierał całą konfigurację pluginów.
Zmienne specyficzne dla openSUSE
telegraf_zypper_baseurl
: URL do repozytorium openSUSE, które hostuje Telegraf (na przykład, dla openSUSE Leap: "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Leap_{{ ansible_distribution_version }}/"). Jeśli to nie zostanie określone, użyte zostanie domyślne repozytorium.
Zmienne specyficzne dla MacOS
UWAGA
Wsparcie dla MacOS jest, podobnie jak wsparcie dla Windows, realizowane na zasadzie najlepszego wysiłku i nie jest oficjalnie wspierane.
telegraf_mac_user
: Telegraf będzie działać jako ten użytkownik (potrzebny, ponieważ uruchamianie rzeczy jako inne użytkowniki przy użyciu brew jest problematyczne).
Dodatkowe informacje
Istnieją dwie właściwości, które są podobne, ale używane w różnych celach. Są to:
telegraf_plugins_default
telegraf_plugins_extra
telegraf_plugins_default
Za pomocą właściwości telegraf_plugins_default
ustala się korzystanie z domyślnego zestawu wtyczek Telegraf. Możesz to nadpisać dodatkowymi wtyczkami, które powinny być włączone domyślnie.
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
Każdy agent Telegraf ma te wartości jako domyślną konfigurację.
telegraf_plugins_extra
Z kolei drugi parametr telegraf_plugins_extra
może być używany do dodawania wtyczek specyficznych dla celu serwera. Jest to hasz, a nie lista, dzięki czemu można łączyć wartości z wielu plików z zmiennymi. Oto przykład użycia tego parametru dla serwerów baz danych MySQL:
cat group_vars/mysql_database
telegraf_plugins_extra:
mysql:
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
Istnieje opcja usunięcia plików z dodatkowymi wtyczkami w /etc/telegraf/telegraf.d, jeśli nie zostały wygenerowane przez ten playbook za pomocą zmiennej telegraf_plugins_extra_exclusive
.
Opcje pluginu Telegraf:
tags
: Parowanie k/v tagów do zastosowania w pomiarach konkretnego inputu. Może być używane na każdym etapie dla lepszego filtrowania, na przykład w wyjściach.tagpass
: (dodane w Telegraf 0.1.5) nazwy tagów i tablice ciągów, które są używane do filtrowania metryk przez dany plugin. Każdy ciąg w tablicy jest testowany jako dokładne dopasowanie do nazwy tagu, a jeśli pasuje, metryka jest emitowana.tagdrop
: (dodane w Telegraf 0.1.5) Przeciwieństwo tagpass. Jeśli tag pasuje, metryka nie jest emitowana. To jest testowane na metrykach, które przeszły test tagpass.interval
: Jak często zbierać tę metrykę. Normalne wtyczki używają jednego globalnego interwału, ale jeśli jedna konkretna wtyczka powinna być uruchamiana rzadziej lub częściej, można to skonfigurować tutaj.filter.name
: Jak gdyby istniał dodatkowy filtr, który należy skonfigurować, na przykładgrok
dla wtyczkilogparser
.filter.config
: Dodatkowa konfiguracja dla - w przykładziefilter.name
- filtrugrok
. (Zobacz przykład poniżej)sub_inputs
: Jeśli input wymaga innych sub-inputy, można je dodać tutaj (zobacz przykład poniżej).
Przykład mógłby wyglądać tak:
telegraf_plugins_default:
- plugin: disk
interval: 12
tags:
- diskmetrics = "true"
tagpass:
- fstype = [ "ext4", "xfs" ]
- path = [ "/opt", "/home" ]
Jeśli chcesz zdefiniować procesory, możesz po prostu użyć zmiennej telegraf_processors
.
Przykład mógłby wyglądać tak:
telegraf_processors:
- processor: rename
- processor: rename.replace
config:
- tag = "level"
- dest = "LogLevel"
Kiedy chcesz skorzystać z filtru grok
do logparser
:
telegraf_plugins_extra:
logparser:
plugin: logparser
config:
- files = ["/var/log/messages"]
- from_beginning = false
filter:
name: grok
config:
- patterns = ["invoked oom-killer"]
Gdy chcesz dołączyć sub-inputy ze swoją własną konfiguracją:
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 = "*"
Zależności
Brak zależności
Przykładowy Playbook
- hosts: servers
roles:
- { role: dj-wasabi.telegraf }
Molecule
Ta rola jest skonfigurowana do testowania z Molecule. Możesz znaleźć więcej informacji na ten temat na tej stronie: https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/
Licencja
BSD
Informacje o autorze
Daj mi znać, jeśli masz jakiekolwiek problemy. Pull requesty są również akceptowane! :-)
mail: ikben [ at ] werner-dijkerman . nl
ansible-galaxy install dj-wasabi.telegraf