Files
DerLinkman 30f3e9a4c6 rename dmc12 inventory to cloudlorean and vault admin_password
- replace inventory/dmc12.yml with cloudlorean.yml (+ group_vars) and update
  all README/AGENTS call examples and the inventory table
- move admin_password hash into encrypted vault.yml; remove plaintext copies
  from roles/bootstrap/defaults and group_vars/external.yml
- bootstrap.yml loads vault.yml via vars_files (same pattern as monitoring)
- monitoring: PSK config/registration updates, docker role defaults,
  os-updates logging/reboot refinements, ansible.cfg/execute.sh tweaks
- add .project-wiki knowledge base and .github agent instructions
2026-09-09 14:14:18 +02:00
..
2026-07-18 19:37:52 +00:00

Rolle monitoring

Installiert und konfiguriert den Zabbix Agent 2 auf Debian-Hosts, generiert/verteilt pro Host eine TLS-PSK, konfiguriert das Docker-Plugin (bei vorhandenem Socket) und registriert den Host über die Zabbix-API einschließlich Template-Verlinkung.

Siehe auch das Playbook playbooks/monitoring.yml sowie die Repo-README.

Voraussetzungen

  • Debian-Ziel-Host
  • Erreichbarer Zabbix-Server (API & Agent-Polling)
  • community.zabbix Collection
  • Vault-Secret monitoring_zabbix_api_password in vault.yml
  • OpenSSL auf dem Ansible-Controller (für PSK-Generierung)

Einbindung

- hosts: all
  become: true
  user: admin
  roles:
    - role: monitoring
ansible-playbook -i inventory/cloudlorean.yml --vault-password-file .vault_password \
  playbooks/monitoring.yml

Funktionsweise

tasks/main.yml importiert die Subtasks in folgender Reihenfolge (alle mit Tag monitoring):

  1. validate.yml – bricht bei Nicht-Debian ab, prüft dass monitoring_zabbix_passive_servers gesetzt ist und (bei aktivierter Registrierung) API-URL/-User/-Passwort vorliegen. Stellt sicher, dass bei gesetztem monitoring_zabbix_proxy auch eine Proxy-Adresse definiert ist.
  2. install-repository.yml – installiert ca-certificates, lädt das Zabbix-Release-Paket herunter, installiert es und aktualisiert den apt-Cache.
  3. install-agent.yml – installiert zabbix-agent2 und aktiviert/startet den Service.
  4. configure-docker.yml – prüft, ob der Docker-Socket existiert. Falls ja: Zabbix-User zur Docker-Gruppe hinzufügen, Plugin-Config-Verzeichnis anlegen, docker.conf aus Template ausliefern. Falls nein: Plugin-Config entfernen.
  5. configure-psk.yml – stellt PSK-Store auf dem Controller sicher (im Repository unter .zabbix-psk), generiert pro Host eine PSK mit openssl rand -hex, persistiert sie im Store und verteilt sie auf den Zielhost (/etc/zabbix/zabbix_agent2.psk, Mode 0600).
  6. configure-agent.yml – schreibt zabbix_agent2.conf aus Template.
  7. register-host.yml – registriert bzw. aktualisiert den Host über die Zabbix-API (community.zabbix.zabbix_host via httpapi-Connection). Verknüpft Standard-Templates und ggf. Docker-Templates. Wählt monitored_by: proxy bzw. zabbix_server anhand von monitoring_zabbix_proxy. Delegiert an localhost.

Variablen

Zabbix-Agent

Variable Typ Default Beschreibung
monitoring_zabbix_version string 7.0 Zabbix-Hauptversion
monitoring_zabbix_release_package string abgeleitet Dateiname des Release-Pakets
monitoring_zabbix_release_url string abgeleitet Download-URL des Release-Pakets
monitoring_zabbix_release_path string /tmp/<package> lokaler Ablagepfad auf dem Zielhost
monitoring_zabbix_agent_package string zabbix-agent2 Zu installierendes Agent-Paket
monitoring_zabbix_agent_service string zabbix-agent2 systemd-Service-Name
monitoring_zabbix_config_file string /etc/zabbix/zabbix_agent2.conf Pfad zur Agent-Konfiguration
monitoring_zabbix_agent_user string zabbix Benutzer, unter dem der Agent läuft
monitoring_zabbix_passive_servers list ["192.168.212.1"] Erlaubte Server für passive Checks (Server=)
monitoring_zabbix_active_servers list "" Server für aktive Checks (ServerActive=)
monitoring_zabbix_listen_port int 10050 Listen-Port des Agents

Docker-Plugin

Variable Typ Default Beschreibung
monitoring_zabbix_docker_group string docker Docker-Gruppe für Socket-Zugriff
monitoring_zabbix_docker_socket_path string /var/run/docker.sock Pfad zum Docker-Socket
monitoring_zabbix_docker_plugin_config_file string /etc/zabbix/zabbix_agent2.d/plugins.d/docker.conf Pfad zur Plugin-Config
monitoring_zabbix_docker_endpoint string unix://<socket> Docker-Endpoint für das Plugin

TLS / PSK

