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

# AppSignal debuggen

> Ein Debugging-Verfahren, das verwendet wird, um Probleme mit AppSignal oder der Einrichtung in einer von AppSignal überwachten Anwendung zu debuggen.

Wenn eine Support-Anfrage bei [support@appsignal.com](mailto:support@appsignal.com) eingeht, haben wir einige Verfahren, um zu debuggen, woher ein Problem stammen könnte.

Da es gut ist, zu teilen, finden Sie hier einige unserer Verfahren.

Siehe auch unsere Liste der [bekannten Probleme](/support/known-issues) für eine Liste von Problemen, die Ihre Anwendung betreffen könnten.

## Diagnose

Unser [Ruby gem](/ruby), [Elixir package](/elixir), [Node.js package](/nodejs/3.x) und [Python package](/python) werden mit einem integrierten Diagnose-Kommandozeilen-Tool ausgeliefert, das Informationen über die Konfiguration der AppSignal-Bibliothek und der Umgebung ausgibt, in der sie ausgeführt wird. All diese Informationen können dabei helfen, eine mögliche Ursache eines Problems zu finden.

Wenn Sie eine Support-Anfrage öffnen, werden wir Sie normalerweise bitten, dies zuerst auszuführen.

<CodeGroup>
  ```bash Bash theme={null}
  # Ruby
  appsignal diagnose

  # Elixir
  mix appsignal.diagnose

  # With an Elixir release (`mix release`) binary:
  bin/your_app eval ":appsignal_tasks.diagnose()"

  # With a Distillery release binary:
  bin/your_app command appsignal_tasks diagnose

  # Node.js
  npx @appsignal/cli diagnose

  # Python
  python -m appsignal diagnose
  ```
</CodeGroup>

Der Diagnose-Befehl muss im Verzeichnis einer Anwendung ausgeführt werden, in der die AppSignal-Bibliothek installiert ist.

Sofern die Anwendung nicht mit Umgebungsvariablen konfiguriert ist, muss dem Diagnose-Befehl eine Umgebung übergeben werden. Die Umgebung hilft AppSignal, die korrekte Konfiguration zu laden, die diagnostiziert werden muss.

<CodeGroup>
  ```bash Bash theme={null}
  # Ruby
  APPSIGNAL_APP_ENV=production appsignal diagnose
  # --environment option support since Ruby gem version 2.0.4
  appsignal diagnose --environment=production

  # Elixir
  MIX_ENV=production mix appsignal.diagnose
  # Or with the release binary
  bin/your_app command appsignal_tasks diagnose

  # Node.js
  NODE_ENV=production npx @appsignal/cli diagnose

  # Python
  APPSIGNAL_APP_ENV=production python -m appsignal diagnose
  ```
</CodeGroup>

### Diagnose-Informationen

Der Diagnose-Befehl gibt die folgenden Daten aus.

* Agent-Informationen
  * Ruby gem / Elixir package / Node.js / Python package-Version
  * Agent-Version
  * Installationspfad des Ruby gem
  * C-Extension / Nif geladen: `yes`/`no`
* Host-Informationen
  * Hardware-Architektur
  * Betriebssystem
  * Ruby / Elixir & OTP / Node.js / Python-Version
  * Heroku-Erkennung – nur auf Heroku sichtbar
  * Container-Erkennung
  * Aktueller Benutzer ist `root`-Benutzer: `yes`/`no`
