> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Formate auf dem Datenträger für air-gapped Devin

> Stabile Dateispeicherorte für die air-gapped Versionen von Devin Desktop und CLI unter macOS, Linux und Windows sowie das JSONL-Schema des Audit-Protokolls und Beispiele für die Datenaufnahme in SIEM-Systeme.

> [!NOTE]
>
> Diese Dokumentation gilt für föderale Deployments von Devin. [Zurück zur Devin-Dokumentation](/de/get-started/devin-intro)

Die air-gapped Versionen von CLI und Desktop speichern ihren gesamten Zustand in einigen wenigen Dateien mit dokumentierten, stabilen Formaten. Auf dieser Seite erfahren Sie, wo die einzelnen Dateien liegen, welche davon Sie selbst erstellen und wie das Schema des Audit-Protokolls genau aufgebaut ist, damit Sie es an Ihr SIEM weiterleiten können.

***

## Dateispeicherorte

### Von Ihnen erstellte Dateien

Dies sind die machine-wide Eingaben. Für jede gibt es einen Standardpfad und eine Umgebungsvariable, die diesen überschreibt. Die Variable muss in der Umgebung gesetzt sein, aus der der Agent gestartet wird (wie Sie dies für Desktop einrichten, erfahren Sie unter [Umgebungsvariablen für API-Schlüssel](/de/federal/air-gapped/models-file#api-key-environment-variables)).

| Datei | Standardpfad | Überschreibung | Format | Dokumentiert unter |
| - | - | - | - | - |
| Lizenz | `/etc/devin/license.devin-onprem-license` | `DEVIN_LICENSE_FILE` | Signiertes token, einzeilig | [Lizenz](/de/federal/air-gapped/license) |
| Modelldatei | `/etc/devin/models.json` | `DEVIN_MODELS_FILE` | JSON, `"version": 0` | [Modelldatei](/de/federal/air-gapped/models-file) |
| Auth-Datei (optional, aktiviert SSO) | `/etc/devin/auth.json` | `DEVIN_AUTH_FILE` | JSON, `"version": 0` | [SSO](/de/federal/air-gapped/sso) |
| CA-Paket (optional) | keiner | `DEVIN_CA_BUNDLE` | PEM | [Netzwerk und Zertifikate](/de/federal/air-gapped/network-and-certificates) |
| Machine-wide Richtlinie (optional) | Linux `/etc/devin/system.json`, macOS `/Library/Application Support/Devin/system.json` | keine | JSON | [CLI-Systemkonfiguration](/de/cli/enterprise/system-config) |

Die Standardwerte sind unter macOS und Linux identisch. Unter Windows liegen Lizenz, Modelldatei und Auth-Datei standardmäßig in `C:\ProgramData\Devin\` (`license.devin-onprem-license`, `models.json`, `auth.json`), die machine-wide Richtliniendatei ist `C:\ProgramData\Devin\system.json`, und die Variablen zur Überschreibung sind dieselben. [Sperren Sie den Ordner ab](/de/federal/air-gapped/install#windows-lock-down-the-configuration-folder), bevor Sie Dateien darin ablegen. Die CLI liest diese Dateien nur und schreibt nie in sie. Sie können sie daher mit Ihren Tools für das Konfigurationsmanagement verwalten und schreibgeschützt ablegen.

### Von der CLI geschriebener Zustand pro Nutzer

Die CLI folgt sowohl unter macOS **als auch** unter Linux dem Aufbau der XDG-Basisverzeichnisse (für ihren eigenen Zustand verwendet sie `~/Library` nicht). `XDG_CONFIG_HOME` und `XDG_DATA_HOME` werden berücksichtigt, sofern sie gesetzt sind.

| Pfad | Inhalt |
| - | - |
| `~/.config/devin/config.json` | Benutzerkonfiguration, die mit der Standard-Devin CLI gemeinsam genutzt wird (Berechtigungen, `proxy` usw.). Enthält niemals Anmeldedaten. Siehe die [Referenz zur CLI-Konfigurationsdatei](/de/cli/reference/configuration/config-file). |
| `~/.config/devin/mcp_config.json` | Lokal konfigurierte MCP-Server. |
| `~/.local/share/devin/sso_tokens.toml` | SSO-Token-Cache, von `devin auth login` geschrieben, mit Berechtigungen nur für den Eigentümer (`0600`). Wird von `devin auth logout` gelöscht. |
| `~/.local/share/devin/cli-federal/sessions.db` | Sitzungsverlauf (SQLite). Enthält Inhalte von Unterhaltungen; behandeln Sie die Datei als vertraulich. |
| `~/.local/share/devin/cli-federal/audit/` | Verzeichnis des Audit-Protokolls: `audit.jsonl` sowie rotierte `audit-<timestamp>.jsonl`-Dateien und die Advisory-Sperre `.audit.lock`. Schema siehe unten. |

`cli-federal` ist das Produktunterverzeichnis des air-gapped build. Es hält diesen Zustand getrennt von einer etwaigen Standardinstallation der Devin CLI auf derselben Maschine, die `cli` verwendet.

Unter Windows liest die CLI keine `XDG_*`-Variablen. Sie legt dieselben Dateien unter `%APPDATA%\devin\` und ihren Cache unter `%LOCALAPPDATA%\devin\` ab:

| Pfad (Windows) | Inhalt |
| - | - |
| `%APPDATA%\devin\config.json` | Benutzerkonfiguration, wie oben. |
| `%APPDATA%\devin\mcp_config.json` | Lokal konfigurierte MCP-Server. |
| `%APPDATA%\devin\sso_tokens.toml` | SSO-Token-Cache. |
| `%APPDATA%\devin\cli-federal\sessions.db` | Sitzungsverlauf (SQLite). |
| `%APPDATA%\devin\cli-federal\audit\` | Verzeichnis des Audit-Protokolls. |

### Desktop-spezifischer Zustand

Die Desktop-Anwendung ist von allen anderen Devin Desktop- oder Windsurf-Installationen auf derselben Maschine isoliert:

| Pfad | Inhalt |
| - | - |
| `~/.devin-airgap-config/` | Ein isoliertes `XDG_CONFIG_HOME`, das Desktop an den mitgelieferten Agent übergibt. Darin ist `devin/config.json` eine symbolische Verknüpfung auf die eigentliche `~/.config/devin/config.json`, sodass sich die CLI und der mitgelieferte Agent eine Benutzerkonfiguration teilen. Alles andere aus `~/.config/devin/` (insbesondere `mcp_config.json`) bleibt für den Agent innerhalb von Desktop unsichtbar. |
| `~/.devin-airgap/` | Verzeichnis für Desktop-Erweiterungen. |
| `~/.codeium/windsurf-airgap/` | Zustand des Language Servers. |
| Linux `~/.config/Devin - Airgap/`, macOS `~/Library/Application Support/Devin - Airgap/` | Desktop-Nutzerdaten: `User/settings.json` (einschließlich `devin.acp.agentEnv`), Fensterzustand. |

Die symbolische Verknüpfung wird beim Start von Desktop nur erstellt, wenn unter `~/.devin-airgap-config/devin/config.json` noch nichts vorhanden ist. Liegt dort bereits eine reguläre Datei, lässt Desktop sie unverändert, und der mitgelieferte Agent verwendet diese Datei statt der gemeinsamen. Im Ausgabe-Channel **Devin ACP** wird dann die Zeile `WARNING: … is a regular file, not a symlink` protokolliert. Löschen Sie die Datei und starten Sie Desktop neu, um die Verknüpfung wiederherzustellen.

Unter Windows gibt es keine symbolische Verknüpfung. Der mitgelieferte Agent von Desktop und die CLI nutzen `%APPDATA%\devin\config.json` direkt gemeinsam, und Desktop lädt die `%APPDATA%\devin\mcp_config.json` des Nutzers nicht. Die Desktop-Nutzerdaten befinden sich in `%APPDATA%\Devin - Airgap\`.

Für eine vollständig saubere Neuinstallation können nur `~/.devin-airgap-config/` und `~/.devin-airgap/` gefahrlos gelöscht werden. `~/.config/devin/` und `~/.local/share/devin/` werden zusätzlich von der eigenständigen CLI genutzt.

## Audit-Protokoll

Die air-gapped CLI schreibt ein lokales, strukturiertes Audit-Protokoll, das nur fortlaufend ergänzt werden kann (append-only). Es ist immer aktiv (es gibt keinen Schalter), existiert in keinem anderen Devin-Build und wird auf der Workstation gespeichert – für Ihr eigenes Review und die Datenaufnahme in Ihr SIEM.

### Speicherort und Rotation

| Eigenschaft | Wert |
| - | - |
| Aktive Datei | `~/.local/share/devin/cli-federal/audit/audit.jsonl` (Windows: `%APPDATA%\devin\cli-federal\audit\audit.jsonl`) |
| Format | JSON Lines: ein in sich geschlossenes JSON-Objekt pro Zeile, UTF-8 |
| Berechtigungen | Verzeichnis und Dateien werden mit Zugriff nur für den Eigentümer erstellt (`0600`) |
| Rotation | Sobald `audit.jsonl` 10 MiB erreicht, wird die Datei in `audit-<UTC timestamp>.jsonl` umbenannt (zum Beispiel `audit-20260127T234500123Z.jsonl`) und eine neue Datei angelegt |
| Aufbewahrung | Es werden höchstens 10 rotierte Dateien aufbewahrt; die ältesten werden zuerst gelöscht |
| Nebenläufigkeit | Die Rotation ist durch die Advisory-Sperre `.audit.lock` abgesichert, sodass parallel laufende CLI-Prozesse niemals doppelt rotieren |

Wenn Sie eine unbegrenzte Aufbewahrung benötigen, übertragen Sie rotierte Dateien an Ihr SIEM, bevor sie gelöscht werden. Da die CLI ausschließlich Zeilen anhängt und bestehende Zeilen nie überschreibt, genügt ein Standard-Collector, der Dateien fortlaufend ausliest; siehe [Audit-Protokoll an Ihr SIEM weiterleiten](#forward-the-audit-log-to-your-siem).

### Schwärzungsgarantien

Ereignisse enthalten ausschließlich Pfade und Metadaten. Das Protokoll enthält niemals Prompts, Modellantworten, Code, Dateiinhalte, geheime Werte, API-Schlüssel oder vollständige Shell-Befehlszeilen. Bei Shell-Tools wird lediglich der Programmname (das erste token) aufgezeichnet.

### Envelope (Schema-Version 1)

Jede Zeile enthält dieses Envelope; die ereignisspezifischen Felder stehen flach auf derselben Ebene daneben.

| Feld | Typ | Beschreibung |
| - | - | - |
| `schema_version` | number | Derzeit `1`. Wird nur bei nicht abwärtskompatiblen Änderungen erhöht. |
| `ts` | string | UTC-Zeitstempel nach RFC 3339 mit Millisekunden. |
| `pid` | number | Prozess-ID des CLI-Prozesses, der die Zeile ausgibt. |
| `event` | string | Ereignistyp; bestimmt die übrigen Felder. |

Konfigurieren Sie Ihren Parser so, dass er unbekannte Felder und unbekannte `event`-Werte ignoriert: Neue Felder und Ereignistypen können hinzukommen, ohne dass `schema_version` erhöht wird.

### Ereignistypen

#### `session_start`

Wird ausgegeben, wenn eine Agentensitzung beginnt (neue oder wiederaufgenommene Root-Sitzung).

| Feld | Typ | Beschreibung |
| - | - | - |
| `session_id` | string | CLI-Sitzungs-ID. Verwenden Sie sie, um alle anderen Ereignisse der Sitzung zuzuordnen. |
| `source` | string | Art des Sitzungsstarts (zum Beispiel `startup`). |
| `cli_version` | string | Veröffentlichte CLI-Version, wie von `devin --version` ausgegeben. |
| `actor` | object | Zuordnung der Identität; siehe [`actor`-Objekt](#actor-object). |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:00.123Z","pid":4242,"event":"session_start","session_id":"a1b2","source":"startup","cli_version":"1.2.3","actor":{"os_user":"jsmith","git_user_name":"J. Smith","git_user_email":"jsmith@example.com","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
```

#### `session_end`

Wird ausgelöst, wenn die Sitzung endet oder der Agent heruntergefahren wird.

| Feld | Typ | Beschreibung |
| - | - | - |
| `session_id` | string | Sitzungs-ID der CLI. |
| `reason` | string | `prompt_input_exit`, `clear`, `resume`, `logout` oder `other`. |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:59:59.000Z","pid":4242,"event":"session_end","session_id":"a1b2","reason":"prompt_input_exit"}
```

Bei einem ordnungsgemäßen Beenden folgt auf jedes `session_start` genau ein `session_end` mit derselben `session_id`. Die CLI führt den Agent in einem Kindprozess aus, den sie beim Herunterfahren beendet. Daher protokolliert der übergeordnete Prozess das `session_end` der Kind-Sitzung (Grund `other`), sobald die Sitzung endet. Eine Sitzung, die durch `SIGKILL` oder einen Stromausfall beendet wird, kann kein abschließendes Ereignis mehr schreiben. Werten Sie ein `session_start` ohne zugehöriges `session_end` daher als abnormale Beendigung.

#### `tool_call`

Wird nach jedem vom Agent ausgeführten Tool ausgegeben.

| Feld | Typ | Beschreibung |
| - | - | - |
| `session_id` | string | Sitzungs-ID der CLI. |
| `tool_name` | string | Name des Tools (zum Beispiel `read`, `write`, `exec`). |
| `tool_id` | string | Eindeutige ID dieses Tool-Aufrufs. |
| `success` | boolean | Gibt an, ob das Tool Erfolg gemeldet hat. |
| `program` | string, optional | Bei Shell-Tools: nur der Programmname, niemals Argumente. |
| `paths` | string\[], optional | Dateisystempfade, auf die das Tool beschränkt war. Entfällt, wenn leer. |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:07.001Z","pid":4242,"event":"tool_call","session_id":"a1b2","tool_name":"exec","tool_id":"t_01","success":true,"program":"cargo"}
```

#### `file_read` und `file_write`

Werden zusätzlich zu `tool_call` ausgegeben, und zwar einmal pro Pfad im ermittelten Berechtigungs-Geltungsbereich des Tools. Sie beschreiben den Zugriff, auf den das Tool *beschränkt war*, nicht tatsächlich verifizierte I/O-Vorgänge: Ein Tool, das mit Lesezugriff auf mehrere Pfade genehmigt wurde, gibt für jeden Pfad ein `file_read` aus, auch wenn es nur auf einige davon zugegriffen hat. Zudem werden die Ereignisse unabhängig davon ausgegeben, ob der Tool-Aufruf erfolgreich war oder nicht.

| Feld | Typ | Beschreibung |
| - | - | - |
| `session_id` | string | CLI-Sitzungs-ID. |
| `path` | string | Dateisystempfad. |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:09.410Z","pid":4242,"event":"file_write","session_id":"a1b2","path":"/home/jsmith/repo/src/main.rs"}
```

#### `model_call`

Wird nach jeder Inferenzanfrage an einen Modell-Endpunkt aus Ihrer Modelldatei ausgegeben.

| Feld | Typ | Beschreibung |
| - | - | - |
| `session_id` | string | CLI-Sitzungs-ID. |
| `model` | string | Modellname aus der Modelldatei. |
| `endpoint` | string, optional | Basis-URL des konfigurierten Endpunkts. |
| `input_tokens` | number, optional | Gesamtzahl der Eingabe-Tokens, einschließlich Cache-Lesevorgängen. |
| `output_tokens` | number, optional | Ausgabe-Tokens. |
| `cache_read_tokens` | number, optional | Cache-Lese-Tokens, sofern der Endpunkt diese meldet. |
| `cache_creation_tokens` | number, optional | Cache-Schreib-Tokens, sofern gemeldet. |

Token-Felder entfallen, wenn der Endpunkt keine Nutzungsdaten meldet.

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:12.900Z","pid":4242,"event":"model_call","session_id":"a1b2","model":"llama-3-70b","endpoint":"https://models.internal:8000/v1","input_tokens":5120,"output_tokens":384}
```

#### `auth`

| Feld | Typ | Beschreibung |
| - | - | - |
| `action` | string | Eine der unten aufgeführten Aktionen. |
| `actor` | object | Zuordnung der Identität; siehe [`actor`-Objekt](#actor-object). |
| `error_code` | string, optional | Bei `sso_login_denied` und `sso_revalidation_failed`: der `IDPnnn`-Code, der dem Nutzer angezeigt wurde. Entfällt bei erfolgreichen Aktionen. |

| `action` | Beschreibung |
| - | - |
| `identity_resolved` | Zuordnung der Identität bei Sitzungsbeginn und nach jedem `devin auth`-Befehl (sodass `status` die validierte Anmeldung nennt und `logout` keine). |
| `license_validated` | Die Lizenzdatei wurde beim Start erfolgreich validiert. |
| `license_installed` | Eine Lizenzdatei wurde über die Settings-Seite von Desktop geschrieben. Enthält weder Pfad noch Dateiinhalt. |
| `sso_login` | SSO-Anmeldung abgeschlossen (`devin auth login` oder Anmeldung in Desktop). |
| `sso_login_denied` | SSO-Anmeldung nach Antwort des IdP verweigert: Die erforderliche Gruppe fehlt (`IDP004`), oder das zurückgegebene ID-Token hat die Validierung nicht bestanden bzw. fehlte (`IDP005`). `actor` enthält die vom IdP bestätigte Identität, sofern das Token validiert wurde; es wird nichts zwischengespeichert. |
| `sso_refresh` | SSO-Tokens wurden beim IdP aktualisiert. |
| `sso_logout` | SSO-Abmeldung (`devin auth logout` oder Abmeldung in Desktop). |
| `sso_revalidation_failed` | Ein aktiver Agent hat seine SSO-Anmeldung verloren und wird beendet; siehe [Revalidierung in laufenden Sitzungen](/de/federal/air-gapped/sso#revalidation-in-running-sessions). |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:44:58.000Z","pid":4241,"event":"auth","action":"sso_login","actor":{"os_user":"jsmith","git_user_name":"J. Smith","git_user_email":"jsmith@example.com","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
{"schema_version":1,"ts":"2026-01-28T08:10:02.512Z","pid":5150,"event":"auth","action":"sso_login_denied","error_code":"IDP004","actor":{"os_user":"rjones","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"a90d…","sso_user":"rjones","sso_groups":["/contractors"]}}
{"schema_version":1,"ts":"2026-01-28T09:00:00.000Z","pid":4242,"event":"auth","action":"sso_revalidation_failed","error_code":"IDP003","actor":{"os_user":"jsmith","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
```

### `actor`-Objekt

Die Zuordnung der Identität umfasst den OS-Nutzer, die lokale Git-Identität und (sofern SSO konfiguriert ist) die Identität aus dem validierten ID-Token. Nicht verfügbare Felder werden weggelassen.

| Feld | Typ | Beschreibung |
| - | - | - |
| `os_user` | string, optional | `$USER`. |
| `git_user_name` | string, optional | `git config user.name`. |
| `git_user_email` | string, optional | `git config user.email`. |
| `sso_issuer` | string, optional | Die Issuer-URL des IdP, gegen die das Token validiert wurde. |
| `sso_subject` | string, optional | Der `sub`-Claim des ID-Tokens. |
| `sso_user` | string, optional | Die Identität, die `devin auth status` ausgibt (`preferred_username`, `email` oder `sub`). |
| `sso_groups` | string\[], optional | Die Gruppen-Claims des Tokens (standardmäßig `groups` oder der konfigurierte `groups_claim`). |

Die SSO-Felder sind in jedem `auth`-Ereignis enthalten, für das ein validiertes Token vorliegt (`sso_login`, `sso_refresh`, `sso_logout`, `sso_login_denied`), in `sso_revalidation_failed` für die vom Prozess validierte Anmeldung (bzw., falls er keine validiert hat, für die Anmeldung, die sich noch im Token-Cache befindet) sowie in `session_start` und `identity_resolved` für die Anmeldung, die der laufende Prozess beim Start validiert hat. `tool_call`, `file_read`, `file_write` und `model_call` enthalten kein `actor`; ordnen Sie diese Ereignisse über die `session_id` dem zugehörigen `session_start` zu.

> [!NOTE]
>
> `sso_groups` zeichnet die IdP-Gruppenmitgliedschaften jedes Nutzers auf dem lokalen Rechner auf. Das Audit-Verzeichnis und die zugehörigen Dateien sind nur für den Eigentümer zugänglich. Beziehen Sie sie in Ihr Review zum Datenumgang ein, wenn Gruppennamen in Ihrer Umgebung sensibel sind.

### Audit-Protokoll an Ihr SIEM weiterleiten

Devin sendet Audit-Einträge nicht selbst weiter. Um die Nutzung über mehrere Workstations hinweg zu aggregieren, richten Sie den Agent zur Protokollerfassung, den Ihr SIEM bereits verwendet (zum Beispiel einen Splunk Universal Forwarder oder Elastic Agent), auf das Audit-Verzeichnis jeder Workstation aus. Eine Devin-Einstellung ist dafür nicht erforderlich.

Konfigurieren Sie die Dateieingabe des Agents mit diesen Einstellungen:

| Einstellung | Wert |
| - | - |
| Zu erfassende Dateien | `audit*.jsonl` im Audit-Verzeichnis. Dieses Muster umfasst die aktive Datei und die rotierten Dateien. Erfassen Sie `.audit.lock` nicht. |
| Pfad für alle Nutzer einer Workstation | Linux: `/home/*/.local/share/devin/cli-federal/audit/audit*.jsonl`. macOS: `/Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl`. Diese Pfade decken nur Home-Verzeichnisse unter `/home` und `/Users` ab; passen Sie sie an, wenn sich Home-Verzeichnisse an anderer Stelle befinden oder Ihre Nutzer `XDG_DATA_HOME` setzen. |
| Eintragsformat | Ein JSON-Objekt pro Zeile. Eine mehrzeilige Verarbeitung ist nicht erforderlich. |
| Zeitstempel | Das Feld `ts`: RFC 3339, UTC, millisekundengenau. |
| Startposition | Dateianfang, damit auch Einträge erfasst werden, die vor der Installation des Agents geschrieben wurden. |
| Rotation | Bei der Rotation wird die aktive Datei umbenannt und eine neue `audit.jsonl` angelegt. Der Agent muss Dateien anhand ihrer Identität und nicht anhand ihres Namens verfolgen, damit eine umbenannte Datei nicht erneut eingelesen wird. Prüfen Sie, wie Ihr Agent mit umbenannten Dateien umgeht. |
| Unbekannte Felder | Behalten Sie sie bei. Neue Felder und Ereignistypen können ohne Änderung von `schema_version` hinzukommen. |

> [!WARNING]
>
> Das Audit-Verzeichnis und die Dateien sind nur für den Nutzer lesbar, dem sie gehören, und Devin setzt diese Berechtigungen bei jedem Öffnen des Protokolls zurück. Führen Sie den Erfassungs-Agent als root oder als dieser Nutzer aus. Ändern Sie die Dateiberechtigungen nicht, um einem anderen Konto Zugriff zu gewähren – die Änderung wird nicht beibehalten.

Auf der Workstation jedes Nutzers werden die aktive Datei sowie höchstens 10 rotierte Dateien zu je 10 MiB aufbewahrt, insgesamt etwa 110 MiB. Ältere Einträge werden gelöscht. Eine Workstation, die zwischen zwei Erfassungen mehr Daten erzeugt, verliert daher ihre ältesten Einträge.

Um zu prüfen, ob die Erfassung funktioniert, starten und beenden Sie eine Devin-Sitzung auf einer Workstation und suchen Sie anschließend in Ihrem SIEM nach einem `session_start`- und einem `session_end`-Eintrag mit derselben `session_id`.

#### Beispiel: Splunk Universal Forwarder

Stellen Sie diese beiden Dateien in einer App auf jedem Forwarder bereit (zum Beispiel unter `$SPLUNK_HOME/etc/apps/devin_audit/local/`). Verwenden Sie nur die `monitor`-Stanza, die zum Betriebssystem der Workstation passt, und ersetzen Sie `devin` durch den gewünschten Index.

```ini inputs.conf theme={null}
[monitor:///home/*/.local/share/devin/cli-federal/audit/audit*.jsonl]
sourcetype = devin:airgap:audit
index = devin
disabled = 0

[monitor:///Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl]
sourcetype = devin:airgap:audit
index = devin
disabled = 0
```

```ini props.conf theme={null}
[devin:airgap:audit]
INDEXED_EXTRACTIONS = json
KV_MODE = none
SHOULD_LINEMERGE = false
TIMESTAMP_FIELDS = ts
TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%3NZ
TZ = UTC
```

`props.conf` muss auf dem Forwarder liegen, nicht nur auf den Indexern, da `INDEXED_EXTRACTIONS` dort angewendet wird, wo die Datei gelesen wird. Setzen Sie `crcSalt` nicht: Der Forwarder erkennt eine rotierte Datei dann anhand ihres Inhalts und liest sie unter ihrem neuen Namen nicht erneut ein. Jedes Verzeichnis im Wildcard-Pfad muss für das Konto lesbar sein, unter dem der Forwarder läuft; ein Forwarder, der unter einem Dienstkonto ohne Root-Rechte installiert ist, kann die Audit-Verzeichnisse nicht lesen, auf die nur der Eigentümer Lesezugriff hat.

Die Felder kommen als indizierte Felder mit ihren JSON-Namen an, sodass Sie direkt nach `actor.sso_user`, `model` und `input_tokens` suchen können:

```text theme={null}
index=devin sourcetype="devin:airgap:audit" event=model_call | stats sum(input_tokens) sum(output_tokens) by model
```

#### Beispiel: Elastic (Filebeat oder Elastic Agent)

Fügen Sie diesen `filestream`-Input in `filebeat.yml` hinzu. Behalten Sie nur den Pfad für das Betriebssystem der Workstation bei.

```yaml filebeat.yml theme={null}
filebeat.inputs:
  - type: filestream
    id: devin-airgap-audit
    paths:
      - /home/*/.local/share/devin/cli-federal/audit/audit*.jsonl
      - /Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl
    prospector.scanner.fingerprint.length: 64
    parsers:
      - ndjson:
          target: devin
          add_error_key: true
    processors:
      - timestamp:
          field: devin.ts
          layouts:
            - "2006-01-02T15:04:05.999Z"
```

Der `ndjson`-Parser legt jeden Datensatz unter dem Präfix `devin.` ab (`devin.event`, `devin.session_id`, `devin.actor.sso_user`). Setzen Sie nicht `target: ""`: Das Feld `event` des Datensatzes ist eine Zeichenfolge, was mit dem Objekt `event` im Elastic Common Schema kollidiert und dazu führt, dass Elasticsearch die Dokumente ablehnt. Der Prozessor `timestamp` kopiert `ts` nach `@timestamp`. Elastic kennzeichnet diesen Prozessor als Beta. Sie können ihn daher auch weglassen und `@timestamp` stattdessen in einer Ingest-Pipeline aus `devin.ts` setzen. Die `id` muss unter Ihren `filestream`-Inputs eindeutig sein. Standardmäßig identifiziert Filebeat Dateien über einen Fingerabdruck des Dateianfangs. Dieser bleibt auch bei der Umbenennung im Zuge der Rotation erhalten, sodass keine Rotationseinstellung erforderlich ist. Die Länge des Fingerabdrucks wird vom Standardwert 1024 Byte auf 64 Byte reduziert, da Filebeat 9.0 bis 9.4 eine Datei ignoriert, solange sie diese Länge nicht erreicht hat. Dadurch würde eine Workstation mit nur wenigen Datensätzen übersprungen. Die ersten 64 Byte einer Audit-Datei enthalten `ts` und `pid` des ersten Datensatzes, sodass die Fingerabdrücke eindeutig bleiben. Wenn Sie die Länge später ändern, liest Filebeat alle Dateien erneut ein.

Wenn Sie Elastic Agent verwenden, fügen Sie der Agent-Richtlinie die Integration Custom Logs (Filestream) hinzu, geben Sie dieselben Pfade ein und tragen Sie die obigen Blöcke `parsers` und `processors` in das Feld für die benutzerdefinierte Konfiguration der Integration ein.

> [!NOTE]
>
> Cognition hat diese Beispiele nicht mit einer Splunk- oder Elastic-Bereitstellung getestet. Validieren Sie sie in Ihrer Umgebung und prüfen Sie die Herstellerdokumentation für Ihre installierte Version, bevor Sie sie auf Workstations bereitstellen.

Nützliche Felder zum Indizieren oder Durchsuchen:

| Frage | Felder |
| - | - |
| Wer hat Devin wann verwendet? | `event` = `session_start`, mit `actor.sso_user` (oder `actor.os_user`) und `ts` |
| Welche Version ist bereitgestellt? | `cli_version` bei `session_start` |
| Token-Verbrauch nach Modell | `event` = `model_call`, mit `model`, `input_tokens`, `output_tokens` |
| Fehlgeschlagene Tool-Aufrufe | `event` = `tool_call`, mit `success` = `false` |
| Abgelehnte Anmeldungen | `event` = `auth`, mit `action` = `sso_login_denied` und `error_code` |

Nur Datensätze vom Typ `session_start` und `auth` enthalten den Nutzer. Um Datensätze vom Typ `tool_call`, `file_read`, `file_write` und `model_call` einem Nutzer zuzuordnen, verknüpfen Sie sie mit dem `session_start`-Datensatz, der dieselbe `session_id` hat.

## Diagnosebericht

`devin diagnostics` erstellt einen bereinigten Klartextbericht, den Sie prüfen können, bevor Sie ihn an den Cognition-Support senden. Er enthält ausschließlich Versionen, die Struktur der Konfiguration (ob die einzelnen Dateien vorhanden sind und sich parsen lassen), Modellnamen, ob die einzelnen API-Schlüssel-Variablen gesetzt sind, sowie Statistiken zum Audit-Protokoll. Prompts, Code, Dateiinhalte, geheime Werte, Endpunkt-URLs oder Werte von Umgebungsvariablen enthält er dagegen niemals.

```sh theme={null}
devin diagnostics
```

```text theme={null}
Diagnostics written to devin-diagnostics-20260127T234500Z.txt
The report is plain text and stays on this machine; review it before sharing.
```

Verwenden Sie `--output <path>`, um den Dateinamen festzulegen. Der Bericht wird mit Leserechten nur für den Eigentümer (`0600`) gespeichert. Unter [Fehlerbehebung](/de/federal/air-gapped/troubleshooting) erfahren Sie, welche Angaben eine Support-Anfrage enthalten sollte.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.