Variable Typ Default Beschreibung
monitoring_zabbix_tls_connect string psk TLS-Modus für ausgehende Verbindungen
monitoring_zabbix_tls_accept string psk TLS-Modus für eingehende Verbindungen
monitoring_zabbix_psk_identity string {{ monitoring_zabbix_host_name }} PSK-Identity; muss mit der in Zabbix registrierten Identity übereinstimmen
monitoring_zabbix_psk_file string /etc/zabbix/zabbix_agent2.psk Pfad zur PSK-Datei auf dem Zielhost
monitoring_zabbix_psk_bits int 256 PSK-Länge in Bits (32 Byte → 64 Hex-Chars)
monitoring_zabbix_psk_store string {{ role_path }}/../../.zabbix-psk PSK-Store-Verzeichnis auf dem Controller
monitoring_zabbix_psk_store_mode string 0700 Berechtigung des PSK-Stores

Zabbix Proxy (optional)

Variable Typ Default Beschreibung
monitoring_zabbix_proxy string "" Name des Proxys in Zabbix (leer = direkter Server-Modus)
monitoring_zabbix_proxy_address string "" IP/DNS des Proxys, den der Agent kontaktiert

Zabbix API / Host-Registrierung

Variable Typ Default Beschreibung
monitoring_zabbix_api_url string https://zabbix/api_jsonrpc.php API-URL (wird via urlsplit in Host, Port, Pfad zerlegt)
monitoring_zabbix_api_user string Admin API-Benutzer
monitoring_zabbix_api_password string (Vault) API-Passwort – MUSS in vault.yml gesetzt werden
monitoring_zabbix_api_validate_certs bool true TLS-Zertifikate prüfen
monitoring_zabbix_register_host bool true Host automatisch registrieren
monitoring_zabbix_host_name string {{ inventory_hostname }} Hostname in Zabbix
monitoring_zabbix_host_groups list ["Linux servers"] Zabbix-Host-Gruppen
monitoring_zabbix_host_interface_ip string {{ ansible_host }} Interface-IP
monitoring_zabbix_host_interface_port string {{ monitoring_zabbix_listen_port }} Interface-Port
monitoring_zabbix_host_inventory_mode string manual Inventory-Modus
monitoring_zabbix_templates list ["Linux by Zabbix agent", "Zabbix agent2"] Standard-Templates
monitoring_zabbix_docker_templates list ["Docker by Zabbix agent2"] Zusätzliche Templates bei vorhandenem Docker-Socket

Inventory-Overrides

In inventory/group_vars/home.yml werden u. a. überschrieben: monitoring_zabbix_passive_servers, monitoring_zabbix_active_servers, monitoring_zabbix_api_url, monitoring_zabbix_host_groups, monitoring_zabbix_templates, monitoring_zabbix_docker_templates, monitoring_zabbix_proxy, monitoring_zabbix_proxy_address.

Templates

Template Ziel
zabbix_agent2.conf.j2 /etc/zabbix/zabbix_agent2.conf
docker.conf.j2 /etc/zabbix/zabbix_agent2.d/plugins.d/docker.conf

zabbix_agent2.conf.j2 berücksichtigt Proxy-Konfiguration (vereinigt Passive-Servers mit Proxy-Adresse, setzt ServerActive auf Proxy).

Handler

Handler Auslöser
Restart Zabbix Agent Änderungen an Config, PSK oder Docker-Plugin

Tags

monitoring – alle Subtasks sind mit diesem Tag versehen:

ansible-playbook -i inventory/cloudlorean.yml playbooks/monitoring.yml -t monitoring

Abhängigkeiten

  • community.zabbix Collection (zabbix_host-Modul)
  • ansible.builtin (Bordmittel)
  • OpenSSL auf dem Controller (für PSK-Generierung)

Hinweise

  • PSK-Store: Pro Host wird eine PSK unter <Repository-Root>/.zabbix-psk/<hostname>.psk (git-ignored) gespeichert. Bei Host-Umbenennung PSK migrieren oder neu generieren – sonst stimmt die Zabbix-Registrierung nicht.
  • PSK-Identity: Die Agent-Konfiguration und die Zabbix-Hostkonfiguration verwenden dieselbe Identity. Wenn monitoring_zabbix_host_name überschrieben wird, wird die Identity standardmäßig automatisch daran angepasst.
  • API-Passwort MUSS in vault.yml als monitoring_zabbix_api_password gesetzt sein; die Validate-Tasks brechen sonst ab.
  • Docker-Plugin wird nur konfiguriert, wenn der Socket existiert – sonst wird eine eventuell vorhandene Plugin-Config entfernt (Idempotenz).
  • Die Registrierung nutzt die httpapi-Connection (ansible_network_os: community.zabbix.zabbix, ansible_connection: httpapi) und läuft direkt vom Controller aus – kein delegate_to nötig. Die API-URL wird per urlsplit in Host, Port, SSL und Pfad zerlegt; User/Passwort kommen als ansible_user/ansible_password in die Task-Vars.
  • Proxy- und Server-Modus werden über monitored_by gesteuert (proxy bei gesetztem monitoring_zabbix_proxy, sonst zabbix_server).