BesluitBron 1.4.4-23 Status Anmelden

Protokollierung und Rechenschaftspflicht

Zuletzt geändert am .

Von jeder MCP-Anfrage wird protokolliert, was abgerufen wurde, wie lange es gedauert hat, wie viele Daten davon betroffen waren und woher sie stammten. Dieses Protokoll ist kein Nebenprodukt. Es ist der Grund dafür, dass eine Antwort im Nachhinein begründet werden kann.

Was wird festgehalten?

Pro Aufruf: die Adresse, über die der Zugriff erfolgte, den Namen des Tools, die Dauer des Aufrufs sowie die Dauer des Aufrufs zur Quellplattform separat, die Anzahl der Treffer, die Anzahl der abgerufenen Dokumente, die Größe in Byte und die gekürzte IP-Adresse des Anfragenden.

Ab Version 1.3.10 wird eine IP-Adresse gekürzt, bevor sie irgendwo gespeichert wird. Bei IPv4 entfallen die letzten 16 Bits, bei IPv6 bleibt nur der Anfang der 32 Bits übrig. Der verbleibende Teil bezeichnet ein Netzwerk und keinen Besucher. Eine E-Mail-Adresse, die in einer Aufzeichnung landet – beispielsweise, weil jemand danach gesucht hat –, wird durch einen nicht umkehrbaren Wert aus einem Bereich von 65.536 Möglichkeiten ersetzt. Dies gilt für das Protokoll, die Fehlertabelle, die Trace-Datei und die Meldung an einen externen Dienst. Bis zur Version 1.3.9 war die gesamte Adresse in diesen Protokollen enthalten; diese älteren Einträge bleiben unverändert bestehen und verschwinden automatisch nach Ablauf ihrer Aufbewahrungsfrist.

Ab Version 1.3.54 wird auch die vom Client angegebene Organisation erfasst. Ein Client kann bei jeder Anfrage den Header „x-organisation“ mitschicken, zum Beispiel x-organisation: Gemeente Delft. Dieser Header ist optional und wird nur gelegentlich übermittelt. Den darin enthaltenen Namen wählt der Client selbst aus, und niemand überprüft ihn. Der Header gewährt auch keine Rechte: Die MCP-Adressen kennen keine Authentifizierung, und ein Aufruf ohne Header wird genauso behandelt wie ein Aufruf mit Header. Der Name des Headers lautet genau „x-organisation“, mit einem „s“. Ein Header mit einem „z“ wird nicht gelesen; der Wert wird dann nirgendwo gespeichert und der Aufruf wird einfach fortgesetzt. Der Wert wird in eine Zeile gesetzt und nach 120 Zeichen abgeschnitten; anschließend wird er im Protokoll neben der Browser-Kennung angezeigt. Diese beiden Angaben haben unterschiedliche Bedeutungen: Die Browser-Kennung gibt an, welches Programm den Aufruf getätigt hat, die Organisation gibt an, für wen. Wo der Wert zu sehen ist, ist unter Opvragingen, Overzicht und Dashboard zu finden.

Zwei Dinge werden bewusst nicht gekürzt: die Browserbezeichnung, da diese ein Programm und keine Person beschreibt, sowie der Benutzername bei einem Fehler, da es sich dabei um ein Konto dieser Installation handelt.

Nicht erfasst: der Inhalt des Gesprächs zwischen dem Nutzer und dem Assistenten. Dieser Inhalt gelangt nicht zu BesluitBron. Was BesluitBron sieht, ist der Aufruf des Assistenten mit den dabei übermittelten Parametern.

Wo man es sehen kann

Der Datenverkehr des Assistenten läuft über das Anforderungsprotokoll:

flowchart TD
    X["ToolExecutor"] --> L["McpRequestLog"]
    L --> J[("Tabelle „bbn_mcp_log“<br/>in der Datenbank")]
    L --> RB["Ringpuffer<br/>im Gedächtnis"]
    J --> LOGP["Logbuchseite<br/>pro Anschluss"]
    J --> ANA["Analyse<br/>pro Werkzeug"]
    RB --> HUB["SignalR"] --> DASH["Dashboard<br/>live"]
    RB --> TOOL["list_platform_calls<br/>für den Assistenten"]

Was der Server selbst tut, läuft über einen zweiten Weg:

flowchart TD
    S["Der Server selbst"] --> TJ[("Trace-Datei<br/>eine Datei pro Tag")]
    TJ --> TRP["Trace-Seite<br/>zum Lesen und Herunterladen"]

Vier Eingänge, jeder für eine andere Frage:

  • list_platform_calls beantwortet die Frage „Worauf basiert diese Antwort?“. Der Assistent kann dies während des Gesprächs selbst abfragen;
  • Die Protokollseite der Verwaltungskonsole gibt Auskunft darüber, „was in den letzten Tagen abgefragt wurde“, und lässt sich nach Konnektoren filtern;
  • Das Dashboard gibt Auskunft darüber, „was gerade passiert“, und zeigt die Anrufe an, sobald sie eingehen;
  • Die Trace-Seite gibt Aufschluss darüber, „was der Server tatsächlich getan hat“. Diese Seite zeigt nicht nur den Aufruf des Assistenten an, sondern auch jeden Aufruf einer dahinterliegenden Quellplattform – live oder aus dem Puffer – sowie jeden Fehler mit seiner Abfolge.

