Naar hoofdinhoud gaan
Wanneer een ondersteuningsverzoek binnenkomt op support@appsignal.com hebben we een aantal procedures om te debuggen waar een probleem vandaan kan komen. Aangezien delen prettig is, volgen hier enkele van onze procedures. Zie ook onze lijst met bekende problemen voor een lijst met problemen die uw applicatie kunnen beïnvloeden.

Diagnose

Onze Ruby gem, Elixir-pakket, Node.js-pakket en Python-pakket worden geleverd met een ingebouwd diagnose-commandoregelhulpprogramma dat informatie uitvoert over de configuratie van de AppSignal-bibliotheek en de omgeving waarin deze draait. Al deze informatie kan helpen bij het vinden van een mogelijke oorzaak van een probleem. Als u een ondersteuningsverzoek opent, vragen we u meestal om dit eerst uit te voeren.
# 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
Het diagnose-commando moet worden uitgevoerd in de directory van een applicatie waarin de AppSignal-bibliotheek is geïnstalleerd. Tenzij de applicatie is geconfigureerd met omgevingsvariabelen, is het noodzakelijk om het diagnose-commando van een omgeving te voorzien. De omgeving helpt AppSignal de juiste configuratie te laden die moet worden gediagnosticeerd.
# 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-informatie

Het diagnose-commando voert de volgende gegevens uit.
  • Agent-informatie
    • Ruby gem / Elixir-pakket / Node.js / Python-pakketversie
    • Agent-versie
    • Installatiepad van de Ruby gem
    • C-extension / Nif geladen: yes/no
  • Host-informatie
    • Hardware-architectuur
    • Besturingssysteem
    • Ruby / Elixir & OTP / Node.js / Python-versie
    • Heroku-detectie - alleen zichtbaar op Heroku
    • Containerdetectie
    • Huidige gebruiker is root-gebruiker: yes/no
  • Agent-diagnostiek
    • Start de agent in diagnose-modus
    • Validatie van agentconfiguratie
    • Initialisatie van agentlogger
    • Controle of het pad van het agent-lockbestand beschrijfbaar is
  • Configuratie
  • Validatie van Push API-sleutel
    • Test of de gebruikte Push API-sleutel een geldige sleutel is bij AppSignal.com.
  • Padinformatie
    • Test of alle vereiste paden beschrijfbaar zijn. Geeft ook eigendom van de huidige gebruiker weer.
    • current_path - pad waarin het diagnose-commando wordt uitgevoerd. Moet een pad zijn voor de applicatie die u probeert te debuggen. Meestal hetzelfde als root_path. (Alleen Ruby)
    • root_path - applicatiepad. AppSignal zal proberen hier een config/appsignal.rb/config/appsignal.yml-bestand te vinden. (Alleen Ruby)
    • log_dir_path - pad waarin het logbestand wordt aangemaakt.
    • log_file_path - pad waar het logbestand wordt aangemaakt. Is leeg als er geen geschikt pad kon worden gevonden.
  • Installatie-informatie (alleen Ruby)
    • Er kan iets fout zijn gegaan tijdens de installatie van de AppSignal- agent. Dit gedeelte geeft de bestanden install.log en mkmf.log (Makefile-log) weer.
De volgende opties moeten correct geconfigureerd zijn om AppSignal te starten. Dit is het absolute minimum, andere configuratie kan ook van invloed zijn op de instrumentatie.
  • Configuratie Environment / env is ingesteld.
  • Configuratie name is ingesteld.
  • Configuratie push_api_key is ingesteld.
  • Configuratie active is ingesteld op true.
  • De Push API-sleutel valideert. Hiervoor is een internetverbinding nodig.

Configuratie

