Naar hoofdinhoud gaan
AppSignal kan meldingen over nieuwe incidenten naar verschillende services sturen, zie onze volledige lijst op de pagina integraties. We bieden ook webhooks voor deze meldingen aan, zodat u nieuwe incidenten in uw eigen systeem kunt afhandelen. Om een webhook te ontvangen, gaat u naar het tabblad “Notifications” in de zijbalk van de site, klikt u op “Add integration” en vult u de URL in waar u uw webhookdata wilt ontvangen. Webhook Er zijn meerdere webhooks beschikbaar. Welke payloads de webhook ontvangt, kan worden geconfigureerd in het configuratieformulier voor de webhook, zoals te zien is in de bovenstaande schermafbeelding.

AppSignal-webhookverzoeken verifiëren

Om de veiligheid van uw applicatie te waarborgen, kunt u controleren of binnenkomende webhookverzoeken daadwerkelijk afkomstig zijn van AppSignal. Verificatie gebeurt met behulp van een Webhook verification token om de handtekening van het verzoek te valideren.

Uw Webhook Verification Token vinden

  1. Navigeer in uw AppSignal-dashboard naar App settings > Integrations.
  2. Configureer de webhook-integratie die u wilt verifiëren.
  3. Hier vindt u het Webhook verification token van de integratie.
Deze token wordt gebruikt om te valideren dat het webhookverzoek van AppSignal afkomstig is.

Een verzoek verifiëren

Wanneer AppSignal een webhookverzoek verstuurt, wordt een handtekening opgenomen in de header X-Appsignal-Signature. U kunt het verzoek als volgt valideren:
  1. Voeg de AppSignal Webhook verification token samen met de ruwe body van het verzoek.
  2. Genereer een SHA256-hash van de samengevoegde tekenreeks.
  3. Vergelijk de gegenereerde hash met de waarde in de header X-Appsignal-Signature.
Als de hashes overeenkomen, kan worden bevestigd dat het verzoek van AppSignal afkomstig is.

Voorbeeldimplementaties

Hieronder staan enkele voorbeelden van hoe u kunt verifiëren dat een verzoek afkomstig is van AppSignal in Ruby, Elixir, Node.js en Python. Let op: De onderstaande voorbeelden zijn illustratief; u moet ze mogelijk aanpassen, afhankelijk van de frameworks, integraties en dependencies die uw app gebruikt.
    token = Rails.application.credentials.appsignal_webhook_token
    request_signature = request.headers["X-Appsignal-Signature"]

    message = request.raw_post
    signature = OpenSSL::Digest::SHA256.hexdigest(token + message.to_s)

    if signature == request_signature
      # logic here
    end

Deploy markers

{
  "marker": {
    "time": "2019-01-10 10:45:41 +0100",
    "marker_id": "5c3714455ac13f7df09437f0",
    "site": "My test app",
    "environment": "development",
    "revision": "abc123",
    "user": "tom",
    "repository": "https://github.com/my_org/my_repo",
    "url": "https://appsignal.com/test/sites/5bd867fa2213937f3666ae7b/dashboard"
  }
}

Velden

VeldTypeBeschrijving
markerHash<String, Any>De webhook-payload betreft een marker-incident.

Subvelden van deploy marker

VeldTypeBeschrijving
timeStringTijdstempel waarop de deploy marker is aangemaakt.
marker_idStringInterne AppSignal-marker-id voor de deploy marker.
siteStringApp-naam zoals te zien op AppSignal.com. Het veld site wordt om historische redenen gebruikt in plaats van app.
environmentStringApp-omgeving van de app zoals te zien op AppSignal.com.
revisionStringDe revisienaam van de deploy marker.
userStringDe gebruiker die de marker heeft aangemaakt.
repositoryStringURL naar de repository zoals geconfigureerd voor de app op AppSignal.com.
urlStringURL naar de app op AppSignal.com die de webhook heeft geactiveerd.

Exception incidents

