coopdevs.monitoring_role
Monitoring Rolle 
Eine Ansible-Rolle zur Wartung der Überwachungstools des Grafana-Ökosystems.
Verwendet Docker, um Prometheus- und Loki-Exporter zu installieren:
nodeexporter
: Prometheus-Exporter, der allgemeine Daten über den Zustand eines Hosts sammelt.postgresexporter
: Prometheus-Exporter, der den Zustand des PostgreSQL-Servers überwacht.promtail
: der Haupt-Exporter für Loki, einen Log-Server, der ähnlich wie Prometheus ist und mit Grafana kompatibel ist.
Diese Rolle unterstützt einige Anwendungen mit ihrem Standard-Protokollformat:
Zusätzlich unterstützt sie einen benutzerdefinierten Exporter, der die aktiven Benutzer im System anzeigt.
Verwendung dieser Rolle
Öffentliche Variablen
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"
Aktive Benutzer
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
Geheime Variablen
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"
Beispiel-Playbooks
Odoo mit Promtail
# playbooks/odoo-promtail.yml
---
- name: Installiere Odoo mit Protokollüberwachung
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 mit Systemmetriken
# playbooks/postgres-nexporter.yml
---
- name: Installiere einen Datenbankserver mit offengelegte Systemmetriken
hosts: servers
become: yes
roles:
- role: geerlingguy.postgresql
- role: coopdevs.monitoring_role
vars:
monitoring_nexporter_enabled: true
monitoring_promtail_enabled: false
Sicherheit
Diese Rolle gibt über einen HTTP-Server viele Daten preis, die potenziell ausgenutzt werden können. Standardmäßig hört sie auf eine Loopback-Adresse, die nicht öffentlich im Internet zugänglich ist.
Dennoch möchten Sie wahrscheinlich, dass ein externer Prometheus-Server diese Daten regelmäßig abruft. Zu diesem Zweck ist eine Art Authentifizierung des Prometheus-Servers gegen den Host erforderlich.
Ein Ansatz ist es, die Exporter an localhost zu binden und dann einen Reverse Proxy mit Basis-Authentifizierung, z. B. mit Nginx, davor einzurichten. Die Verwaltung dieser Einrichtung und der damit verbundenen Schlüssel liegt außerhalb des Rahmens dieser Rolle.
Erweiterung
Ein Prometheus-Exporter
Um einen neuen Prometheus-Exporter hinzuzufügen:
- Kopiere den Abschnitt
defaults/main.yml
vom Node Exporter in dieselbe Datei und ändere allenexporter
-Begriffe in deinen, z. B.someexporter
- Kopiere den Abschnitt
templates/monitoring-docker-compose.yml.j2
des Node Exporters und benenne ihn um und passe ihn an deine Bedürfnisse an. - Passe
meta/main.yml
an: füge ein Tag hinzu, ändere die Beschreibung bei Bedarf. - Aktualisiere
README.md
Ein Promtail-Modul für eine neue App
Um die Unterstützung für eine App hinzuzufügen, die noch nicht unterstützt wird, tue Folgendes:
- Deklariere sie bei
monitoring_promtail_modules_available
. Der Log-Pfad hängt von der App ab, der Name der Vorlage, den du hier entscheidest. - Kopiere die
templates/promtail-config-apps/odoo-role.j2
in dasselbe Verzeichnis, aber benenne sie innew-app.j2
um. - Bearbeite die Vorlage entsprechend deiner App. Überprüfe die offiziellen Dokumente.
- Du kannst den Regex bei regexr im "Servermodus" oder regex101.com testen. Füge einen Kommentar mit einigen Log-Einträgen zur besseren Verständlichkeit hinzu, das hilft zukünftigen Lesern des Regex.
- Setze die
labels
-Stufe, um festzulegen, welche Labels an Loki übertragen werden, unter all den gesammelten. - Setze die
timestamp
-Stufe, um die Protokollzeile mit der tatsächlichen Zeit anstelle der Zeit, die Promtail sie abgerufen hat, zu stempeln.- Füge Millisekunden nur hinzu, wenn möglich. Golang versteht nur den Punkt '.' als Dezimaltrennzeichen. Wenn deine App ',' verwendet, funktioniert das nicht. Siehe das Golang-Problem #6189
- Füge die Zeitzone entweder durch das Parsen wie im
backups-role.j2
oder manuell wie imodoo-role.j2
hinzu.
- Optional kannst du eine
match
-Stufe hinzufügen, wenn du Einträge ausschließen möchtest, die nicht deinem Regex entsprechen.
Install Prometheus and Loki exporters to monitor your project instances
ansible-galaxy install coopdevs.monitoring_role