mesaguy.prometheus
Ansible Prometheus
Instaluje i zarządza serwerem Prometheus, Alertmanagerem, PushGateway oraz wieloma eksporterami Prometheus.
Ta rola została zaprojektowana, aby umożliwić łatwe dodawanie nowych eksporterów. Regularne wydania zapewniają, że zawsze oferuje najnowsze oprogramowanie Prometheus.
Ta rola może automatycznie rejestrować eksporterów klienckich w serwerze Prometheus (patrz zarządzanie grupami tgroup poniżej).
Wymagania
- Ansible >= 2.8.0
- Fakty muszą być zbierane (gather_facts: true)
Obsługiwane oprogramowanie i systemy operacyjne
Obsługiwane systemy operacyjne, dystrybucje i architektury
Ten moduł ma na celu wspieranie jak największej liczby dystrybucji i architektur. Poniższa tabela określa, które kombinacje są obecnie testowane. Większość eksporterów będzie również działać na architekturach ARM:
OS | Wydanie | Architektury |
---|---|---|
Alpine | 3.2 do 3.11, edge | x86_64 (amd64) |
AmazonLinux | 1 i 2 | x86_64 (amd64) |
ArchLinux | Bieżąca | x86_64 (amd64) |
Enterprise Linux | 6, 7, 8 | x86_64 (amd64) |
Fedora | 20 do 31, rawhide | x86_64 (amd64) |
Gentoo (openrc) | Bieżąca | x86_64 (amd64) |
Gentoo (systemd) | Bieżąca | x86_64 (amd64) |
OpenSUSE | 13.1 do tumbleweed | x86_64 (amd64) |
Oracle Linux | 6, 7, 8 | x86_64 (amd64) |
Ubuntu | 16.04 do 20.04 | x86_64 (amd64) |
Obsługiwane oprogramowanie Prometheus
Poniższe podstawowe oprogramowanie Prometheus jest obsługiwane oprócz listy eksporterów poniżej. Oprogramowanie to jest w pełni testowane we wszystkich obsługiwanych systemach operacyjnych, dystrybucjach i architekturach.
Oprogramowanie Prometheus | Użycie | Autor | CI testowane |
---|---|---|---|
prometheus | użycie | prometheus | Tak |
alertmanager | użycie | prometheus | Tak |
push_gateway | użycie | prometheus | Tak |
Obsługiwani eksporterzy
Wszystkie eksportery są zweryfikowane pod kątem instalacji. Aktualnie niektóre moduły są testowane za pomocą CI (Integracja Ciągła) oraz Inspec.
Zobacz stronę użycia każdego eksportera dla większych szczegółów:
Eksporter | Użycie | Autor | CI testowane |
---|---|---|---|
389ds_exporter_terrycain | użycie | terrycain | Tak |
apache_exporter_lusitaniae | użycie | Lusitaniae | Tak |
aerospike_exporter_alicebob | użycie | alicebob | Tak |
... | ... | ... | ... |
Obsługiwane skrypty tekstowe node_exporter
Obsługiwanych jest wiele skryptów tekstowych node_exporter, które można zainstalować za pomocą poniższych zmiennych. Te skrypty są instalowane domyślnie pod '/opt/prometheus/scripts':
Skrypt tekstowy node_exporter | Źródło | Zmienna aktywacji |
---|---|---|
apt.sh | Przykłady node_exporter | prometheus_script_apt: true |
... | ... | ... |
Zmienne roli
Zmienna tablicowa 'prometheus_components' jest używana do określenia oprogramowania Prometheus do zainstalowania. Ten przykład instaluje wszystkie obsługiwane компонencje prometheus:
# Przykład tylko. Klienci powinni mieć zdefiniowane tylko odpowiednie oprogramowanie i eksporterów:
prometheus_components:
# Komponenty podstawowe:
- alertmanager
- prometheus
- push_gateway
# Eksporterzy
- 389ds_exporter_terrycain
- apache_exporter_lusitaniae
- aerospike_exporter_alicebob
- bigip_exporter_expressenab
- bind_exporter_prometheus_community
-...
Dokumentacja skryptów Mesaguy
- promcron do monitorowania wykonywania zadań cron
- promrun do monitorowania wykonywania poleceń
- sssd_check do monitorowania statusu SSSD
Ogólne zmienne
Z domyślnymi ustawieniami, jeśli instalacja binarna oprogramowania Prometheus lub eksportera nie powiodła się, instalacja również nie powiedzie się. Ta domyślna opcja może być nadpisana, powodując instalację ze źródła, ustawiając globalną zmienną 'prometheus_fallback_to_build' lub nadpisując specyficzne oprogramowanie. Na przykład, aby pozwolić eksporterowi blackbox na budowę ze źródła, jeśli żaden binarny plik nie może zostać znaleziony, ustaw:
prometheus_blackbox_exporter_fallback_to_build: true
Wszystkie zadania instalacji demona mają parametr 'runas', aby określić, jako który użytkownik będzie działał demon. Domyślnie wszystkie użytkownicy działają jako 'prometheus_user' (domyślnie: prometheus). Na przykład, aby eksportery blackbox działały jako użytkownik 'test', ustaw następującą zmienną:
prometheus_blackbox_exporter_runas: test
Globalne zmienne
Połącz katalog etc Prometheus z '/etc/prometheus'. Katalog etc Prometheus domyślnie znajduje się w '/opt/prometheus/etc':
prometheus_link_etc: true
Spróbuj wymusić symlink katalogu etc, o którym mowa:
prometheus_link_etc_force: false
Zainstaluj narzędzie 'sponge'. Zalecane przez projekt Prometheus podczas zapisywania w katalogu tekstowym node_exportera. Wymagane jest repozytorium EPEL, jeśli instalujesz na pochodnej Red Hat Enterprise Linux.
prometheus_install_sponge: false
Ostatnie wersje oprogramowania są czyszczone:
prometheus_purge_orphans: false
Wyczyść kopie zapasowe plików konfiguracyjnych prometheus z katalogu 'etc' po 'prometheus_etc_backup_max_age' dniach (domyślnie: 31d). Opcja 'prometheus_etc_purge_backups' domyślnie jest 'false':
prometheus_etc_purge_backups: true
prometheus_etc_backup_max_age: 31d
Root directory do zainstalowania oprogramowania Prometheus:
prometheus_root_dir: '/opt/prometheus'
Testuj każdy port usługi po zainstalowaniu i uruchomieniu każdej usługi:
prometheus_test_service_port: true
Zarządzaj użytkownikiem i grupą 'prometheus':
prometheus_manage_group: true
prometheus_manage_user: true
Nazwa usługi i grupy Prometheus:
prometheus_group: prometheus
prometheus_user: prometheus
Utwórz użytkownika i grupę Prometheus jako konta systemowe, domyślnie 'false':
prometheus_group_is_system: true
prometheus_user_is_system: true
Skomponuj limity dla użytkownika 'prometheus':
prometheus_configure_ulimits: false
prometheus_ulimit_hard_nofile: 8192
prometheus_ulimit_soft_nofile: 4096
Jeśli instalacja binarna aplikacji Prometheus nie powiodła się, przejdź do instalacji oprogramowania Prometheus za pomocą źródła. Instalacja z źródła zazwyczaj wymaga zainstalowania kompilatorów. Możliwe jest również umożliwienie 'fallback_to_build' w przypadku każdego przypadku (np.: prometheus_blackbox_exporter_fallback_to_build: true):
prometheus_fallback_to_build: false
Wersja go do użycia przy budowie oprogramowania Prometheus:
prometheus_go_version: 1.13.10
Katalog etc Prometheus, domyślnie '/opt/prometheus/etc':
prometheus_etc_dir: "{{ prometheus_root_dir }}/etc"
Katalog główny, w którym instalowane są eksporterzy, domyślnie '/opt/prometheus/exporters':
prometheus_exporters_dir: "{{ prometheus_root_dir }}/exporters"
Katalog główny, w którym zainstalowany jest 'go'. Go jest instalowane tylko wtedy, gdy oprogramowanie Prometheus jest instalowane z kodu źródłowego. Domyślnie '/opt/prometheus/go':
prometheus_go_dir: "{{ prometheus_root_dir }}/go"
Katalog, w którym tworzone są logi. Systemy korzystające z journalctl zazwyczaj będą logować do journalctl zamiast do plików:
prometheus_log_dir: "/var/log/prometheus"
Katalog do wykorzystania jako przestrzeń tymczasowa, głównie przy budowie oprogramowania Prometheus. Domyślnie '/opt/prometheus/tmp':
prometheus_tmp_dir: "{{ prometheus_root_dir }}/tmp"
Katalog do przechowywania trwałych danych Prometheus (tj. danych serwera Prometheus), domyślnie '/opt/prometheus/var':
prometheus_var_dir: "{{ prometheus_root_dir }}/var"
Opcjonalnie wyłącz symlink aplikacji narzędzi (amtool, promtool, itp.) do /usr/local/bin. Domyślnie 'true':
prometheus_symlink_tools: false
Buforuj pobrane oprogramowanie na hoście Ansible i przesyłaj buforowane oprogramowanie na zdalne hosty, które Ansible jest konfigurujący. Domyślnie wyłączone przez 'false':
prometheus_local_archive: true
prometheus_local_archive_dir: ../archive/prometheus
Zmienne zarządzania regułami Prometheus
Włącz zarządzanie 'regułami' Prometheus:
prometheus_manage_rules: true
Lokalna lokalizacja do znalezienia plików reguł, domyślnie pusta (wyłączona):
prometheus_rules_source_dirs:
- ../files/prometheus/rules
- ../files/prometheus/additional_rules
Własność i uprawnienia plików reguł, domyślnie:
prometheus_rules_dir_mode: 0755
prometheus_rules_file_mode: 0644
prometheus_rules_group: '{{ prometheus_group }}' # prometheus
prometheus_rules_owner: '{{ prometheus_user }}' # prometheus
Wyczyść kopie zapasowe plików reguł po 'prometheus_rules_backup_max_age' dniach (domyślnie 90d). Opcja 'prometheus_rules_purge_backups' domyślnie jest 'false':
prometheus_rules_purge_backups: true
prometheus_rules_backup_max_age: 90d
Wyczyść niewykorzystane (osierocone) zasady z serwerów Prometheus. Domyślnie 'false':
prometheus_rules_purge_orphans: true
Zmienne rotacji logów Prometheus
Rotacja logów jest domyślnie wyłączona, ale może być skonfigurowana za pomocą poniższych zmiennych. Rotacja logów jest konfigurowana dla wszystkich plików .log w katalogu logu Prometheus (tj. /var/log/prometheus/.log).
Zezwól na zainstalowanie skryptu rotacji logów prometheus. Domyślnie 'false':
prometheus_logrotate: true
Liczba rotowanych logów (dni), które mają być zachowane:
prometheus_logrotate_count: 31
Boolean określający, czy logi mają być kompresowane:
prometheus_logrotate_compress: true
Katalog pliku konfiguracyjnego rotacji logów:
prometheus_logrotate_dir: /etc/logrotate.d
Zmienne klienta Prometheus
Spowoduj, że wszystkie serwery Prometheus zdefiniowane w tablicy/zestawie zmiennych 'prometheus_servers' zweryfikują łączność z każdym z eksportowanych klientów:
prometheus_software_server_side_connect_test: true
Skonfiguruj reguły firewalld, aby zezwolić adresom IP serwerów zdefiniowanym w tablicy/zestawie zmiennych 'prometheus_server_ips' na połączenie z każdym z eksporterów klientów. Aby ta funkcjonalność działała, wymagana jest zainstalowanie modułu 'netaddr' w Pythonie (czyli yum install -y python-netaddr
lub dnf install -y python-netaddr
lub pip install netaddr
). Włącz tę zmienną tylko na serwerach, które korzystają z firewalld, w przeciwnym razie zadanie się nie powiedzie:
prometheus_manage_client_firewalld: true
# Opcjonalnie ustawić:
prometheus_firewalld_zone: public
Jeśli wymagana jest personalizacja firewalld, można dodać reguły firewalld przy użyciu skryptu:
- name: Zezwól przychodzącym połączeniom serwera prometheus z node_exporter
become: true
firewalld:
immediate: true
port: 9100/tcp
permanent: true
source: "{{ item }}"
state: enabled
zone: public
with_items: "{{ prometheus_server_ips }}"
when: uses_firewalld is defined and 'node_exporter' in prometheus_components
Skonfiguruj reguły iptables, aby zezwolić adresom IP serwerów zdefiniowanym w tablicy/zestawie zmiennych 'prometheus_server_ips' na połączenie z każdym z eksportowanych klientów. Włącz tę zmienną tylko na serwerach, które korzystają z iptables, w przeciwnym razie zadanie się nie powiedzie:
prometheus_manage_client_iptables: true
Jeśli iptables_raw został zainstalowany, możesz włączyć następującą zmienną:
prometheus_manage_client_iptables_raw: true
Ta rola może zarządzać grupami celów serwera Prometheus automatycznie, dynamicznie tworząc pliki tgroup w określonym katalogu (/opt/prometheus/etc/tgroups domyślnie) dla każdego eksportera klienta.
Automatyczne zarządzanie plikiem tgroup można włączyć dla operacji po stronie klienta, operacji po stronie serwera lub obu. W trybie klienta eksporterzy klientów są automatycznie rejestrowani na serwerze Prometheus określonym w tablicy 'prometheus_servers'. W trybie serwera inwentaryzacja jest analizowana, aby określić, które eksportery są dostępne na każdym hoście i wszystkie klienci są rejestrowani z serwerami określonymi w tablicy 'prometheus_servers' każdego klienta.
W domyślnych ustawieniach grupy tgroup klienta i serwera używają wartości 'inventory_hostname' (fqdn) i 'inventory_hostname_short' (hostname) dla serwerów fqdn/hostname i ignorują fakty. Dzieje się tak, ponieważ populacja grup tgroup po stronie serwera nie może uwzględniać faktów klientów, chyba że klienci są skonfigurowani do cache'owania swoich faktów. Aby używać zmiennych 'ansible_fqdn' (fqdn) i 'ansible_hostname' (hostname) opartej na faktach, włącz 'prometheus_tgroup_use_facts'. W tej chwili, włączenie 'prometheus_tgroup_use_facts' dla jakichkolwiek klientów wyłącza zarządzanie tgroup po stronie serwera:
prometheus_tgroup_use_facts: true
Aby włączyć automatyczne generowanie plików tgroup po stronie klienta, musisz zdefiniować 'prometheus_manage_client_tgroups' jako true i wymienić swoich serwery Prometheus w zmiennej 'prometheus_servers' w swoich zmiennych Ansible lub inwentaryzacji. Następujące polecenie utworzy pliki tgroup w /opt/prometheus/etc/ansible_tgroups:
prometheus_manage_client_tgroups: true
prometheus_servers:
- 'prometheus1'
- 'prometheus2'
# Opcjonalnie, domyślnie to /opt/prometheus/etc/tgroups:
prometheus_managed_tgroup_dir: '/opt/prometheus/etc/ansible_tgroups'
Jeśli ta rola zarządza Twoimi plikami tgroup, możesz zastosować etykiety do eksportera/y używając zmiennej 'prometheus_tgroup_labels':
- hosts: prometheus_clients
vars:
prometheus_components:
- node_exporter
prometheus_tgroup_labels:
environment: development
site: primary
roles:
- mesaguy.prometheus
Używanie 'set_fact', aby zrobić to samo:
- name: Ustaw etykiety Prometheus dla hosta set_fact: prometheus_tgroup_labels: environment: 'development' site: primary
Eksporterzy, którzy nie są zarządzani przez tę rolę, mogą zostać określeni przy użyciu zmiennej 'prometheus_additional_exporters' w następujący sposób. Jakiekolwiek etykiety określone w 'prometheus_tgroup_labels' zostaną połączone z etykietami zdefiniowanymi w 'prometheus_additional_exporters'. Zasady zapory zostaną utworzone dla dodatkowych eksporterów, jeśli zdefiniowano 'prometheus_manage_client_firewalld' lub 'prometheus_manage_client_iptables'.
prometheus_additional_exporters:
- name: docker
port: 9323
labels: {}
- name: foo
port: 9999
labels:
team: foo
department: IT
Aby włączyć automatyczne generowanie plików tgroup po stronie serwera, musisz zdefiniować 'prometheus_manage_server_tgroups' jako true i wymienić swoje serwery Prometheus w zmiennej 'prometheus_servers' w swoich zmiennych Ansible lub inwentaryzacji. Następujące polecenie utworzy pliki tgroup w /opt/prometheus/etc/ansible_tgroups dla wszystkich klientów, którzy mają 'prometheus_components' i/lub 'prometheus_additional_exporters', klienci muszą również mieć zdefiniowaną tablicę 'prometheus_servers':
prometheus_manage_server_tgroups: true
Aby skonfigurować tylko tgroup serwera i nie wykonywać żadnych zadań roli, włącz 'prometheus_manage_server_tgroups_only':
- hosts: prometheus_servers
vars:
prometheus_manage_server_tgroups_only: true
roles:
- mesaguy.prometheus
Wyczyść niewykorzystane (osierocone) eksportery. Gdy działa w trybie klienta, ta opcja dotyczy tylko osieroconych plików klientów. Gdy działa w trybie serwera, dotyczy wszystkich plików tgroup:
prometheus_tgroup_dir_purge_orphans: true
Określ FQDN dla hosta, gdy FQDN nie znajduje się w inwentarzu Ansible i nie jest oficjalnym FQDN hosta. Ta opcja powinna być ogólnie unikana, lepiej naprawić DNS lub inwentarz Ansible:
prometheus_override_fqdn: weird-hostname.example.org
Konfiguracja serwera Prometheus
Aby włączyć serwer prometheus, dołącz zadanie roli: prometheus
Pliki konfiguracyjne są walidowane za pomocą 'promtool' przed restarowaniem Prometheusa.
Treść konfiguracji. Poniższy przykład wykorzystuje plik o nazwie 'prometheus_server.yml' w katalogu głównym Twojego Ansible w katalogu 'files'. Jeśli nie zdefiniujesz treści konfiguracji, wykorzystany zostanie domyślny plik konfiguracyjny. Będziesz chciał dostosować treść swojego pliku konfiguracyjnego!:
prometheus_server_cfg: '{{ lookup("file", "../files/prometheus_server.yml") | from_yaml }}'
Lub osadzając YAML bezpośrednio w swoim playbooku:
prometheus_server_cfg:
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
Tablica dodatkowych flag, które można przekazać do demona prometheus:
prometheus_extra_opts: []
Wersja Prometheus do zainstalowania. Domyślna wersja znajduje się w pliku zmiennych prometheus i może być nadpisana przy użyciu następującej zmiennej:
prometheus_version: "v1.0.0"
Zezwól na użycie wersji wstępnych (beta, testowe, wersje rozwojowe, itp.), domyślnie 'false':
prometheus_use_prerelease: true
Gdzie przechowywać bazę danych Prometheus, domyślnie /opt/prometheus/var/prometheus
prometheus_storage_dir: /opt/prometheus/var/prometheus
Szablony konsol internetowych Prometheus do wykorzystania. Domyślne wystarczają w większości przypadków i ta zmienna powinna pozostać nieustawiona w większości przypadków:
prometheus_web_console_libraries_dir: /opt/prometheus/prometheus/x.x.x/console_libraries
prometheus_web_console_templates_dir: /opt/prometheus/prometheus/x.x.x/consoles
Port i IP, na którym nasłuchiwać. Domyślnie nasłuchuje na wszystkich dostępnych IP na porcie 9090:
prometheus_host: "0.0.0.0"
prometheus_port: 9090
Przykładowy playbook
Serwer Prometheus
Następujący przykład instaluje Prometheus (serwer), alertmanager, blackbox_exporter i node_exporter. Port serwera Prometheus i parametry retencji danych zostały zmienione z domyślnych.
Serwer Prometheus powinien być zainstalowany tylko na wyznaczonych hostach serwera Prometheus. Klienci Prometheus powinni mieć zainstalowane tylko wybrane i konkretne eksportery.
Metoda użycia klasy:
- hosts: prometheus_servers
vars:
prometheus_components:
- prometheus
- alertmanager
- blackbox_exporter
- node_exporter
prometheus_port: 10000
prometheus_extra_opts:
- '--storage.tsdb.retention=90d'
roles:
- mesaguy.prometheus
Dłuższa metoda użycia 'include_role':
- hosts: prometheus_servers
vars:
prometheus_port: 10000
prometheus_extra_opts:
- '--storage.tsdb.retention=90d'
tasks:
- name: Serwer Prometheus
include_role:
name: mesaguy.prometheus
tasks_from: '{{ prometheus_component }}'
loop_control:
loop_var: prometheus_component
with_items:
- prometheus
- alertmanager
- blackbox_exporter
- node_exporter
Dodatkowe informacje
Metody instalacji oprogramowania
Instalacje realizowane są przy użyciu prekompilowanych plików binarnych, gdzie tylko możliwe. Gdy prekompilowane binarki nie są dostępne, ta rola Ansible:
- Instaluje narzędzia niezbędne do kompilacji binariów
- Kompiluje binaria
- Instaluje binaria w katalogu, określając zarówno wersję oprogramowania Prometheus, jak i wersję go wykorzystywanego do instalacji (cz. /opt/prometheus/exporters/smokeping_exporter_superq/v0.3.1__go-1.14.14/smokeping_prober)
Jeśli nie uda się zainstalować lub dostępność binarnych plików, moduł Prometheus zostanie zainstalowany przy użyciu kodu źródłowego.
Bezpieczeństwo
Ten moduł nie zarządza regułami zapory, nie stosuje https ani nie używa uwierzytelniania, aby zabezpieczyć oprogramowanie Prometheus. Wszystkie te środki bezpieczeństwa są wartościowe, ale obecnie znajdują się poza zakresem tej roli.
Ściśle monitorujemy wydania nowego oprogramowania Prometheus, jak również kompilatora Go, i w razie potrzeby wydajemy nowe wersje tej roli Ansible.
Wszystkie demony działają domyślnie za pomocą nieuprzywilejowanego użytkownika 'prometheus'.
Gdy oprogramowanie Prometheus jest instalowane przy użyciu kodu źródłowego, katalog miejsca docelowego instalacji jest nazywany na podstawie zarówno wersji oprogramowania Prometheus, jak i wersji kompilatora Go. Konwencja nazewnicza zapewnia, że korzystanie z nowszych wersji kompilatora Go wymusza odbudowę modułów Prometheus zbudowanych z kodu źródłowego. Ta konwencja nazewnicza również rozróżnia instalacje według binariów i instalacji według kodu źródłowego. Wymuszanie odbudowy Prometheus z kodu źródłowego za każdym razem, gdy nowe wersje Go są wydawane, ma negatywny wpływ na obciążenie klientów, ale ma zaletę zapewnienia, że wszelkie luki w zabezpieczeniach w bibliotece core Go są naprawiane. Przyjmujemy, że oprogramowanie Prometheus, które jest dostarczane w formie binarnej, jest monitorowane przez dewelopera pod kątem luk w zabezpieczeniach i budowane ponownie w razie potrzeby.
Przyszłość: Gdy kod źródłowy jest kompilowany, wszystkie komendy kompilacji są wykonywane przy użyciu konta użytkownika bez uprawnień. To w połączeniu z uruchamianiem demonów jako użytkownik bez uprawnień niweluje wiele ryzyk bezpieczeństwa. -- To jest obecnie skomplikowane przez ograniczenia z become
Licencja
MIT Zobacz plik LICENSE
Informacje o autorze
Mesaguy
install and manage prometheus and prometheus exporters
ansible-galaxy install mesaguy.prometheus