{
  "exception": {
    "time": "2019-01-09 09:03:57 UTC",
    "number": 3,
    "site": "My test app",
    "environment": "development",
    "app_url": "https://appsignal.com/test/sites/5bd867fa2213937f3666ae7b",
    "url": "https://appsignal.com/test/sites/5bd867fa2213937f3666ae7b/incidents/3?timestamp=2019-01-09T09%3A03%3A57Z",
    "revision": "abc123",
    "user": "tom",
    "namespace": "web",
    "exception": "Appsignal::Demo::TestError",
    "message": "Hello world! This is an error used for demonstration purposes.",
    "app_backtrace": [
      "/Users/tombruijn/.gem/ruby/2.5.3/gems/appsignal-2.8.1/lib/appsignal/demo.rb:49:in `create_example_error_request'",
      "/Users/tombruijn/.gem/ruby/2.5.3/gems/appsignal-2.8.1/lib/appsignal/demo.rb:35:in `transmit'",
      "/Users/tombruijn/.gem/ruby/2.5.3/gems/appsignal-2.8.1/lib/appsignal/cli/demo.rb:53:in `run'",
      "/Users/tombruijn/.gem/ruby/2.5.3/gems/appsignal-2.8.1/lib/appsignal/cli.rb:31:in `run'",
      "/Users/tombruijn/.gem/ruby/2.5.3/gems/appsignal-2.8.1/bin/appsignal:7:in `<top (required)>'",
      "/Users/tombruijn/.gem/ruby/2.5.3/bin/appsignal:23:in `load'",
      "/Users/tombruijn/.gem/ruby/2.5.3/bin/appsignal:23:in `<top (required)>'",
      "/Users/tombruijn/.gem/ruby/2.5.3/bin/bundle:23:in `<main>'"
    ],
    "first_backtrace_line": "/Users/tombruijn/.gem/ruby/2.5.3/gems/appsignal-2.8.1/lib/appsignal/demo.rb:49:in `create_example_error_request'",
    "action": "DemoController#hello",
    "path": "/hello",
    "hostname": "Toms-MacBook-Pro.local",
    "action_label": "request",
    "metadata": {
      "demo_sample": "true",
      "method": "GET",
      "path": "/hello"
    }
  }
}

Velden

VeldTypeBeschrijving
exceptionHash<String, Any>De webhook-payload betreft een exception-incident.

Subvelden van exception

VeldTypeBeschrijving
timeStringTijdstempel waarop de exception zich voordeed.
numberIntegerIncident-id zoals weergegeven op AppSignal.com.
siteStringApp-naam zoals te zien op AppSignal.com. Het veld site wordt om historische redenen gebruikt in plaats van app.
environmentStringApp-omgeving van de app zoals te zien op AppSignal.com.
app_urlStringURL naar de app op AppSignal.com die de webhook heeft geactiveerd.
urlStringURL naar de specifieke sample voor het incident op AppSignal.com dat deze webhook heeft geactiveerd.
revisionStringDe revisienaam van de deploy marker.
userStringDe gebruiker die de marker heeft aangemaakt. De waarde van user kan ook null zijn als deze niet is ingesteld voor een deploy marker-revisie.
namespaceStringDe namespace waarin deze exception zich heeft voorgedaan.
exceptionStringHet exception-type dat door AppSignal is geregistreerd.
messageStringHet exception-bericht met meer details over de exception.
app_backtraceArray<String>De regels van de backtrace die betrekking hebben op de app waaruit ze afkomstig zijn. Hierin zijn backtrace-regels van libraries die in de app zijn opgenomen, uitgesloten.
first_backtrace_lineStringDe eerste backtrace-regel uit het veld app_backtrace.
actionStringDe actie waarin deze exception zich heeft voorgedaan. Ofwel een controller-actie, een background worker of een handmatig ingestelde actie.
pathStringHet request-pad waarop de exception zich heeft voorgedaan. Dit wordt alleen ingesteld voor webrequests. Dit is metadata die standaard door de AppSignal-integratie wordt ingesteld en is ook opgenomen in het veld metadata.
hostnameStringDe hostnaam van de host waarop deze exception zich heeft voorgedaan.
action_labelStringEen gebruiksvriendelijke aanduiding voor het type actie waarin deze exception is opgetreden. Gebruikt request voor de namespace web en job voor de namespace background. Alle andere namespaces gebruiken action.
metadataHash<String, String>Dit bevat door de gebruiker ingestelde metadata (zie Tagging-functie).

