Monitoring psk (#2)
Co-authored-by: DerLinkman <derlinkman@gmail.com> Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
# 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/dmc12.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
|
||||
(`<playbook_dir>/../.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`). Verknüpft Standard-Templates
|
||||
und ggf. Docker-Templates. Unterscheidet zwischen Proxy- und
|
||||
Server-Modus (zwei Tasks, gegeneinander exklusiv). 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 | `{{ inventory_hostname }}` | PSK-Identity (hostname) |
|
||||
| `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 | `{{ playbook_dir }}/../.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 |
|
||||
| `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/dmc12.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
|
||||
`<playbook_dir>/../.zabbix-psk/<hostname>.psk` (git-ignored) gespeichert.
|
||||
Bei Host-Umbenennung PSK migrieren oder neu generieren – sonst stimmt die
|
||||
Zabbix-Registrierung nicht.
|
||||
- **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 wird **delegiert an localhost** ausgeführt, da der
|
||||
Controller den API-Zugang besitzt.
|
||||
- Proxy- und Server-Modus schließen sich gegenseitig aus (zwei Tasks mit
|
||||
entgegengesetzten `when`-Bedingungen).
|
||||
Reference in New Issue
Block a user