Audit-Log
Der Audit-Log beantwortet die typische Compliance-Frage „Wer hat wann was geändert?" – und ist auch im Alltag praktisch, wenn die Frage „Warum sieht die Zone heute anders aus als gestern?" auf den Tisch kommt.
Was geloggt wird
Im Prinzip jede schreibende Aktion am DNS-Bestand und an sicherheitsrelevanten Settings. Die action-Werte aus dem Code:
| Bereich | Aktionen |
|---|---|
| Zonen | CREATE, UPDATE, DELETE, IMPORT, NOTIFY |
| Records | CREATE, UPDATE, DELETE, BULK_UPDATE |
| DNSSEC | DNSSEC_ENABLE, DNSSEC_DISABLE, KEY_ACTIVATE, KEY_DEACTIVATE, KEY_DELETE |
| Settings | REVEAL_API_KEY (PowerDNS-API-Key wurde abgerufen), Server-CRUD, SMTP-/Captcha-/Welcome-Updates. |
| ACME | ACME_PRESENT, ACME_CLEANUP – jede Challenge wird geloggt. |
Eine Zeile im Detail
Im Panel unter Audit-Log (Admin-only) siehst du alle Einträge tabellarisch, mit Filtern für Aktion, Resource-Typ und Server. Eine Zeile als JSON (so kommt sie aus GET /api/v1/audit-log):
{
"id": 4711,
"timestamp": "2026-04-27T14:23:01.456Z",
"action": "UPDATE",
"resource_type": "RECORD",
"resource_name": "www.example.com. A",
"server_name": "master-fra1",
"user_id": 17,
"details": {
"old": [{"content": "203.0.113.10", "ttl": 300}],
"new": [{"content": "203.0.113.20", "ttl": 60}],
"fan_out": [
{"server": "master-fra1", "status": "ok"},
{"server": "master-ams1", "status": "ok"}
]
},
"status": "success",
"error_message": null
} Die wichtigsten Felder:
action+resource_type+resource_name– „was hat sich geändert".user_id– wer war es.server_name– auf welchem PowerDNS-Server.details– frei strukturiertes JSON, je nach Aktionstyp.status–successodererror; beierrorsteht inerror_messagedie Klartext-Meldung.
Filtern
Die Tabelle filtert sich live; im Hintergrund landen die Filter als Query-Params an der API:
GET /api/v1/audit-log
?action=DELETE # nur Löschungen
&resource_type=RECORD # nur Records (oder ZONE / DNSSEC / SETTING / USER)
&server_name=master-fra1 # nur dieser Server
&limit=50&offset=0 CSV-Export
Im Audit-Log gibt es einen CSV exportieren-Button (Endpoint: GET /api/v1/audit-log/export). Format:
- Trennzeichen: Semikolon (
;) – damit Excel den File ohne „Spalten aufteilen"-Wizard öffnet. - UTF-8 mit BOM – damit Umlaute auch in Excel sauber dastehen.
- Per Default Filter wie in der UI;
max_rowsbegrenzt den Export.
curl -OJ \
-H "Authorization: Bearer dnsmgr_usr_..." \
"https://pdns.example.com/api/v1/audit-log/export?action=DELETE&max_rows=10000" Aufbewahrung
Der PDNS Manager rotiert das Audit-Log nicht automatisch. Wer das DSGVO-konform haben will, fügt entweder einen Cron auf der DB hinzu, der ältere Einträge löscht, oder zieht den Log per Webhook zu einem zentralen Log-Server (siehe Webhooks).