Kom igång med loggfrågor i Azure Monitor
Kommentar
Om du samlar in data från minst en virtuell dator kan du gå igenom den här övningen i din egen miljö. I andra scenarier använder du vår demomiljö, som innehåller massor av exempeldata.
Om du redan vet hur du frågar i Kusto-frågespråk (KQL) men snabbt behöver skapa användbara frågor baserat på resurstyper kan du läsa fönstret med sparade exempelfrågor i Använda frågor i Azure Monitor Log Analytics.
I den här självstudien lär du dig att skriva loggfrågor i Azure Monitor. Artikeln visar hur du:
- Förstå frågestrukturen.
- Sortera frågeresultat.
- Filtrera frågeresultat.
- Ange ett tidsintervall.
- Välj vilka fält som ska inkluderas i resultatet.
- Definiera och använd anpassade fält.
- Aggregera och gruppera resultat.
En självstudiekurs om hur du använder Log Analytics i Azure Portal finns i Kom igång med Azure Monitor Log Analytics.
Mer information om loggfrågor i Azure Monitor finns i Översikt över loggfrågor i Azure Monitor.
Här är en videoversion av den här självstudien:
Behörigheter som krävs
Du måste ha Microsoft.OperationalInsights/workspaces/query/*/read
behörighet till de Log Analytics-arbetsytor som du frågar efter, till exempel den inbyggda rollen Log Analytics Reader.
Skriva en ny fråga
Frågor kan börja med antingen ett tabellnamn eller search
kommandot . Det är en bra idé att börja med ett tabellnamn eftersom det definierar ett tydligt omfång för frågan. Det förbättrar också frågeprestanda och resultatets relevans.
Kommentar
KQL, som används av Azure Monitor, är skiftlägeskänsligt. Språknyckelord skrivs vanligtvis med gemener. När du använder namn på tabeller eller kolumner i en fråga bör du använda rätt skiftläge, som du ser i schemafönstret.
Tabellbaserade frågor
Azure Monitor organiserar loggdata i form av tabeller som var och en består av flera kolumner. Alla tabeller och kolumner visas i schemafönstret i Log Analytics i Analysportalen. Identifiera en tabell som du är intresserad av och ta sedan en titt på lite data:
SecurityEvent
| take 10
Föregående fråga returnerar 10 resultat från SecurityEvent
tabellen, i ingen specifik ordning. Det här vanliga sättet att få en överblick över en tabell hjälper dig att förstå dess struktur och innehåll. Nu ska vi undersöka hur den skapas:
Frågan börjar med tabellnamnet
SecurityEvent
, som definierar frågans omfång.Tecknet pipe (|) separerar kommandon, så utdata från det första kommandot är indata för nästa. Du kan lägga till valfritt antal piped-element.
Operatören
take
följer röret.Vi kan köra frågan även utan att lägga till
| take 10
. Kommandot skulle fortfarande vara giltigt, men det kan returnera upp till 30 000 resultat.
Ta
Använd operatorn take
för att visa ett litet urval av poster genom att returnera upp till det angivna antalet poster. De valda resultaten är godtyckliga och visas i ingen särskild ordning. Om du behöver returnera resultat i en viss ordning använder du operatorerna sort
ochtop
.
Sökfrågor
Sökfrågorna är mindre strukturerade. De passar bättre för att hitta poster som innehåller ett specifikt värde i någon av deras kolumner:
search in (SecurityEvent) "Cryptographic"
| take 10
Den här frågan söker i SecurityEvent
tabellen efter poster som innehåller frasen "Kryptografi". Av dessa poster returneras och visas 10 poster. Om du utelämnar in (SecurityEvent)
delen och bara search "Cryptographic"
kör går sökningen över alla tabeller. Processen skulle sedan ta längre tid och vara mindre effektiv.
Viktigt!
Sökfrågor är vanligtvis långsammare än tabellbaserade frågor eftersom de måste bearbeta mer data.
Sortera och överst
I det här avsnittet beskrivs operatorerna sort
och top
samt deras desc
argument och asc
argument. Även om take
det är användbart för att hämta några poster kan du inte välja eller sortera resultaten i någon viss ordning. Om du vill hämta en ordnad vy använder du sort
och top
.
Desc och asc
Desc
desc
Använd argumentet för att sortera poster i fallande ordning. Fallande är standardsorteringsordningen för sort
och top
, så du kan vanligtvis utelämna desc
argumentet.
Till exempel sorteras data som returneras av båda följande frågor efter kolumnen TimeGenerated i fallande ordning:
-
SecurityEvent | sort by TimeGenerated desc
-
SecurityEvent | sort by TimeGenerated
Asc
Om du vill sortera i stigande ordning anger du asc
.
Sortera
Du kan använda operatornsort
. sort
sorterar frågeresultatet efter den kolumn som du anger. Begränsar dock sort
inte antalet poster som returneras av frågan.
Följande fråga returnerar till exempel alla tillgängliga poster för SecurityEvent
tabellen, som är upp till högst 30 000 poster, och sorterar dem efter kolumnen TimeGenerated.
SecurityEvent
| sort by TimeGenerated
Föregående fråga kan returnera för många resultat. Det kan också ta lite tid att returnera resultaten. Frågan sorterar hela SecurityEvent
tabellen efter TimeGenerated
kolumnen. Analysportalen begränsar sedan visningen till endast 30 000 poster. Den här metoden är inte optimal. Det bästa sättet att bara hämta de senaste posterna är att använda operatorntop
.
Främsta
Använd operatorn top
för att sortera hela tabellen på serversidan och returnera endast de översta posterna.
Följande fråga returnerar till exempel de senaste 10 posterna:
SecurityEvent
| top 10 by TimeGenerated
Utdata ser ut som i det här exemplet.
Where-operatorn: Filtrera efter ett villkor
Filter, som anges med deras namn, filtrerar data efter ett specifikt villkor. Filtrering är det vanligaste sättet att begränsa frågeresultat till relevant information.
Om du vill lägga till ett filter i en fråga använder du operatorn where
följt av ett eller flera villkor. Följande fråga returnerar till exempel endast SecurityEvent
poster där Level equals _8
:
SecurityEvent
| where Level == 8
När du skriver filtervillkor kan du använda följande uttryck:
Uttryck | Beskrivning | Exempel |
---|---|---|
== | Kontrollera likhet (skiftlägeskänslig) |
Level == 8 |
=~ | Kontrollera likhet (skiftlägesokänsligt) |
EventSourceName =~ "microsoft-windows-security-auditing" |
!=, <> | Kontrollera ojämlikhet (båda uttrycken är identiska) |
Level != 4 |
and , or |
Krävs mellan villkor | Level == 16 or CommandLine != "" |
Om du vill filtrera efter flera villkor kan du använda någon av följande metoder:
Använd and
, som du ser här:
SecurityEvent
| where Level == 8 and EventID == 4672
Rör flera where
element, en efter en, som visas här:
SecurityEvent
| where Level == 8
| where EventID == 4672
Kommentar
Värden kan ha olika typer, så du kan behöva casta dem för att utföra jämförelser på rätt typ. Kolumnen är till exempel SecurityEvent Level
av typen Sträng, så du måste omvandla den till en numerisk typ, till exempel int
eller long
, innan du kan använda numeriska operatorer på den, som du ser här: SecurityEvent | where toint(Level) >= 10
Ange ett tidsintervall
Du kan ange ett tidsintervall med hjälp av tidsväljaren eller ett tidsfilter.
Använda tidsväljaren
Tidsväljaren visas bredvid knappen Kör och anger att du bara har frågat efter poster från de senaste 24 timmarna. Det här standardtidsintervallet tillämpas på alla frågor. Om du bara vill hämta poster från den senaste timmen väljer du Senaste timme och kör sedan frågan igen.
Lägga till ett tidsfilter i frågan
Du kan också definiera ditt eget tidsintervall genom att lägga till ett tidsfilter i frågan. Om du lägger till ett tidsfilter åsidosätts det valda tidsintervallet i tidsväljaren.
Det är bäst att placera tidsfiltret direkt efter tabellnamnet:
SecurityEvent
| where TimeGenerated > ago(30m)
| where toint(Level) >= 10
I föregående tidsfilter ago(30m)
betyder "30 minuter sedan". Den här frågan returnerar poster från endast de senaste 30 minuterna, vilket uttrycks som till exempel 30 m. Andra tidsenheter är dagar (till exempel 2d) och sekunder (till exempel 10-talet).
Använda projekt och utöka för att välja och beräkna kolumner
Använd project
för att välja specifika kolumner som ska inkluderas i resultatet:
SecurityEvent
| top 10 by TimeGenerated
| project TimeGenerated, Computer, Activity
Föregående exempel genererar följande utdata:
Du kan också använda project
för att byta namn på kolumner och definiera nya. I nästa exempel används project
för att göra följande:
- Välj endast de ursprungliga kolumnerna
Computer
ochTimeGenerated
. Activity
Visa kolumnen somEventDetails
.- Skapa en ny kolumn med namnet
EventCode
. Funktionensubstring()
används för att bara hämta de första fyra tecknen från fältetActivity
.
SecurityEvent
| top 10 by TimeGenerated
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)
Du kan använda extend
för att behålla alla ursprungliga kolumner i resultatuppsättningen och definiera andra. Följande fråga använder extend
för att lägga till EventCode
kolumnen. Den här kolumnen kanske inte visas i slutet av tabellresultatet. Du skulle behöva expandera information om en post för att visa den.
SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)
Använd summarize för att aggregera grupper med rader
Använd summarize
för att identifiera grupper av poster enligt en eller flera kolumner och tillämpa aggregeringar på dem. Den vanligaste användningen av summarize
är count
, som returnerar antalet resultat i varje grupp.
Följande fråga granskar alla Perf
poster från den senaste timmen, grupperar dem ObjectName
efter och räknar posterna i varje grupp:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName
Ibland är det klokt att definiera grupper efter flera dimensioner. Varje unik kombination av dessa värden definierar en separat grupp:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName
En annan vanlig användning är att utföra matematiska eller statistiska beräkningar för varje grupp. I följande exempel beräknas medelvärdet CounterValue
för varje dator:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer
Tyvärr är resultatet av den här frågan meningslöst eftersom vi blandade ihop olika prestandaräknare. För att göra resultatet mer meningsfullt beräknar du medelvärdet separat för varje kombination av CounterName
och Computer
:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName
Sammanfatta efter en tidskolumn
Grupperingsresultat kan också baseras på en tidskolumn eller ett annat kontinuerligt värde. Att bara sammanfatta by TimeGenerated
skulle dock skapa grupper för varje millisekunder över tidsintervallet eftersom dessa värden är unika.
Om du vill skapa grupper baserat på kontinuerliga värden är det bäst att dela upp intervallet i hanterbara enheter med hjälp bin
av . Följande fråga analyserar Perf
poster som mäter ledigt minne (Available MBytes
) på en specifik dator. Den beräknar det genomsnittliga värdet för varje 1-timmarsperiod under de senaste 7 dagarna:
Perf
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2"
| where CounterName == "Available MBytes"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)
Om du vill göra utdata tydligare kan du välja att visa det som ett tidsdiagram som visar tillgängligt minne över tid.
Vanliga frågor och svar
Det här avsnittet innehåller svar på vanliga frågor.
Varför visas dubblettposter i Azure Monitor-loggar?
Ibland kan du märka dubbletter av poster i Azure Monitor-loggar. Den här dupliceringen kommer vanligtvis från något av följande två villkor:
- Komponenter i pipelinen har återförsök för att säkerställa tillförlitlig leverans på målet. Ibland kan den här funktionen resultera i dubbletter för en liten procentandel telemetriobjekt.
- Om dubblettposterna kommer från en virtuell dator kan du ha både Log Analytics-agenten och Azure Monitor-agenten installerade. Om du fortfarande behöver Log Analytics-agenten installerad konfigurerar du Log Analytics-arbetsytan så att den inte längre samlar in data som också samlas in av datainsamlingsregeln som används av Azure Monitor Agent.
Nästa steg
- Mer information om hur du använder strängdata i en loggfråga finns i Arbeta med strängar i Azure Monitor-loggfrågor.
- Mer information om hur du aggregerar data i en loggfråga finns i Avancerade aggregeringar i Azure Monitor-loggfrågor.
- Information om hur du ansluter data från flera tabeller finns i Kopplingar i Azure Monitor-loggfrågor.
- Hämta dokumentation om hela Kusto-frågespråk i KQL-språkreferensen.