Die ersten drei beziehen sich auf den Datenverkehr des Assistenten. Der Trace bezieht sich auf das Verhalten des Dienstes. Der Trace ist somit der Ausgangspunkt, wenn ein Tool eine falsche Antwort geliefert hat und das Anforderungsprotokoll keine Erklärung dafür liefert. Die Trace-Datei kann als Ganzes heruntergeladen werden und wird dabei nicht gefiltert, da ein Trace, der unterwegs bearbeitet wurde, keinen Beweischarakter mehr hat.

Fehlermeldungen

Meldungen tragen einen Code in der Form „bbn<gebied><nummer>“, zum Beispiel „bbnsrv005“ für eine Konfiguration, bei der alle Quellen ausgeschaltet waren. Diese Codes sind unveränderlich. Sie sind dazu gedacht, in einer Meldung an den Administrator oder in einer Anfrage an den Lieferanten angegeben zu werden, und werden nicht neu nummeriert.

Die Feldnamen in der Trace-Datei und die Spaltennamen des Anfrageprotokolls sind aus demselben Grund festgelegt. Bestehende Trace-Dateien, alte Protokolldateien und die dazugehörigen Übersichten basieren darauf.

Ab 1.3.58 wird für jeden Fehler eine Zeile in der Trace-Datei erstellt, zusammen mit dem Code „bbnerr005“ und der Anfrage-ID. Bis zur Version 1.3.57 wurde dort nur dann eine Zeile erstellt, wenn das Speichern des Fehlers selbst fehlschlug; bei einer Störung in der Datenbank gab es also keine Einträge. Die Schwereklasse richtet sich nach der Art des Fehlers: „Error“ bei einem 5xx-Fehler, „Warning“ bei einem 4xx-Fehler und „Debug“ bei einer Anfrage, die als Angriff eingestuft wurde. Siehe Trace.

Speichern

Das Protokoll befindet sich in der Tabelle „bbn_mcp_log“. Dazu ist eine Datenbank erforderlich, und ab Version 1.3.73 gibt es keine Wahl mehr: Eine Installation ohne Datenbank startet nicht und meldet beim Start, was fehlt. Bis einschließlich Version 1.3.72 war auch eine Installation ohne Datenbank möglich; in diesem Fall wurde das Protokoll täglich in einer separaten Datei im Datenordner gespeichert. Diese Dateien gehen nicht verloren: Sie werden beim ersten Start mit einer Datenbank einmalig eingelesen und anschließend in einen Unterordner verschoben. Solange sie vorhanden sind, werden sie ebenfalls gemäß derselben Aufbewahrungsfrist gelöscht, und bei einer Anfrage bezüglich personenbezogener Daten werden sie mit einbezogen. Die Trace-Datei bleibt eine Datei in einem eigenen Ordner daneben und unterliegt derselben Abwägung. Siehe Uitrol en Beheer und, für die dazugehörige Abwägung, Openbaarheid en Persoonsgegevens.

Der Dienst räumt selbst auf: das Protokoll nach neunzig Tagen, die Trace-Datei nach dreißig, die Fehlertabelle nach neunzig und die Ausgabedateien nach sieben. Das sind die Fristen des Administrators und nicht die des Besuchers. Das Logbuch zeigt an, ob die Verknüpfung genutzt wird und wo sie fehlschlägt; um hier ein Muster zu erkennen, ist ein Quartal erforderlich. Die Trace-Datei dient dazu, eine Störung zu erkennen, die sich erst im Laufe von Wochen abzeichnet. Wer dies anders handhaben möchte, passt BesluitBron:Log:RetentionDays, BesluitBron:Trace:RetentionDays, BesluitBron:ErrorHandling:RetentionDays und BesluitBron:Export:RetentionDays an; bei einem Wert von null oder darunter wird alles gespeichert.

Ab dem 1.3.10 erfolgt diese Bereinigung täglich, auch wenn der Server monatelang ununterbrochen läuft. Bis zur Version 1.3.9 führte der Dienst die Bereinigung nur beim Start durch, und die Einträge in der Datenbank wurden überhaupt nicht bereinigt. Eine Installation, die nicht neu gestartet wurde, behielt daher alles bei. Wie oft die Bereinigung erfolgt, ist unter BesluitBron:Retention:IntervalHours angegeben; standardmäßig alle 24 Stunden. Bei jedem Durchlauf wird in die Trace-Datei geschrieben, was entfernt wurde, mit dem Code „bbnret001“.

Mit Version 1.3.10 wurde für die Fehlertabelle außerdem eine Aufbewahrungsfrist von neunzig Tagen festgelegt. Die Schaltfläche „Jetzt löschen“ auf dem Bildschirm „Fehler“ bleibt weiterhin bestehen. Wer einen bestimmten Zeitraum früher bereinigen möchte, findet weitere Informationen unter Beheerconsole.