Aan de slag met logboekquery’s in Azure Monitor
Notitie
Als u gegevens verzamelt van ten minste één virtuele machine, kunt u deze oefening in uw eigen omgeving uitvoeren. Gebruik voor andere scenario's onze demo-omgeving, die tal van voorbeeldgegevens bevat.
Als u al weet hoe u query's kunt uitvoeren in Kusto-querytaal (KQL), maar snel nuttige query's moet maken op basis van resourcetypen, raadpleegt u het deelvenster opgeslagen voorbeeldquery's in Query's gebruiken in Azure Monitor Log Analytics.
In deze zelfstudie leert u logboekquery's schrijven in Azure Monitor. In dit artikel leert u het volgende:
- Inzicht in de querystructuur.
- Queryresultaten sorteren.
- Queryresultaten filteren.
- Geef een tijdsbereik op.
- Selecteer welke velden u wilt opnemen in de resultaten.
- Aangepaste velden definiëren en gebruiken.
- Resultaten aggregeren en groeperen.
Raadpleeg Aan de slag met Azure Monitor Log Analytics voor een zelfstudie over het gebruik van Log Analytics in de Azure Portal.
Zie Overzicht van logboekquery's in Azure Monitor voor meer informatie over logboekquery's in Azure Monitor.
Hier volgt een videoversie van deze zelfstudie:
Vereiste machtigingen
U moet bijvoorbeeld machtigingen hebben Microsoft.OperationalInsights/workspaces/query/*/read
voor de Log Analytics-werkruimten die u opvraagt, zoals opgegeven door de ingebouwde rol log analytics-lezer.
Een nieuwe query schrijven
Query's kunnen beginnen met een tabelnaam of de search
opdracht. Het is een goed idee om te beginnen met een tabelnaam, omdat hiermee een duidelijk bereik voor de query wordt gedefinieerd. Het verbetert ook de queryprestaties en de relevantie van de resultaten.
Notitie
KQL, dat wordt gebruikt door Azure Monitor, is hoofdlettergevoelig. Taaltrefwoorden worden meestal geschreven in kleine letters. Wanneer u namen van tabellen of kolommen in een query gebruikt, moet u het juiste hoofdlettergebruik gebruiken, zoals wordt weergegeven in het schemavenster.
Query's op basis van een tabel
Azure Monitor organiseert logboekgegevens in tabellen, die elk bestaan uit meerdere kolommen. Alle tabellen en kolommen worden weergegeven in het deelvenster met het schema in Log Analytics in de analyseportal. Identificeer een tabel waarin u geïnteresseerd bent en bekijk vervolgens een beetje gegevens:
SecurityEvent
| take 10
De voorgaande query retourneert 10 resultaten uit de SecurityEvent
tabel, in geen specifieke volgorde. Op deze gebruikelijke manier kunt u een overzicht krijgen van een tabel om inzicht te krijgen in de structuur en inhoud ervan. Laten we eens kijken hoe deze is opgebouwd:
De query begint met de tabelnaam
SecurityEvent
, waarmee het bereik van de query wordt gedefinieerd.Het sluisteken (|) scheidt opdrachten, dus de uitvoer van de eerste opdracht is de invoer van de volgende. U kunt elk gewenst aantal sluistekens toevoegen.
Na de pijp is de
take
operator.We kunnen de query zelfs uitvoeren zonder toe te voegen
| take 10
. De opdracht is nog steeds geldig, maar kan maximaal 30.000 resultaten opleveren.
Take
Gebruik de take
operator om een klein voorbeeld van records weer te geven door terug te keren naar het opgegeven aantal records. De geselecteerde resultaten zijn willekeurig en worden in geen bepaalde volgorde weergegeven. Als u resultaten in een bepaalde volgorde wilt retourneren, gebruikt u de sort
en top
operators.
Zoekquery 's
Zoekquery's zijn minder gestructureerd. Ze zijn beter geschikt voor het zoeken naar records die een specifieke waarde in een van hun kolommen bevatten:
search in (SecurityEvent) "Cryptographic"
| take 10
Met deze query wordt in de SecurityEvent
tabel gezocht naar records die de woordgroep 'Cryptografisch' bevatten. Van deze records worden 10 records geretourneerd en weergegeven. Als u het in (SecurityEvent)
onderdeel weglaat en alleen search "Cryptographic"
uitvoert, wordt de zoekopdracht over alle tabellen geleid. Het proces duurt dan langer en minder efficiënt.
Belangrijk
Zoekquery's zijn doorgaans langzamer dan query's op basis van tabellen, omdat ze meer gegevens moeten verwerken.
Sorteren en bovenaan
In deze sectie worden de sort
operators en top
de bijbehorende desc
argumenten beschreven asc
. Hoewel take
het handig is om een aantal records op te halen, kunt u de resultaten niet in een bepaalde volgorde selecteren of sorteren. Als u een geordende weergave wilt krijgen, gebruikt sort
u en top
.
Desc en asc
Desc
Gebruik het desc
argument om records in aflopende volgorde te sorteren. Aflopend is de standaardsorteringsvolgorde voor sort
en top
, zodat u het desc
argument meestal weglaat.
De gegevens die door beide van de volgende query's worden geretourneerd, worden bijvoorbeeld gesorteerd op de kolom TimeGenerated, in aflopende volgorde:
-
SecurityEvent | sort by TimeGenerated desc
-
SecurityEvent | sort by TimeGenerated
Asc
Als u wilt sorteren in oplopende volgorde, geeft u asc
op.
Sort
U kunt de sort
operator gebruiken. sort
sorteert de queryresultaten op de kolom die u opgeeft. sort
Beperk echter niet het aantal records dat door de query wordt geretourneerd.
Met de volgende query worden bijvoorbeeld alle beschikbare records voor de SecurityEvent
tabel geretourneerd. Dit is maximaal 30.000 records en sorteert deze op de kolom TimeGenerated.
SecurityEvent
| sort by TimeGenerated
De voorgaande query kan te veel resultaten opleveren. Het kan ook enige tijd duren om de resultaten te retourneren. De query sorteert de hele SecurityEvent
tabel op basis van de TimeGenerated
kolom. De Analytics-portal beperkt de weergave vervolgens tot slechts 30.000 records. Deze benadering is niet optimaal. De beste manier om alleen de meest recente records op te halen, is door de top
operator te gebruiken.
Boven
Gebruik de top
operator om de hele tabel aan de serverzijde te sorteren en vervolgens alleen de bovenste records te retourneren.
Met de volgende query worden bijvoorbeeld de meest recente tien records geretourneerd:
SecurityEvent
| top 10 by TimeGenerated
De uitvoer ziet eruit als in dit voorbeeld.
De where-operator: Filteren op een voorwaarde
Zoals hun naam al aangeeft, filteren filters de gegevens op een specifieke voorwaarde. Filteren is de meest voorkomende manier om queryresultaten te beperken tot relevante informatie.
Als u een filter wilt toevoegen aan een query, gebruikt u de where
operator gevolgd door een of meer voorwaarden. De volgende query retourneert bijvoorbeeld alleen SecurityEvent
records waarbij Level equals _8
:
SecurityEvent
| where Level == 8
Wanneer u filtervoorwaarden schrijft, kunt u de volgende expressies gebruiken:
Expression | Beschrijving | Voorbeeld |
---|---|---|
== | Gelijkheid controleren (hoofdlettergevoelig) |
Level == 8 |
=~ | Gelijkheid controleren (niet hoofdlettergevoelig) |
EventSourceName =~ "microsoft-windows-security-auditing" |
!=, <> | Ongelijkheid controleren (beide expressies zijn identiek) |
Level != 4 |
and , or |
Vereist tussen voorwaarden | Level == 16 or CommandLine != "" |
Als u wilt filteren op meerdere voorwaarden, kunt u een van de volgende methoden gebruiken:
Gebruik and
, zoals hier wordt weergegeven:
SecurityEvent
| where Level == 8 and EventID == 4672
Sluis meerdere where
elementen door, één na de andere, zoals hier wordt weergegeven:
SecurityEvent
| where Level == 8
| where EventID == 4672
Notitie
Waarden kunnen verschillende typen hebben, dus mogelijk moet u ze casten om vergelijkingen uit te voeren op het juiste type. De kolom is bijvoorbeeld van het type Tekenreeks, dus u moet deze SecurityEvent Level
casten naar een numeriek type, zoals int
of long
, voordat u er numerieke operatoren op kunt gebruiken, zoals hier wordt weergegeven: SecurityEvent | where toint(Level) >= 10
Een periode opgeven
U kunt een tijdsbereik opgeven met behulp van de tijdkiezer of een tijdfilter.
De tijdkiezer gebruiken
De tijdkiezer wordt weergegeven naast de knop Uitvoeren en geeft aan dat u alleen de afgelopen 24 uur query's uitvoert op records. Dit standaardtijdbereik wordt toegepast op alle query's. Als u alleen records van het afgelopen uur wilt ophalen, selecteert u Afgelopen uur en voert u de query opnieuw uit.
Een tijdfilter toevoegen aan de query
U kunt ook uw eigen tijdsbereik definiëren door een tijdfilter toe te voegen aan de query. Als u een tijdfilter toevoegt, wordt het geselecteerde tijdsbereik in de tijdkiezer overschreven.
U kunt het tijdfilter het beste direct achter de tabelnaam plaatsen:
SecurityEvent
| where TimeGenerated > ago(30m)
| where toint(Level) >= 10
In het voorgaande tijdfilter ago(30m)
betekent dit '30 minuten geleden'. Deze query retourneert alleen records uit de afgelopen 30 minuten, uitgedrukt als bijvoorbeeld 30 min. Andere tijdseenheden zijn dagen (bijvoorbeeld 2d) en seconden (bijvoorbeeld 10s).
Project gebruiken en uitbreiden om kolommen te selecteren en te berekenen
Gebruik project
dit om specifieke kolommen te selecteren die u wilt opnemen in de resultaten:
SecurityEvent
| top 10 by TimeGenerated
| project TimeGenerated, Computer, Activity
In het voorgaande voorbeeld wordt de volgende uitvoer gegenereerd:
U kunt ook de project
naam van kolommen wijzigen en nieuwe kolommen definiëren. In het volgende voorbeeld wordt het volgende gebruikt project
:
- Selecteer alleen de
Computer
enTimeGenerated
oorspronkelijke kolommen. Activity
De kolom weergeven alsEventDetails
.- Maak een nieuwe kolom met de naam
EventCode
. Desubstring()
functie wordt gebruikt om alleen de eerste vier tekens uit hetActivity
veld op te halen.
SecurityEvent
| top 10 by TimeGenerated
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)
U kunt extend
alle oorspronkelijke kolommen in de resultatenset behouden en andere kolommen definiëren. De volgende query gebruikt extend
om de EventCode
kolom toe te voegen. Deze kolom wordt mogelijk niet weergegeven aan het einde van de tabelresultaten. U moet de details van een record uitvouwen om deze weer te geven.
SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)
Samenvatten gebruiken om groepen rijen samen te voegen
Gebruik summarize
dit om groepen records te identificeren op basis van een of meer kolommen en aggregaties toe te passen. Het meest voorkomende gebruik van summarize
is count
, waarmee het aantal resultaten in elke groep wordt geretourneerd.
De volgende query controleert alle Perf
records van het afgelopen uur, groepeert ze op ObjectName
en telt de records in elke groep:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName
Soms is het zinvol om groepen te definiëren op basis van meerdere dimensies. Elke unieke combinatie van deze waarden definieert een afzonderlijke groep:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName
Een ander algemeen gebruik is het uitvoeren van wiskundige of statistische berekeningen op elke groep. In het volgende voorbeeld wordt het gemiddelde CounterValue
voor elke computer berekend:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer
Helaas zijn de resultaten van deze query betekenisloos omdat we verschillende prestatiemeteritems combineren. Als u de resultaten zinvoller wilt maken, berekent u het gemiddelde afzonderlijk voor elke combinatie van CounterName
en Computer
:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName
Samenvatten op een tijdkolom
Groepeerresultaten kunnen ook worden gebaseerd op een tijdkolom of een andere continue waarde. Samenvattend by TimeGenerated
zou echter groepen worden gemaakt voor elke milliseconde gedurende het tijdsbereik, omdat deze waarden uniek zijn.
Als u groepen wilt maken op basis van doorlopende waarden, kunt u het bereik het beste opsplitsen in beheerbare eenheden met behulp van bin
. Met de volgende query worden records geanalyseerd Perf
die het vrije geheugen (Available MBytes
) op een specifieke computer meten. Hiermee wordt de gemiddelde waarde van elke periode van 1 uur berekend gedurende de afgelopen 7 dagen:
Perf
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2"
| where CounterName == "Available MBytes"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)
Als u de uitvoer duidelijker wilt maken, kunt u ervoor kiezen om deze weer te geven als een tijddiagram, waarin het beschikbare geheugen in de loop van de tijd wordt weergegeven.
Veelgestelde vragen
In deze sectie vindt u antwoorden op veelgestelde vragen.
Waarom zie ik duplicaat records in Azure Monitor-logboeken?
Soms ziet u dubbele records in Azure Monitor-logboeken. Deze duplicatie is doorgaans afkomstig van een van de volgende twee voorwaarden:
- Onderdelen in de pijplijn hebben nieuwe pogingen om een betrouwbare levering op de bestemming te garanderen. Af en toe kan deze mogelijkheid leiden tot duplicaten voor een klein percentage telemetrie-items.
- Als de dubbele records afkomstig zijn van een virtuele machine, hebt u mogelijk zowel de Log Analytics-agent als de Azure Monitor-agent geïnstalleerd. Als u de Log Analytics-agent nog steeds nodig hebt, configureert u de Log Analytics-werkruimte om niet langer gegevens te verzamelen die ook worden verzameld door de regel voor gegevensverzameling die door de Azure Monitor-agent wordt gebruikt.
Volgende stappen
- Zie Werken met tekenreeksquery's in Azure Monitor-logboekquery's voor meer informatie over het gebruik van tekenreeksgegevens in een logboekquery.
- Zie Geavanceerde aggregaties in Azure Monitor-logboekquery's voor meer informatie over het samenvoegen van gegevens in een logboekquery.
- Zie Joins in Azure Monitor-logboekquery's voor meer informatie over het samenvoegen van gegevens uit meerdere tabellen.
- Download documentatie over de volledige Kusto-querytaal in de KQL-taalverwijzing.