Doorzoek logregels met de Public API (V2). Dit is de manier om
logs programmatisch op te vragen, inclusief gestructureerde (JSON) loggegevens. De GraphQL
API stelt geen logregels beschikbaar.
Bent u een AI-agent of -assistent aan het bouwen, dan stelt AppSignal MCP
logzoekopdrachten en andere monitoringgegevens rechtstreeks beschikbaar voor agents, zonder
dat u deze API zelf hoeft aan te roepen.
Uw site- en bron-ID’s vinden
Een logzoekopdracht heeft een site_id en een of meer source_ids nodig. Beide verschijnen in de
URL van een log source in AppSignal. Open een log source en lees ze uit het pad:
https://appsignal.com/<organization>/sites/<SITE_ID>/logs/sources/<SOURCE_ID>
Logregels doorzoeken
Request body
| Veld | Type | Vereist | Beschrijving |
|---|
site_id | string | Ja | Site om op te vragen. |
source_ids | string[] | Ja | Log source-ID’s om te doorzoeken. Ten minste één is vereist. |
query | string | Ja | Querystring die logregels filtert. Zie querytaal. |
use_expressions | boolean | Nee | Als true, parse query met de expressie-gebaseerde querytaal. |
from | string (ISO 8601) | Nee | Startpunt van het tijdsbereik. Standaard is de ondergrens van de retentie. |
to | string (ISO 8601) | Nee | Eindpunt van het tijdsbereik. Standaard is de huidige tijd. |
pagination | object | Ja | Paginatie-cursor en -richting (zie de volgende sectie). |
Stel use_expressions in op true om de expressie-gebaseerde querytaal te gebruiken
die op deze pagina wordt gedocumenteerd.
pagination neemt per_page (number), order (ASC of DESC) en een cursor
met een time-veld (een ISO 8601-tijdstempel, of null voor de eerste pagina). Om
de volgende pagina op te halen, verzendt u de tijdstempel van de laatste regel die u ontving als de
cursor.time van het volgende verzoek.
Voorbeeld van een verzoek
curl --request POST \
--url "https://appsignal.com/api/v2/logs/lines" \
--header "Authorization: Bearer YOUR-PERSONAL-API-TOKEN" \
--header "Content-Type: application/json" \
--data @body.json
{
"site_id": "YOUR-SITE-ID",
"source_ids": ["YOUR-LOG-SOURCE-ID"],
"query": "severity=error status_code=401",
"use_expressions": true,
"from": "2026-06-22T00:00:00Z",
"to": "2026-06-22T23:59:59Z",
"pagination": {
"per_page": 100,
"order": "DESC",
"cursor": { "time": null }
}
}
Response
Het eindpunt retourneert een array van logregels. Elke regel bevat deze velden:
| Veld | Type | Beschrijving |
|---|
id | string | Logregel-identificator. |
timestamp | string (ISO 8601) | Wanneer de logregel is vastgelegd. |
source_id | string | Log source waar de regel bij hoort. |
severity | string | Severityniveau, zoals info of error. |
message | string | De body van het logbericht. |
hostname | string | Host die de regel heeft geproduceerd. |
group | string | Loggroep. |
json | string | De ruwe gestructureerde (JSON) body van de logregel, indien beschikbaar. |
attributes | object | Verouderde getypeerde sleutel-waardeattributen. Wordt uitgefaseerd — geef de voorkeur aan json. |
Gestructureerde velden zoals status_code, path of detail zitten in het json-
veld, niet in attributes. Vraag ze op via hun exacte sleutel zoals deze in uw
log-JSON voorkomt (bijvoorbeeld status_code=401 of detail.message:"required").
Querytaal
Wanneer use_expressions true is, ondersteunt de query-string booleaanse logica over
velden van logregels en de gestructureerde json-body.
Operatoren
| Operator | Naam | Gedrag |
|---|
= | Gelijk aan | Exacte overeenkomst. |
!= | Niet gelijk aan | Exacte niet-overeenkomst. |
: | Bevat | Substring-overeenkomst. |
!: | Bevat niet | Substring-niet-overeenkomst. |
> | Groter dan | Numerieke vergelijking. |
>= | Groter dan of gelijk | Numerieke vergelijking. |
< | Kleiner dan | Numerieke vergelijking. |
<= | Kleiner dan of gelijk | Numerieke vergelijking. |
String-operatoren (=, !=, :, !:) vergelijken beide kanten als strings. Numerieke
operatoren (>, >=, <, <=) casten beide kanten naar een getal; als een waarde niet
als getal kan worden geparsed, wordt die logregel overgeslagen.
Expressies combineren
- AND / OR:
severity=error AND hostname:web, of severity=info OR severity=warn.
- Impliciete AND: een spatie tussen expressies betekent AND.
severity=error hostname:web is hetzelfde als severity=error AND hostname:web.
- Nesten met haakjes:
message:"API request" AND (severity=info OR severity=warn).
- Voorrang: AND bindt sterker dan OR.
Elke operator kan binnen een OR-groep worden gebruikt, niet alleen gelijkheid — bijvoorbeeld
message:"API request" AND (user.id>1000 OR user.email:"example.com").
Velden
Gegeven een logregel met deze JSON-body:
{
"message": "API request completed",
"severity": "info",
"duration": 156.7,
"status_code": 200,
"user": {
"id": 12345,
"roles": ["admin", "developer"],
"location.country": "US"
}
}
- Basisvelden:
message, severity, hostname en group matchen de top-level velden van de logregel.
- Geneste JSON: gebruik puntnotatie om in de
json-body te reiken, zoals status_code=200 of user.id=12345.
- JSON-arrays: indexeer array-elementen, zoals
user.roles.0=admin.
- Geëscapete punten: om een letterlijke punt in een sleutelnaam te matchen, escape hem.
user.location\.country=US matcht de sleutel location.country binnen user, in plaats van een genest country-object.
- Standaardveld: een losse term zonder veld matcht
message met de bevat-operator. timeout is hetzelfde als message:timeout.
U hoeft attributes. niet voor een veld te zetten of er een typesuffix achter te plakken om een veld op te vragen
— verwijs er direct naar op naam. Zie verouderde query-
syntax als u oudere queries heeft.
Waarden tussen aanhalingstekens
Plaats waarden die spaties of haakjes bevatten tussen dubbele aanhalingstekens. Anders splitst de
spatie de waarde in afzonderlijke expressies die met impliciete AND worden verbonden.
message:"hello world" matches message containing "hello world"
message:hello world parsed as message:hello AND message:world
severity=error message:"oh no" severity equals error AND message contains "oh no"
Alleen dubbele aanhalingstekens worden herkend. Escape binnen een waarde tussen aanhalingstekens een aanhalingsteken met
\" en een backslash met \\. Bijvoorbeeld, message:"value with \"quotes\""
matcht de tekst value with "quotes".
Verouderde queryssyntax
Oudere queries sloegen attributen op als getypeerde velden, dus moesten ze
attributes. voorvoegen, een typesuffix toevoegen (_string, _int) en een [ ]-lijst gebruiken voor
meerdere waarden. De huidige querytaal verwijdert alle drie — verwijs direct naar velden
en gebruik OR in plaats van een lijst:
message:"API request" attributes.user_id_int=12345 severity=[info, warn]
Een query die nog steeds de verouderde syntax gebruikt, retourneert een 422 met de
legacy_log_query_syntax-foutslug.