* [Agent](/appsignal/terminology#agent)-Diagnose
  * Startet den Agent im Diagnosemodus
  * Validierung der Agent-Konfiguration
  * Initialisierung des Agent-Loggers
  * Schreibrechte-Prüfung für den Pfad der Agent-Lock-Datei
* Konfiguration
  * Umgebung
    * Das Ruby gem gibt eine Warnung aus, wenn keine gefunden wird.
  * Liste der Konfigurationsoptionen
    * Siehe alle verfügbaren Konfigurationsoptionen:
      * [Ruby gem-Optionen](/ruby/configuration/options)
      * [Elixir package-Optionen](/elixir/configuration/options)
      * [Node.js package-Optionen](/nodejs/3.x/configuration/options)
      * [Python package-Optionen](/python/configuration/options)
* Push API-Key-Validierung
  * Testet, ob der verwendete Push API-Key bei AppSignal.com ein gültiger Schlüssel ist.
* Pfad-Informationen
  * Testet alle erforderlichen Pfade darauf, ob sie beschreibbar sind. Gibt auch die Eigentumsrechte des
    aktuellen Benutzers aus.
  * `current_path` – Pfad, in dem der Diagnose-Befehl ausgeführt wird. Sollte ein Pfad für
    die Anwendung sein, die Sie debuggen möchten. Normalerweise derselbe wie `root_path`.
    (nur Ruby)
  * `root_path` – Anwendungspfad. AppSignal versucht, hier eine
    `config/appsignal.rb`/`config/appsignal.yml`-Datei zu finden. (nur Ruby)
  * `log_dir_path` – Pfad, in dem die Log-Datei erstellt wird.
  * `log_file_path` – Pfad, in dem die Log-Datei erstellt wird. Ist leer, wenn kein gangbarer Pfad
    gefunden werden konnte.
* Installationsinformationen (nur Ruby)
  * Bei der Installation des AppSignal-Agents könnte etwas schief gelaufen sein.
    Dieser Abschnitt gibt die Dateien `install.log` und `mkmf.log` (Makefile-Log)
    aus.

Die folgenden Optionen müssen korrekt konfiguriert sein, damit AppSignal startet.
Es ist das absolute Minimum, weitere Konfigurationen können sich ebenfalls auf die
Instrumentierung auswirken.

* Konfiguration `Environment` / `env` ist gesetzt.
* Konfiguration `name` ist gesetzt.
* Konfiguration `push_api_key` ist gesetzt.
* Konfiguration `active` ist auf `true` gesetzt.
* Der Push API-Key wird validiert. Dazu ist eine Internetverbindung erforderlich.

## Konfiguration

Die Konfiguration ist entscheidend. Sie ist wichtig, weil der AppSignal-Agent
ohne sie nicht weiß, welche Anwendung er instrumentiert und in welcher Umgebung.

Mithilfe der [Diagnose](#diagnose)-Informationen prüfen wir, ob wir ein Problem
mit der Konfiguration des Agents finden können.

Die AppSignal-Agents haben mehrere Konfigurationsmethoden.

Wir empfehlen Ihnen, das Konfigurationsthema zu lesen, um einzusteigen, insbesondere die
minimal erforderliche Konfiguration, die Konfigurations-Ladereihenfolge und die Konfigurationsoptionen-Seiten,
wenn Sie Probleme haben.

* Konfigurationsübersicht:
  [Ruby](/ruby/configuration) /
  [Elixir](/elixir/configuration) /
  [Node.js](/nodejs/3.x/configuration) /
  [Python](/python/configuration)
* Minimal erforderliche Konfiguration:
  [Ruby](/ruby/configuration/#minimal-required-configuration) /
  [Elixir](/elixir/configuration/#minimal-required-configuration) /
  [Node.js](/nodejs/3.x/configuration/#minimal-required-configuration) /
  [Python](/python/configuration/#minimal-required-configuration)
* Konfigurations-Ladereihenfolge:
  [Ruby](/ruby/configuration/load-order) /
  [Elixir](/elixir/configuration/load-order) /
  [Node.js](/nodejs/3.x/configuration/load-order) /
  [Python](/python/configuration/load-order)
* Konfigurationsoptionen:
  [Ruby](/ruby/configuration/options) /
  [Elixir](/elixir/configuration/options) /
  [Node.js](/nodejs/3.x/configuration/options) /
  [Python](/python/configuration/options)

## Keine Daten erscheinen

Es kann viele Gründe geben, warum eine Anwendung von AppSignal nicht erkannt wird.
Erst wenn die AppSignal-Server anfangen, Daten von einer Anwendung zu empfangen,
wird sie in der Benutzeroberfläche auf AppSignal.com erstellt; wenn keine Daten empfangen werden,
wird auch keine Anwendung erstellt.

Wenn eine Integration kaputt ist oder nicht korrekt eingerichtet wurde, kann es lange dauern,
das Problem zu verfolgen. Um den AppSignal-Agent und seine Verarbeitung auszuschließen, können
wir "Demo-Samples" senden.

<CodeGroup>
  ```bash Bash theme={null}
  # Ruby
  appsignal demo --environment=development

  # Elixir
  MIX_ENV=prod mix appsignal.demo
  # Or with the release binary
  bin/your_app command appsignal_tasks demo

  # Node.js
  npx @appsignal/cli demo

  # Python
  python -m appsignal demo --environment=production
  ```
</CodeGroup>

Dieser Befehl sendet einen gefälschten Web-Request und ein Fehler-Sample an die AppSignal-Server
für die Anwendung. Sobald Daten empfangen wurden, beginnen die AppSignal-Server mit der
Verarbeitung der Daten und erstellen eine Anwendung auf AppSignal.com.

In jeder Integration wird dieser Prozess auch im Installations-Kommandozeilen-Tool verwendet, um beim Installationsprozess zu helfen.

Beachten Sie, dass der "demo"-Befehl im Verzeichnis einer Anwendung ausgeführt werden muss,
in der der AppSignal-Agent installiert ist.

## Logs

Wenn in den Diagnose-Informationen kein Problem gefunden wird, sind die Logs des Agents
das nächste, was Sie sich ansehen können. Die AppSignal-Agents erstellen Log-Dateien, um
nützliche Informationen und im Agent selbst aufgetretene Probleme auszugeben.

Standardmäßig protokollieren die Agents "info"-Level-Logs und höher (warning & error). Um mehr für das Debugging relevante Daten zu protokollieren, setzen Sie die Option `log_level` ([Ruby](/ruby/configuration/options#option-log_level) / [Elixir](/elixir/configuration/options#option-log_level) / [Python](/python/configuration/options#option-log_level)) / `logLevel` ([Node.js](/nodejs/3.x/configuration/options#option-logLevel)) auf `debug`.

### Inhalt der Logs

Die AppSignal-Log-Datei enthält Informationen von drei verschiedenen AppSignal-Komponenten.
Jedem Log-Eintrag wird ein Zeitstempel, ein Komponentenname, eine Prozess-PID, ein
Log-Level-Indikator und die Log-Nachricht selbst vorangestellt.

Die verfügbaren Agent-Komponenten sind:

* `process`
  Sprachspezifische Implementierung (Ruby / Elixir).
* `extension`
  C-lang-Erweiterung zur Sprachimplementierung. Läuft im selben Prozess wie
  `process`.
* `agent`
  AppSignal Rust System-Agent. Ein separater Prozess.

### Aufschlüsselung der Log-Nachricht

#### Aufschlüsselung der Datei-Logger-Log-Nachricht

```text Text theme={null}
[2016-10-19T11:06:18 (process) #11329][DEBUG] Starting appsignal
 ^                    ^         ^      ^      ^
 |                    |         |      |      Message
 |                    |         |      Log level
 |                    |         Process PID
 |                    Agent component
 Timestamp in host time zone
```

#### Aufschlüsselung der STDOUT-Log-Nachricht

Für STDOUT-Logger stellt das AppSignal Ruby gem der Nachricht ein erkennbares "appsignal"-
Präfix voran, damit spezifische AppSignal-Nachrichten in der Log-Ausgabe des
übergeordneten Prozesses gegreppt werden können.

```text Text theme={null}
[2016-10-19T11:06:18 (process) #11329][DEBUG] appsignal: Starting appsignal
 ^                    ^         ^      ^      ^          ^
 |                    |         |      |      |          Message
 |                    |         |      |      AppSignal prefix
 |                    |         |      Log level
 |                    |         Process PID
 |                    Agent component
 Timestamp in host time zone
```

### Log-Speicherort

Es gibt zwei Methoden, um Logs aus der AppSignal-Bibliothek zu speichern. Indem die
Logs in eine Log-Datei geschrieben werden und indem die Logs im STDOUT des Prozesses ausgegeben werden.
Siehe die [`log`-Konfiguration](/ruby/configuration/options#option-log) für weitere Informationen.

Logs, die in eine Log-Datei geschrieben werden, werden nicht in die Log-Dateien Ihrer Anwendung geschrieben, sondern
haben ihre eigene `appsignal.log`-Datei. Abhängig von den Berechtigungen eines Hosts schreibt der
Agent die Logs an einen anderen Ort.

Das Ruby gem versucht zunächst, eine Log-Datei im Verzeichnis einer Anwendung zu erstellen.
Für Ruby-on-Rails-Anwendungen wird stattdessen eine Log-Datei im `log/`-
Verzeichnis erstellt. Wenn es keinen Erfolg beim Erstellen einer Log-Datei hat, fällt es auf
das `/tmp`-Verzeichnis des Systems zurück. Hier werden auch andere AppSignal-Agent-Dateien
gespeichert.

Das Elixir package schreibt die Log-Dateien in die Log-Datei `/tmp/appsignal.log`.

Wenn es komplett scheitert, einen beschreibbaren Ort zum Speichern seiner Logs zu finden, gibt es
sie im STDOUT des Prozesses der übergeordneten Anwendung aus. Dies kann auch mit
der `:log`-Option konfiguriert werden.

Der System-Agent kann derzeit nicht nach STDOUT loggen, daher loggt er immer in die
`appsignal.log`-Datei, auch wenn das Log auf STDOUT konfiguriert ist.

Um AppSignal mitteilen zu lassen, wohin es seine Logs schreibt, siehe die Ausgabe des
[Diagnose](#diagnose)-Befehls.

### Log-Rotation

AppSignal führt keine Log-Rotation für seine Log-Dateien durch. Wir empfehlen die Konfiguration eines Systemtools wie `logrotate`, um Dateigröße und Aufbewahrung zu verwalten.

### Standalone-Agent-Logs

Wenn Sie den AppSignal Standalone Agent verwenden, können Sie mit dem folgenden Befehl auf die Logs zugreifen:

```bash Bash theme={null}
sudo journalctl -u appsignal-agent
```

(Der Befehl `sudo` kann in bestimmten Umgebungen wie Containern optional sein.)

### Log-Dateien auf Heroku

Auf der [Heroku](http://heroku.com/)-Hosting-Plattform protokolliert die Integrationsbibliothek automatisch nach STDOUT. Da der Agent nicht nach STDOUT loggen kann, schreibt er weiterhin in die `appsignal.log`-Datei.

Auf Heroku ist es nicht möglich, die Inhalte der Log-Datei mit `heroku run bash` zu sehen und dann die Log-Datei zu lesen, aufgrund der Art und Weise, wie Heroku Dynos containerisiert sind.

Heroku bietet ein Add-on namens "[Heroku Exec](https://devcenter.heroku.com/articles/heroku-exec)" an, um die Ausführung von Befehlen im selben Dyno-Container wie Ihre Anwendung zu ermöglichen. Mit diesem Add-on können wir die Log-Datei auf den Dynos Ihrer Anwendung lesen.

<CodeGroup>
  ```bash Bash theme={null}
  # Install the Exec add-on as described on the Heroku website:
  # https://devcenter.heroku.com/articles/heroku-exec
  $ heroku ps:exec
  $ cat /path/to/appsignal.log
  ```
</CodeGroup>

## Läuft der Agent?

Wenn eine Anwendung mit AppSignal-Integration startet, bootet sie den AppSignal-
System-Agent. Dieser Agent läuft als separater Prozess und kommuniziert mit der
Anwendung. Nach der Verarbeitung von Instrumentierungsdaten ist es dieser Agent, der
die Daten an die AppSignal-Server sendet, nicht der sprachspezifische Agent. Wenn der
System-Agent nicht läuft, können keine Daten verarbeitet oder an AppSignal gesendet werden.

Es ist wichtig zu wissen, ob der System-Agent läuft. Sie können ihn in der
Prozessliste unter dem Namen `appsignal-agent` finden.

<CodeGroup>
  ```bash Bash theme={null}
  ps aux | grep appsignal
  ```
</CodeGroup>

Führen Sie den `ps`-Befehl auf der Kommandozeile auf Ihrem Host aus, um zu sehen, ob der Agent
läuft, während Ihre Anwendung mit AppSignal läuft.

## Andere Fragen

Es können viele Faktoren eine Rolle spielen, wenn ein Problem auftritt. Dinge, die zu prüfen sind, wenn
AppSignal nicht zu funktionieren scheint oder keine Logs verfügbar sind.

* Seit wann tritt das Problem auf?
  * Wurde der Agent aktualisiert?
  * Wurden andere Bibliotheken aktualisiert?
* Was sagen die AppSignal-Agent-Logs mit der Option `log_level` auf `debug` gesetzt?
* Wird das [Betriebssystem](/support/operating-systems) unterstützt?
* Wurde die "extension" korrekt installiert und geladen?
  Die Antworten sollten in der ["diagnose"-Ausgabe](#diagnose) zu finden sein.
* Läuft die Anwendung innerhalb eines containerisierten Systems?
* Sind die Server der Anwendung mit [NTP](/support/about-time) synchronisiert, um Clock drift zu verhindern?
* Wird Ihr Problem in unserer Liste der [bekannten Probleme](/support/known-issues) erwähnt?

## Einen reproduzierbaren Zustand erstellen

Wenn die oben beschriebenen Schritte keine Ursache für das Problem aufgezeigt haben, ist ein guter nächster
Schritt, zu versuchen, die Situation in der minimalsten Einrichtung zu replizieren.

Erstellen Sie eine Testanwendung mit so wenig Konfiguration wie möglich, in die nur die
mindestens erforderlichen Bibliotheken und Abhängigkeiten geladen werden.

Mit diesem reproduzierbaren Beispiel-Anwendung können wir beginnen, die Ursache des Problems
einzukreisen.

## Kontaktieren Sie uns

Zögern Sie nicht, [uns zu kontaktieren](mailto:support@appsignal.com), wenn Sie beim Debuggen der AppSignal-Agents
auf Probleme stoßen. Wir sind hier, um zu helfen.