Metadata-velden

U kunt eigen metadata toevoegen door samples te taggen.
VeldTypeBeschrijving
demo_sampleStringIngesteld door de AppSignal-integratie voor demo-samples die zijn verzonden via onze demo-commandoregeltool (Ruby / Elixir). Niet ingesteld voor alle andere samples.
methodStringDe request-methode die is gebruikt om een request uit te voeren. Alleen beschikbaar voor (web)requests.
pathStringHet request-pad waarop de exception zich heeft voorgedaan. Dit wordt alleen ingesteld voor webrequests. Bevat dezelfde waarde als het veld path.

Performance incidents

{
  "performance": {
    "time": "2019-01-10 09:38:08 UTC",
    "number": 1,
    "site": "My test app",
    "environment": "development",
    "app_url": "https://appsignal.com/test/sites/5bd867fa2213937f3666ae7b",
    "url": "https://appsignal.com/test/sites/5bd867fa2213937f3666ae7b/incidents/1?timestamp=2019-01-10T09%3A38%3A08Z",
    "revision": "abc123",
    "user": "tom",
    "namespace": "web",
    "duration": 2004.904052734375,
    "action": "DemoController#hello",
    "path": "/hello",
    "hostname": "Toms-MacBook-Pro.local",
    "action_label": "request",
    "metadata": {
      "demo_sample": "true",
      "method": "GET",
      "path": "/hello"
    }
  }
}

Velden

VeldTypeBeschrijving
performanceHash<String, Any>De webhook-payload betreft een performance-incident.

Subvelden van performance

VeldTypeBeschrijving
timeStringTijdstempel waarop het performance-incident zich heeft voorgedaan.
numberIntegerIncident-id zoals weergegeven op AppSignal.com.
siteStringApp-naam zoals te zien op AppSignal.com. Het veld site wordt om historische redenen gebruikt in plaats van app.
environmentStringApp-omgeving van de app zoals te zien op AppSignal.com.
app_urlStringURL naar de app op AppSignal.com die de webhook heeft geactiveerd.
urlStringURL naar de specifieke sample voor het incident op AppSignal.com dat deze webhook heeft geactiveerd.
revisionStringDe revisienaam van de deploy marker.
userStringDe gebruiker die de marker heeft aangemaakt. De waarde van user kan ook null zijn als deze niet is ingesteld voor een deploy marker-revisie.
namespaceStringDe namespace waarin dit performance-incident zich heeft voorgedaan.
durationFloatDe gemeten tijd in milliseconden die de request/job/actie nodig had om te voltooien.
actionStringDe actie waarin dit performance-incident zich heeft voorgedaan. Ofwel een controller-actie, een background worker of een handmatig ingestelde actie.
pathStringHet request-pad waarop het performance-incident zich heeft voorgedaan. Dit wordt alleen ingesteld voor webrequests. Dit is metadata die standaard door de AppSignal-integratie wordt ingesteld en is ook opgenomen in het veld metadata.
hostnameStringDe hostnaam van de host waarop dit performance-incident zich heeft voorgedaan.
action_labelStringEen gebruiksvriendelijke aanduiding voor het type actie waarin dit performance-incident is opgetreden. Gebruikt request voor de namespace web en job voor de namespace background. Alle andere namespaces gebruiken action.
metadataHash<String, String>Dit bevat door de gebruiker ingestelde metadata, zie metadata.

Metadata-velden

