Type uitdaging: Datadog Logs Preview
Genereer een link naar een logboek met filters voor Datadog met Typescript-typen
Bij Slash vinden we het leuk om te onderzoeken wat we kunnen doen met het typesysteem van Typescript om onze code typeveilig en onderhoudbaar te maken. Hoewel niet alle toepassingen van typeveiligheid in de praktijk nuttig zijn, vinden we ze interessant en leuk. Als ze geen invloed hebben op de onderhoudbaarheid, laten we ze af en toe in onze codebase staan als 'easter eggs'.
Als u een oplossing heeft, stuur deze dan naar ons op via engineering@slash.com.
Overzicht
We definiëren 'gestructureerde' logs in code en definiëren ook bijbehorende metrics bovenop die logs, waarmee we dashboards kunnen bouwen en geautomatiseerde waarschuwingen kunnen instellen. Op Datadog wordt het definiëren van een metric bovenop een log een Log MetricEr wordt een logmetriek gemaakt met filters en aggregatieregels om te bepalen hoe de metriek uit logbestanden moet worden afgeleid.
In onze codebase hebben we een eenvoudige set sterk getypeerde helpers om het gemakkelijker te maken nieuwe logs en metrics voor hen te definiëren (dit is de code die u aan de rechterkant ziet). We hebben ook een "preview"-helper voor DX-doeleinden. Wanneer een ontwikkelaar de filters voor een metric configureert, kan hij in realtime een preview bekijken van de URL die Typescript berekent en de resultaten in de browser bekijken om er zeker van te zijn dat hij de juiste filters toepast.
Uitdaging
Implementeer het type GetDatadogLogPreviewResponse zodat de juiste Datadog-URL wordt gegenereerd via types wanneer we metrisch.previewDe URL in de bestaande code is correct, dus je moet de typefout 'repareren'.
Dit zijn die van Datadog. documenten rondom hoe hun logboekzoek-syntaxis werkt. Elk doorzoekbaar logboek kan ook worden gecodeerd in een URL die zij vrijgeven. Hier volgt een algemene beschrijving van hoe URL-gecodeerde filters voor logboeken werken:
- De basis-URL is
https://app.datadoghq.com/logs - Er is één queryparameter
querydie een URL-gecodeerde tekenreeks van de volledige zoekopdracht ondersteunt.
Hieronder staan voorbeelden van hoe een invoer -> uitvoer eruitziet. Deze geven allemaal de filters weer in een niet-URI-gecodeerde tekenreeks:
- Doel: "duur gelijk aan 100 toepassen" -> Uitvoer:
query=@duur:100 - Doel: "duur langer dan 100 toepassen" -> Uitvoer:
query=@duur:>100 - Doel: "apply http.status_code is not 200" -> Uitvoer:
query=-@http.status_code:200 - Doel: "pas http.status_code toe is 200 of 400" -> Uitvoer:
query=(@http.status_code:200 OF @http.status_code:400) - Doel: "http.route toepassen is als /api/v1/_" -> Uitvoer:
query=@http.route:/api/v1/_