mesaguy.prometheus

Ansible Prometheus

Testy w kuchni Walidacja Ansible Testy awesome_bot Najświeższy tag Ansible Galaxy Licencja MIT

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:

  1. Instaluje narzędzia niezbędne do kompilacji binariów
  2. Kompiluje binaria
  3. 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

Zainstaluj
ansible-galaxy install mesaguy.prometheus
Licencja
mit
Pobrania
303.3k
Właściciel