Draai een Toepassingslogboeken SQL-query in een REST API eindpunt
Sla een query op in de querybuilder door te klikken. Nieuw eindpunt, and you have a URL at api.querystreams.com with its own key. The SQL runs read-only on the Agent that already reads your Application Logs file; the caller gets JSON or CSV and never sees the SQL, the schema or a password. Nothing to host, no port to open. About 90 seconds from a saved query, and the Free plan covers your first endpoint.
Wat je uiteindelijk overhoudt
Een URL op api.querystreams.com Hiermee worden de rijen van uw opgeslagen App Logs-query als JSON of CSV teruggestuurd naar iedereen die een sleutel heeft. Deze functie is getest vanuit de console in het portaal voordat u deze deelt. Bijvoorbeeld zo:
| Sleutel | Waarde | Beschrijving |
|---|---|---|
niveau string Optioneel | Seattle | Aanroepbaar filter uit de opgeslagen query |
X-API-sleutel | qsapi_AB•••••••••• | Jouw geheime token |
{
"niveau": "Seattle"
}| Koptekst | Waarde | Beschrijving |
|---|---|---|
X-API-sleutel | qsapi_AB•••••••••• | Uw geheime token. Eén per beller, op elk moment intrekbaar. |
Inhoudstype | applicatie/json | De parameters worden verzonden als een JSON-body. |
Accepteren | applicatie/json | Je krijgt JSON terug; als je om tekst/csv vraagt, krijg je CSV terug. |
curl -X POST "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19" \ -H "X-API-Key: qsapi_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"level": "Seattle"}'{
"kolommen": [ { "naam": "event_time", "type": "geheel getal" }, { "naam": "app", "type": "snaar" }, { "naam": "niveau", "type": "snaar" } ],
"rijen": [
{ "event_time": 1042, "app": "Northwind Traders", "niveau": "Seattle" },
{ "event_time": 1057, "app": "Alpine Outfitters", "niveau": "Denver" },
{ "event_time": 1063, "app": "Harbour Foods", "niveau": "Halifax" }
],
"meta": { "rij_aantal": 3, "agent_duration_ms": 41, "verzoek_id": "req_7Hq2mKd9" }
}| Koptekst | Waarde | Beschrijving |
|---|---|---|
inhoudstype | application/json; charset=utf-8 | De envelop op het tabblad 'Body' |
inhoudslengte | 412 | Aantal geretourneerde bytes; de groottebadge hierboven |
Application Logs bewaart uw gegevens in bestanden op een computer die u beheert. Iemand anders wil een deel van die gegevens gebruiken in zijn of haar app, dashboard of script, en de gebruikelijke oplossingen leveren te veel gegevens op: een database-login die het project overleeft, een dagelijkse export die 's ochtends alweer verouderd is, of een kleine API-server die iemand anders moet beheren en patchen. Query Streams maakt van het eindpunt een opgeslagen query plus een sleutel. De agent die al bij uw applicatielogbestanden staat, voert de query uit, api.querystreams.com controleert de sleutel en de limiet voor het aantal aanvragen, en de aanroeper ontvangt de rijen. De SQL, het schema en de inloggegevens verlaten uw account nooit.
Wat je nodig hebt
Een Query Streams-account
Elk abonnement bevat de REST API. Met het gratis abonnement krijg je één endpoint, twee sleutels en 250 rijen per aanroep, wat voldoende is om deze handleiding te maken. Meld je aan via mijn.querystreams.nl.
The Agent with your Application Logs file added as a connection
Nog niet klaar? Voeg het toe onder Gegevens → Gegevensagenten; dat duurt ongeveer tien minuten.
Een opgeslagen query in Query Builder
Het eindpunt omvat precies één opgeslagen query. Schrijf de SELECT-query, voer deze eenmaal uit en sla hem op. Voeg een dynamisch filter toe (een @variable (in de WHERE-clausule) als bellers moeten kunnen filteren.
Wie kan eindpunten creëren? Eigenaren, beheerders en makers. Als de API Dit item ontbreekt in je bovenste balk. Een beheerder kan het voor je gebruiker inschakelen via Account → MachtigingenIedereen met wie u een eindpunt deelt, heeft alleen een Query Streams-account nodig, ongeacht het abonnement.
Stel het in vier stappen in.
-
Sla de zoekopdracht op.
In Querybouwer Kies je App Logs-verbinding, schrijf de SELECT-query die je wilt publiceren en voer deze eenmaal uit om de rijen te bekijken. Beperk je tot de kolommen die de aanroeper nodig heeft; het eindpunt retourneert precies wat de query retourneert.
Opgeslagen query · fileset.eventsSELECT event_time, app, level, logger, message VAN fileset.events VOLGORDE DOOR event_time DESC LIMIET 100
Als bellers moeten kunnen filteren, voeg dan bijvoorbeeld een dynamisch filter toe.
WAAR niveau = @niveau. Elk@variablewordt een API-parameter in stap 3. Klik Sla en geef de query een naam; die naam wordt de weergavenaam van het eindpunt. -
Maak het eindpunt aan.
Open API klik in de bovenste balk Nieuw eindpuntDe tovenaar heeft vier stappen. Selecteer zoekopdracht, Configureren, Vergrendelingsparameters en Delen. Op Selecteer zoekopdrachtKlik op de query die u zojuist hebt opgeslagen; queries waarvan de agent offline is, worden grijs weergegeven. Klik Volgende.
Snelkoppeling. Vanuit de querybuilder kunt u de geopende query direct weergeven; de wizard start dan bij Configureren waarbij de zoekopdracht al is gekozen.
-
Parameters configureren en vergrendelen
Op Configureren De standaardinstellingen zijn correct voor een eerste eindpunt: Weergavenaam ingevuld op basis van de zoekopdracht, Levensduur Permanent (kies Verloopt (voor een tijdelijk aandeel), Reactiemodus Statisch (één JSON-antwoord; selecteer Streaming voor resultaten die de statische rijlimiet van uw plan overschrijden). Binnenindeling JSON. De responsmodus en -indeling worden vastgelegd zodra de respons is aangemaakt, dus bepaal ze hier. Klik Volgende.
Op Vergrendelingsparameters Alle dynamische filters in de query worden weergegeven. Laat de filters die bellers kunnen instellen ongewijzigd. Oproepbaar en geef elk een Naam van de queryreeks; vinkje Vereist Als een oproep zonder deze waarde zou mislukken, stel dan een waarde in die de beller niet mag wijzigen. Vergrendeld, of een datumscenario zoals Begin van de maand. Verborgen behoudt de standaardwaarde van de query zelf en weigert elke poging om deze in te stellen. Klik Volgende.
-
Deel en ontvang je sleutel
Op Delen je kunt uitnodigen Mensen via e-mail of voeg een toe Servicesleutel voor een server of een automatiseringstool, of sla beide voorlopig over. Klik Maak mijn sleutel aan en ontvang deze.Het succesenscherm toont de endpoint-URL en uw sleutel: een tekenreeks van 49 tekens die begint met
qsapi_Kopieer het. Je kunt het later weer weergeven via het eindpunt. Delen tab, zodat het niet verloren gaat als je het scherm sluit.Klik op Versturen in de console om de eerste oproep vanuit het portaal zelf te doen. Het antwoordvenster toont Status, Tijd en Maat, de Lichaam Het tabblad toont de JSON en de oproep verschijnt op de Activiteit tab een paar seconden later.
Dat is alles. Uw applicatielogbestanden reageren nu via een URL, alleen-lezen, op de sleutels die u hebt verstrekt. Er is niets geïnstalleerd, geen poort geopend en de SQL-query is in uw account gebleven.
Bel het vanaf elke locatie
Vervang de endpoint-ID door die van jou uit de adresbalk van de console en qsapi_UW_SLEUTEL met uw sleutel. Aanroepbare parameters worden in de queryreeks van een GET-verzoek geplaatst; hier wordt de opgeslagen query weergegeven. niveau:
curl "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19?level=Seattle" \ -H "X-API-Key: qsapi_YOUR_KEY"
{
"kolommen": [ { "naam": "event_time", "type": "geheel getal" }, { "naam": "app", "type": "snaar" }, { "naam": "niveau", "type": "snaar" } ],
"rijen": [
{ "event_time": 1042, "app": "Northwind Traders", "niveau": "Seattle" },
{ "event_time": 1057, "app": "Alpine Outfitters", "niveau": "Denver" },
{ "event_time": 1063, "app": "Harbour Foods", "niveau": "Halifax" }
],
"meta": { "rij_aantal": 3, "agent_duration_ms": 41, "verzoek_id": "req_7Hq2mKd9" }
}De rijen worden geretourneerd als objecten, gesleuteld op kolomnaam, met de kolomlijst en een meta Een blok dat aangeeft hoeveel rijen er zijn, of het resultaat is afgekapt en de aanvraag-ID die je kunt gebruiken ter ondersteuning. Dezelfde aanroep als een POST-verzoek plaatst de parameters in een JSON-body, wat de juiste keuze is voor lange lijsten met waarden:
curl -X POST "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19" \ -H "X-API-Key: qsapi_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"level": "Seattle"}}'?format=csv- CSV in plaats van JSON, inclusief kopregel.
Accepteren: tekst/csvdoet hetzelfde. Streaming-eindpunten retourneren NDJSON (één JSON-object per regel) met een eindpunt{"_summary": true, "row_count": N}regel; controleer die laatste regel. ?sample=true- Maximaal vijf rijen, niet gefactureerd. Handig voor het aansluiten van een klant.
compressie=lz4- Een LZ4-frame behuizing voor apparaten met een hoog belvolume en een decoder; Code Het tabblad bevat het decoderfragment per taal. Standaard gzip wordt automatisch toegepast wanneer uw client een bericht verzendt.
Accept-Encoding: gzip. Autorisatie: Drager qsapi_…- Geaccepteerd als alias voor
X-API-sleutelGebruik het vanuit de browsercode.
Waar het aangesloten wordt
Excel en Power BI
Exporteren → Power Query M (.pq) Dit geeft je een kant-en-klare query. Plak deze in de geavanceerde editor (Excel: Gegevens → Gegevens ophalen → Van andere bronnen → Lege query; Power BI: Start → Gegevens transformeren → Nieuwe bron → Lege query) en vervang de placeholder door je eigen query. qsapi_ sleutel.
Postbode, slapeloosheid, hinkelen
Hetzelfde Exporteren Met het menu kunt u een Postman v2.1-collectie, een Insomnia v5-export of een Hoppscotch-collectie downloaden, waarbij de parameters zijn ingevuld en een placeholder voor de sleutel is toegevoegd.
Je eigen code
De Code Het tabblad bevat werkende voorbeelden voor cURL, Python, JavaScript, TypeScript, Java, C#, Go, PHP, PowerShell en Ruby. Exporteren → OpenAPI 3.1-specificatie Voedt elke clientgenerator of Swagger UI.
n8n, Zapier, Make, cron
Maak een Servicesleutel Plak voor de tool de URL en de sleutel in het HTTP-knooppunt en plan de uitvoering in. Elke tool krijgt een eigen sleutel, zodat je er één kunt intrekken zonder de andere aan te raken.
Wat de plannen toestaan
| Plan | Eindpunten | Sleutels per eindpunt | Personen per eindpunt | Rijen per oproep (statisch) | Rijen per oproep (streaming) | Gesprekken per minuut, per toets |
|---|---|---|---|---|---|---|
| Gratis | 1 | 2 | 1 | 250 | 250 | 3 |
| Persoonlijke kern | 2 | 3 | 2 | 5,000 | 250,000 | 15 |
| Persoonlijk Plus | 5 | 5 | 5 | 10,000 | 500,000 | 30 |
| Bedrijfskern | 5 | 10 | 10 | 50,000 | 1,000,000 | 300 |
| Business Plus | 10 | 20 | 25 | 100,000 | 5,000,000 | 600 |
| Business Max | 25 | 30 | 50 | 250,000 | 10,000,000 | 600 |
| Enterprise Core | 50 | 50 | 100 | 500,000 | 25,000,000 | 1,000 |
| Enterprise Plus | 100 | 100 | 250 | 1,000,000 | 50,000,000 | 1,000 |
| Enterprise Max | 250 | 200 | 500 | 2,500,000 | 100,000,000 | 1,500 |
Elke aanroep heeft een vaste time-out van 60 seconden voor de query en een maximale responsgrootte van 8 MiB. De geretourneerde bytes tellen mee voor je maandelijkse datalimiet, dezelfde limiet die de Excel- en Google Sheets-invoegtoepassingen gebruiken. De gratis versie heeft één eindpunt en 5 MB per maand, wat ruim voldoende is voor een kleine tabel die meerdere keren per dag wordt opgevraagd. Bekijk de prijspagina. voor de vergoedingen per plan.
Gratis is een abonnement dat je behoudt. Het is geen proefperiode die verloopt. Bekijk precies wat het inhoudt op de website. prijspagina.
Het veilig bewaren
De SQL-gegevens blijven van jou.
Bellers ontvangen rijen. Ze zien nooit de query, de tabelnamen of de verbindingsgegevens, en ze kunnen niet wijzigen wat het eindpunt uitvoert.
Eén sleutel, één eindpunt, één beller.
Een sleutel werkt voor precies één eindpunt. Geef elke persoon of tool een eigen sleutel, en elk gesprek wordt daaraan gekoppeld. Trek één sleutel in en de andere blijven werken; de intrekking wordt binnen ongeveer vijf minuten van kracht.
Alleen-lezen, aan jouw kant van de muur.
De agent voert de opgeslagen SELECT-opdracht uit, en verder niets, vanuit uw eigen netwerk, via een eigen uitgaande verbinding. Er hoeft geen poort geopend te worden en er zijn geen inloggegevens nodig via internet.
Elke oproep in het grootboek
De Activiteit Het tabblad toont elk gesprek met tijd, ontvanger, status, rijen, bytes en duur, inclusief geweigerde gesprekken. Stel een Verloopt De levensduur van een tijdelijke share is beperkt en het eindpunt schakelt zichzelf op die datum uit.
Als iets niet werkt
| Status | Code | Wat te doen |
|---|---|---|
| 401 | API_KEY_REQUIRED / API_KEY_INVALID | De header ontbreekt of de sleutel is onjuist. Verzenden X-API-sleutel: qsapi_…Alle 49 tekens. Sleutels kunnen opnieuw worden gekopieerd via het tabblad 'Delen' van het eindpunt. |
| 403 | API_KEY_ENDPOINT_MISMATCH | Een geldige sleutel die op een ander eindpunt wordt gebruikt. Elke sleutel hoort bij één eindpunt. |
| 403 | API_KEY_REVOKED / API_ENDPOINT_EXPIRED | De sleutel is ingetrokken of het eindpunt heeft de vervaldatum bereikt. Genereer een nieuwe sleutel of herstel het eindpunt. |
| 400 | API_PARAM_NOT_OVERRIDABLE | Je hebt een parameter verzonden die de eigenaar niet als 'Callable' heeft gemarkeerd. In de body staan de toegestane namen vermeld. |
| 414 | API_QUERY_TE_GROOT | De GET-queryreeks bevat 8 KB of 200 lijstwaarden. Verstuur dezelfde parameters als in de JSON-body van een POST-verzoek. |
| 413 | API_UITVOER_TE_GROOT | Het resultaat overschreed de limiet van 8 MiB. Verfijn de query of schakel het eindpunt over naar streaming. |
| 429 | API-tarief beperkt | Er zijn deze minuut te veel oproepen voor de sleutel of het eindpunt. Wacht even. Opnieuw proberen na seconden, of verhogen Snelheidslimiet Onder API-instellingen → Standaardwaarden in uw abonnement. |
| 429 | API_DATA_REALM_UITGEPUT | Het maandelijkse datalimiet van de eigenaar is opgebruikt. Het wordt aan het begin van de factureringsmaand gereset; upgrade voor meer data. |
| 503 | API_AGENT_NIET_VERBONDEN | De agent achter uw toepassingslogboekbestand is offline. Controleer dit onder Gegevens → Gegevensagenten; de aanroepen zullen weer lukken zodra de verbinding hersteld is. |
| 504 | API_QUERY_TIMEOUT | De query duurde langer dan 60 seconden. Voeg een filter of een index toe, of sla een meer specifieke query op. |
Elk foutlichaam heeft de vorm {"error": {"code": "…", "message": "…"}} en elk antwoord bevat een X-QS-Request-Id koptekst. Vermeld het ID tussen aanhalingstekens wanneer u contact opneemt met de supportafdeling.
Vragen die mensen stellen
Worden mijn gegevens naar Query Streams gekopieerd?
Nee. De agent voert de query uit op de locatie waar uw gegevens zich bevinden en verzendt alleen de rijen waar de oproep om heeft gevraagd. Er vindt tussendoor geen synchronisatie of cache plaats; elke oproep voert de query uit.
Kunnen bellers de SQL-query wijzigen of om andere tabellen vragen?
Nee. Een eindpunt voert één opgeslagen query uit. Aanroepers kunnen alleen de parameters instellen die u hebt gemarkeerd. OproepbaarEn de waarden worden veilig afgeschermd: tekst wordt tussen aanhalingstekens geplaatst en ontsnapt, getallen worden gecontroleerd op bereik en lijsten worden uitgebreid.
Hoe geef ik dit aan een partner?
Op het eindpunt Delen tab kiezen Mensen en voer hun e-mailadres in. Ze ontvangen een magische link, loggen in met dat adres (een gratis account is voldoende) en genereren hun eigen sleutel; je ziet hun oproepen op naam op het tabblad Activiteit. Voor een server of een automatiseringstool maak je een API-sleutel met een etiket in plaats daarvan.
Wat gebeurt er als ik de opgeslagen query bewerk?
Het eindpunt voert de nieuwe SQL-query uit bij de volgende aanroep en de OpenAPI-specificatie wordt opnieuw gegenereerd. De URL en de sleutels blijven ongewijzigd. Als u een filter toevoegt of verwijdert, ga dan opnieuw naar de betreffende pagina. Vergrendelingsparameters zodat bellers de juiste parameters te zien krijgen.
Is dit echt inbegrepen bij het gratis abonnement?
Ja. Gratis is een abonnement dat je behoudt, geen proefperiode die verloopt. Het omvat één eindpunt, twee sleutels en 250 rijen per aanroep. Bekijk precies wat het inhoudt op de website. prijspagina.
Ondersteunt het eindpunt het SQL-dialect van App Logs?
Ja, want de SQL-query is van jou. Je hebt hem zelf geschreven en uitgevoerd op je applicatielogbestanden in Query Builder; het eindpunt voert precies diezelfde query uit via dezelfde verbinding, waarbij jouw parameterwaarden worden gebonden zoals App Logs dat verwacht.
Moeten mijn applicatielogbestanden via internet bereikbaar zijn?
Nee. Alleen de agent hoeft er toegang toe te hebben, vanuit uw eigen netwerk. De agent maakt één uitgaande verbinding met Query Streams; bellers communiceren met api.querystreams.com en nooit met uw computer.
Gerelateerde handleidingen
Elke gids voor App Logs
Is dit niet helemaal jouw situatie?
- Zijn dit Docker-containerlogs? Containerlogs voegt de containernaam en Docker's eigen tijdstempels toe → Container Logs
- Is uw logformaat niet een van de standaard logtypen? Met een aangepaste logmap kunt u het formaat zelf definiëren → Custom Logs
- Zijn uw JSON-bestanden data-exports in plaats van logbestanden? De JSONL-map maakt van elk veld een aparte kolom → JSONL Folder
- Zijn dit Caddy-logboeken of logboeken van andere webservers? Webserverlogboeken zetten elk verzoek om in een regel met pad en status → Web Logs
Setup trouble?
- Agent says the file or folder does not exist, or access is denied? Mapped drives, network shares, OneDrive and Linux home folders each need one fix → Where the Agent can read files from
- Agent shows Offline, or Test connection and Browse are greyed out? Check that the Agent is online → Is the Agent online?

