> ## 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

> Een debugprocedure die wordt gebruikt om problemen met AppSignal of de setup in een door AppSignal gemonitorde applicatie te debuggen.

Wanneer een ondersteuningsverzoek binnenkomt op [support@appsignal.com](mailto: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](/support/known-issues) voor een lijst met problemen die uw applicatie kunnen beïnvloeden.

## Diagnose

Onze [Ruby gem](/ruby), [Elixir-pakket](/elixir), [Node.js-pakket](/nodejs/3.x) en [Python-pakket](/python) 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.

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

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.

<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-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](/appsignal/terminology#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
  * Omgeving
    * De Ruby gem geeft een waarschuwing als er geen wordt gevonden.
  * Lijst met configuratieopties
    * Zie alle beschikbare configuratieopties:
      * [Ruby gem-opties](/ruby/configuration/options)
      * [Elixir-pakketopties](/elixir/configuration/options)
      * [Node.js-pakketopties](/nodejs/3.x/configuration/options)
      * [Python-pakketopties](/python/configuration/options)
* 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](#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.

* Configuratieoverzicht:
  [Ruby](/ruby/configuration) /
  [Elixir](/elixir/configuration) /
  [Node.js](/nodejs/3.x/configuration) /
  [Python](/python/configuration)
* Minimaal vereiste configuratie:
  [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)
* Configuratie-laadvolgorde:
  [Ruby](/ruby/configuration/load-order) /
  [Elixir](/elixir/configuration/load-order) /
  [Node.js](/nodejs/3.x/configuration/load-order) /
  [Python](/python/configuration/load-order)
* Configuratieopties:
  [Ruby](/ruby/configuration/options) /
  [Elixir](/elixir/configuration/options) /
  [Node.js](/nodejs/3.x/configuration/options) /
  [Python](/python/configuration/options)

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

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

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](/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)) 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 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
```

#### 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 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
```

### 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](/ruby/configuration/options#option-log)
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](#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 Bash theme={null}
sudo journalctl -u appsignal-agent
```

(Het commando `sudo` is mogelijk optioneel in bepaalde omgevingen zoals containers.)

### Logbestanden op Heroku

Op het [Heroku](http://heroku.com/)-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](https://devcenter.heroku.com/articles/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.

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

## 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`.

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

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](/support/operating-systems) ondersteund?
* Heeft de "extension" zich correct geïnstalleerd en geladen?
  Antwoorden zouden in de ["diagnose"-uitvoer](#diagnose) moeten staan.
* Draait de applicatie binnen een gecontaineriseerd systeem?
* Worden de applicatieservers gesynchroniseerd met [NTP](/support/about-time) om clock drift te voorkomen?
* Staat uw probleem in onze lijst van [bekende problemen](/support/known-issues)?

## 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](mailto:support@appsignal.com) als u tegen
problemen aanloopt bij het debuggen van de AppSignal-agents. We staan klaar om te helpen.