U kunt eigen metadata toevoegen door samples te taggen.
VeldTypeBeschrijving
demo_sampleStringIngesteld door de AppSignal-integratie voor demo-samples die zijn verzonden via onze demo-commandoregeltool (Ruby / Elixir). Niet ingesteld voor alle andere samples.
methodStringDe request-methode die is gebruikt om een request uit te voeren. Alleen beschikbaar voor (web)requests.
pathStringHet request-pad waarop het performance-incident zich heeft voorgedaan. Dit wordt alleen ingesteld voor webrequests. Bevat dezelfde waarde als het veld path.

Anomaly detection

{
  "alert_id": "5bdb1fb301925b0c4b6c7017",
  "state": "closed",
  "site": "google",
  "environment": "production",
  "tags": {
    "namespace": "web"
  },
  "human_tags": ["namespace: web"],
  "metric_name": "transaction_exception_rate",
  "field": "gauge",
  "trigger_label": "Exception rate",
  "trigger_description": "This is a description",
  "last_value": 12.0,
  "peak_value": 20.0,
  "mean_value": 11.0,
  "comparison_operator": "<",
  "comparison_value": 21.0,
  "human_last_value": "12 %",
  "human_peak_value": "20 %",
  "human_mean_value": "11 %",
  "human_comparison_value": "21 %",
  "created_at": "2017-08-01T10:00:00Z",
  "opened_at": "2017-08-01T10:05:00Z",
  "resolved_at": "2017-08-01T12:00:00Z",
  "closed_at": "2017-08-01T13:43:00Z",
  "warmup_duration": 10,
  "cooldown_duration": 20,
  "alert_url": "http://example.com/#{site.account.slug}/sites/#{site.id}/alerts/#{alert.id}",
  "edit_trigger_url": "http://example.com/#{site.account.slug}/sites/#{site.id}/triggers?overlay=triggerForm&triggerId=#{alert.trigger.id}"
}
VeldTypeBeschrijving
alert_idStringInterne AppSignal-alert-id voor de alert.
stateStringStatus van de alert.
siteStringDe applicatienaam waartoe de alert behoort.
environmentStringDe naam van de applicatieomgeving waartoe de alert behoort.
tagsArrayNamespace die aan de alert is gekoppeld.
human_tagsArrayAangepaste namespace die aan de alert is gekoppeld.
metric_nameStringNaam van de metric waarvoor de alert is aangemaakt.
fieldStringVeldnaam van de alert.
trigger_labelStringNaam van de trigger.
trigger_descriptionStringBeschrijving van de trigger.
last_valueStringLaatste waarde die voor de alert is geregistreerd.
peak_valueStringHoogste waarde die voor de alert is geregistreerd.
mean_valueStringGemiddelde van alle waarden voor de alert.
comparison_operatorStringVergelijkingsoperator ingesteld door de gebruiker, waarop de alert wordt geactiveerd.
comparison_valueStringVergelijkingswaarde van de metric ingesteld door de gebruiker, waarop de alert wordt geactiveerd.
human_last_valueStringLaatste metric-waarde die voor de alert is geregistreerd sinds deze geopend werd, in een leesbaarder formaat.
human_peak_valueStringHoogste metric-waarde die voor de alert werd geregistreerd terwijl deze open was.
human_mean_valueStringGemiddelde metric-waarde voor de alert terwijl deze open was, in een leesbaarder formaat.
human_comparison_valueStringVergelijkingswaarde voor de alert-metric, ingesteld door de gebruiker, waarop de alert wordt geactiveerd, in een leesbaar formaat.
created_atStringTijdstempel waarop de alert is aangemaakt.
opened_atStringTijdstempel (ISO8601) waarop de alert is geopend.
resolved_atStringTijdstempel (ISO8601) waarop de alert is opgelost.
closed_atStringTijdstempel (ISO8601) waarop de alert is gesloten.
warmup_durationStringTijd in minuten dat AppSignal wacht voordat een alert wordt geopend.
cooldown_durationStringTijd in minuten dat AppSignal wacht voordat een alert wordt gesloten.
alert_urlStringURL van de alert zodat de gebruiker deze in AppSignal kan bekijken.
edit_trigger_urlStringURL van de alert zodat de gebruiker deze in AppSignal kan bewerken.

Lijst met integraties