coopdevs.monitoring_role
Rola monitorowania 
Rola Ansible do utrzymywania narzędzi monitorowania ekosystemu Grafana.
Używa Dockera do instalacji eksporterów Prometheusa i Lokiego:
nodeexporter
: eksporter Prometheusa, który zbiera dane o stanie hosta.postgresexporter
: eksporter Prometheusa, który monitoruje stan serwera PostgreSQL.promtail
: główny eksporter dla Lokiego, serwera logów podobnego do Prometheusa i współpracującego z Grafana.
Ta rola wspiera niektóre aplikacje z ich domyślnym formatem logowania:
Dodatkowo wspiera niestandardowego eksportera, który expose aktywnych użytkowników w systemie.
Korzystanie z tej roli
Publiczne zmienne
NodeExporter
# defaults/main.yaml
monitoring_nexporter_enabled: true
monitoring_nexporter_host: 127.0.0.1
monitoring_nexporter_port: 9100
monitoring_nexporter_docker_bind: "127.0.0.1:127.0.0.1:9100"
monitoring_nexporter_container_name: nexporter
monitoring_nexporter_image_version: latest
PostgresqlExporter
monitoring_postgres_exporter_enabled: true
monitoring_postgres_exporter_pg_user: "monitor_user"
Promtail
# defaults/main.yaml
monitoring_promtail_enabled: true
monitoring_promtail_host: 127.0.0.1
monitoring_promtail_port: 9080
monitoring_promtail_docker_bind: "127.0.0.1:127.0.0.1:9080"
monitoring_promtail_container_name: promtail
monitoring_promtail_image_version: latest
monitoring_promtail_modules_enabled:
- "app2"
monitoring_promtail_modules_available:
app1:
log_path: "/var/log/app1/error.log"
template: "app1.j2"
app2:
log_path: "/opt/app2/log/app2.log"
template: "app2.j2"
monitoring_promtail_config_dir: "/etc/promtail"
monitoring_promtail_config_filename: "config.yml"
Aktywni użytkownicy
monitoring_users_enabled: true
monitoring_users_host: 127.0.0.1
monitoring_users_port: 9839
monitoring_users_endpoint: "/metrics"
monitoring_users_prefix: "what"
monitoring_users_with_timestamp: false
monitoring_users_scrape_interval: 5000
Zmienne poufne
Promtail
monitoring_loki_user: "1234"
monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
monitoring_loki_hostname: "logs-somewhere.grafana.net"
PostgresqlExporter
monitoring_postgres_exporter_pg_password: "3%hyZ&toNZ#Xn74"
monitoring_postgres_exporter_pg_port: "3456"
Przykłady playbooków
Odoo z promtail
# playbooks/odoo-promtail.yml
---
- name: Zainstaluj Odoo z monitorowaniem logów
hosts: servers
become: yes
roles:
- role: coopdevs.odoo_role
- role: coopdevs.monitoring_role
vars:
monitoring_nexporter_enabled: false
monitoring_promtail_enabled: true
monitoring_promtail_modules_enabled: [ "odoo" ]
monitoring_loki_user: "1234"
monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
monitoring_loki_hostname: "logs-somewhere.grafana.net"
PostgreSQL z metrykami systemu
# playbooks/postgres-nexporter.yml
---
- name: Zainstaluj serwer bazy danych z ujawnionymi metrykami systemu
hosts: servers
become: yes
roles:
- role: geerlingguy.postgresql
- role: coopdevs.monitoring_role
vars:
monitoring_nexporter_enabled: true
monitoring_promtail_enabled: false
Bezpieczeństwo
Ta rola udostępnia wiele danych przez serwer HTTP, które mogą być potencjalnie wykorzystane. Domyślnie, nasłuchuje na adresie lokalnym, niedostępnym z internetu.
Jednakże, prawdopodobnie chcesz, aby zewnętrzny serwer Prometheus pobierał te dane okresowo. W tym celu, i aby chronić dane, potrzebna jest pewnego rodzaju autoryzacja serwera Prometheus do hosta.
Jednym z podejść jest pozostawienie eksporterów przylegających do localhost, a następnie skonfigurowanie odwrotnego proxy przed nimi z autoryzacją podstawową, używając Nginx. Zarządzanie tą konfiguracją i kluczami w tym zakresie jest poza zakresem tej roli.
Rozszerzenie
Eksporter prometheusa
Aby dodać nowego eksportera prometheusa:
- Skopiuj sekcję
defaults/main.yml
z Node Exportera do tego samego pliku i zmień wszystkie terminynexporter
na swoje, na przykład,someexporter
. - Skopiuj sekcję
templates/monitoring-docker-compose.yml.j2
z Node Exportera i ponownie, zmień nazwę i dostosuj do swoich potrzeb. - Dostosuj
meta/main.yml
: dodaj tag, zmień opis jeśli to konieczne. - Zaktualizuj
README.md
.
Moduł promtail dla nowej aplikacji
Aby dodać kompatybilność dla aplikacji, która nie jest jeszcze obsługiwana, zrób:
- Zadeklaruj ją w
monitoring_promtail_modules_available
. Ścieżka logów zależy od aplikacji, nazwę szablonu ustalasz tutaj. - Skopiuj
templates/promtail-config-apps/odoo-role.j2
do tej samej lokalizacji, ale z nazwą plikunew-app.j2
. - Edytuj szablon w zależności od aplikacji. Zobacz oficjalną dokumentację.
- Możesz przetestować regex na regexr w trybie "serwera" lub regex101.com. Umieść komentarz z kilkoma wpisami logów dla jasności, to pomoże przyszłym czytelnikom regex.
- Ustaw etap
labels
, aby określić, które etykiety są eksportowane do Lokiego spośród wszystkich zebranych. - Ustaw etap
timestamp
, aby oznaczyć linię logu rzeczywistym czasem, a nie czasem, w którym promtail ją zebrał.- Włącz milisekundy tylko jeśli to możliwe. Golang rozumie tylko kropkę '.' jako separator dziesiętny. Jeśli Twoja aplikacja używa ',', nie działa. Zobacz problem golanga #6189.
- Dodaj strefę czasową albo przez parsowanie, jak w
backups-role.j2
, albo ręcznie, jak wodoo-role.j2
.
- Opcjonalnie, dodaj etap
match
, jeśli chcesz odrzucić wpisy, które nie pasują do Twojego regex.
Install Prometheus and Loki exporters to monitor your project instances
ansible-galaxy install coopdevs.monitoring_role