Zum Hauptinhalt springen
Wenn eine Support-Anfrage bei 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 für eine Liste von Problemen, die Ihre Anwendung betreffen könnten.

Diagnose

Unser Ruby gem, Elixir package, Node.js package und Python package 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.
# 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
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.
# 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

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-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
  • 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-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.

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.
# 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
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 / Elixir / Python) / logLevel (Node.js) 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
[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
[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 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-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
sudo journalctl -u appsignal-agent
(Der Befehl sudo kann in bestimmten Umgebungen wie Containern optional sein.)

Log-Dateien auf Heroku

Auf der Heroku-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” 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.
# 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

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.
ps aux | grep appsignal
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 unterstützt?
  • Wurde die “extension” korrekt installiert und geladen? Die Antworten sollten in der “diagnose”-Ausgabe zu finden sein.
  • Läuft die Anwendung innerhalb eines containerisierten Systems?
  • Sind die Server der Anwendung mit NTP synchronisiert, um Clock drift zu verhindern?
  • Wird Ihr Problem in unserer Liste der bekannten Probleme 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, wenn Sie beim Debuggen der AppSignal-Agents auf Probleme stoßen. Wir sind hier, um zu helfen.