De configuratie is essentieel. Het is belangrijk, omdat zonder configuratie de AppSignal- agent niet weet welke applicatie hij instrumenteert en in welke omgeving. Met behulp van de diagnose-informatie kunnen we kijken of we een probleem met de configuratie van de agent kunnen vinden. De AppSignal-agents hebben meerdere methoden voor configuratie. We raden u aan het configuratieonderwerp door te lezen om te beginnen, specifiek de minimaal vereiste configuratie, de configuratie-laadvolgorde en de pagina’s met configuratieopties als u problemen ondervindt.

Er verschijnen geen gegevens

Er kunnen veel redenen zijn waarom een applicatie niet wordt gedetecteerd door AppSignal. Pas wanneer de AppSignal-servers gegevens van een applicatie beginnen te ontvangen, wordt deze aangemaakt in de UI op AppSignal.com; als er geen gegevens worden ontvangen, wordt er geen applicatie aangemaakt. Wanneer een integratie kapot is of niet correct is ingesteld, kan het lang duren om het probleem op te sporen. Om de AppSignal-agent en zijn verwerking uit te sluiten kunnen we “demo samples” verzenden.
# 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
Dit commando stuurt een nep-webrequest en foutsample naar de AppSignal-servers voor de applicatie. Zodra gegevens zijn ontvangen, beginnen de AppSignal-servers met het verwerken van de gegevens en wordt er een applicatie aangemaakt op AppSignal.com. In elke integratie wordt dit proces ook gebruikt in het install-commandoregelhulpprogramma om te helpen met het installatieproces. Merk op dat het “demo”-commando moet worden uitgevoerd in de directory van een applicatie waarin de AppSignal-agent is geïnstalleerd.

Logs

Als er geen probleem is gevonden in de diagnose-informatie, zijn de logs van de agent het volgende waar u naar kunt kijken. De AppSignal-agents maken logbestanden aan om nuttige informatie en problemen die in de agent zelf zijn aangetroffen weer te geven. Standaard loggen de agents logs op “info”-niveau en hoger (waarschuwing & fout). Om meer gegevens te loggen die relevant zijn voor debuggen, stelt u de optie log_level (Ruby / Elixir / Python) / logLevel (Node.js) in op debug.

Inhoud van logs

Het AppSignal-logbestand bevat informatie van drie verschillende AppSignal- componenten. Het zal elke logregel voorzien van een tijdstempel, componentnaam, proces-PID, log-niveau-indicator en de logregel zelf. De beschikbare agent-componenten zijn:
  • process Taalspecifieke implementatie (Ruby / Elixir).
  • extension C-lang extension voor de taalimplementatie. Draait in hetzelfde proces als process.
  • agent AppSignal Rust-systeemagent. Een apart proces.

Uitsplitsing van logberichten

Uitsplitsing van logberichten van filelogger

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

Uitsplitsing van STDOUT-logberichten

Voor STDOUT-loggers zet de AppSignal Ruby gem een herkenbare “appsignal”- prefix voor het bericht, zodat specifieke AppSignal-berichten gegrept kunnen worden in de loguitvoer van het bovenliggende proces.
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

Loglocatie

Er zijn twee methoden om logs van de AppSignal-bibliotheek op te slaan. Door de logs naar een logbestand te schrijven en door de logs af te drukken in de STDOUT van het proces. Zie de log- configuratie voor meer informatie. Logs die naar een logbestand worden geschreven, worden niet naar de logbestanden van uw applicatie geschreven, maar hebben hun eigen appsignal.log-bestand. Afhankelijk van de permissies van een host schrijft de agent de logs naar een andere locatie. De Ruby gem zal eerst proberen een logbestand aan te maken in de directory van een applicatie. Voor Ruby on Rails-applicaties wordt in plaats daarvan een logbestand aangemaakt in de directory log/. Als het niet lukt om een logbestand aan te maken, zal de gem terugvallen op de /tmp-directory van het systeem. Dit is ook waar andere AppSignal-agentbestanden worden opgeslagen. Het Elixir-pakket schrijft de logbestanden naar het logbestand /tmp/appsignal.log. Als het volledig niet lukt om een beschrijfbare locatie te vinden om zijn logs op te slaan, zal het ze uitvoeren in de STDOUT van het bovenliggende applicatieproces. Dit kan ook worden geconfigureerd met de optie :log. De systeemagent kan momenteel niet naar STDOUT loggen, dus deze zal altijd loggen naar het appsignal.log-bestand, zelfs wanneer log is geconfigureerd op STDOUT. Om AppSignal u te laten vertellen waar het zijn logs naartoe schrijft, zie de uitvoer van het diagnose-commando.

