Files
ansible-playbooks/roles/monitoring/README.md
T
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

186 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](../../README.md).
## 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
```yaml
- hosts: all
become: true
user: admin
roles:
- role: monitoring
```
```bash
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:
```bash
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`).