Logrotatie

AppSignal voert geen logrotatie uit voor zijn logbestanden. We raden aan een systeemtool zoals logrotate te configureren om bestandsgrootte en bewaring te beheren.

Logs van standalone agent

Als u de AppSignal standalone agent gebruikt, kunt u de logs openen met het volgende commando:
Bash
sudo journalctl -u appsignal-agent
(Het commando sudo is mogelijk optioneel in bepaalde omgevingen zoals containers.)

Logbestanden op Heroku

Op het Heroku-hostingplatform zal de integratiebibliotheek automatisch naar STDOUT loggen. Aangezien de agent niet naar STDOUT kan loggen, zal deze blijven schrijven naar het appsignal.log-bestand. Op Heroku is het niet mogelijk om de inhoud van het logbestand te zien met heroku run bash en vervolgens het logbestand te lezen, vanwege de manier waarop Heroku Dyno’s zijn gecontaineriseerd. Heroku biedt een add-on genaamd “Heroku Exec” om het uitvoeren van commando’s in dezelfde dyno-container als uw applicatie mogelijk te maken. Met deze add-on kunnen we het logbestand op de dyno’s van uw applicatie lezen.
# 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

Draait de agent?

Wanneer een applicatie met AppSignal-integratie start, start deze de AppSignal- systeemagent op. Deze agent draait als een apart proces en communiceert met de applicatie. Na het verwerken van instrumentatiegegevens is het deze agent die de gegevens naar de AppSignal-servers verzendt, niet de taalspecifieke agent. Wanneer de systeemagent niet draait, kunnen er geen gegevens worden verwerkt of naar AppSignal worden verzonden. Het is belangrijk om te weten of de systeemagent draait. U vindt het in de proceslijst onder de naam appsignal-agent.
ps aux | grep appsignal
Voer het ps-commando uit op de commandoregel op uw host om te zien of de agent draait terwijl uw applicatie met AppSignal draait.

Andere vragen

Er kunnen veel factoren een rol spelen wanneer zich een probleem voordoet. Zaken om te controleren wanneer AppSignal niet lijkt te werken of er geen logs beschikbaar zijn.
  • Sinds wanneer doet het probleem zich voor?
    • Is de agent geüpdatet?
    • Zijn andere bibliotheken geüpdatet?
  • Wat zeggen de AppSignal-agentlogs met de optie log_level ingesteld op debug?
  • Is het besturingssysteem ondersteund?
  • Heeft de “extension” zich correct geïnstalleerd en geladen? Antwoorden zouden in de “diagnose”-uitvoer moeten staan.
  • Draait de applicatie binnen een gecontaineriseerd systeem?
  • Worden de applicatieservers gesynchroniseerd met NTP om clock drift te voorkomen?
  • Staat uw probleem in onze lijst van bekende problemen?

Een reproduceerbare staat creëren

Als de hierboven beschreven stappen geen oorzaak voor het probleem hebben opgeleverd, is een goede volgende stap om te proberen de situatie te repliceren in de meest minimale setup die mogelijk is. Maak een testapplicatie met zo min mogelijk configuratie, waarbij alleen de minimaal vereiste bibliotheken en dependencies worden geladen. Met deze reproduceerbare voorbeeldapplicatie kunnen we beginnen met het opsporen van de oorzaak van het probleem.

Neem contact met ons op

Aarzel niet om contact met ons op te nemen als u tegen problemen aanloopt bij het debuggen van de AppSignal-agents. We staan klaar om te helpen.