Log Analytics och KQL-frågor

Slutförd

När vi börjar uppmärksamma våra tjänsters tillförlitlighet behöver vi ett sätt att spåra hur bra (eller inte bra) de mår. Ofta kan vi hitta den här informationen i en tjänsts loggar, så vi behöver ett verktyg för att arbeta med loggarna. Log Analytics är det verktyg som vi kommer att använda i Azure för det här ändamålet. Det gör att vi kan köra frågor mot dessa data och visa dem på sätt som är användbara för vårt tillförlitlighetsarbete.

Log Analytics-frågeprocessen omfattar att skriva frågor i Kusto-frågespråk (KQL). Om du någonsin har arbetat med något annat frågespråk (till exempel Structured Query Language, som de flesta känner till med förkortningen SQL) har du inga problem med att hämta KQL. Även om du inte har gjort det, när du ser hur det fungerar, kommer grundläggande KQL-frågor sannolikt att vara ganska enkla för dig.

Så här fungerar Log Analytics

Så låt oss se hur allt detta kommer att fungera. Här är ett diagram över hur Log mAnalytics fungerar:

Diagram of Log Analytics overview showing data inputs, tables, and sample queries.

Data för Log Analytics kommer från ett antal källor, inklusive:

  • Windows-händelseloggar
  • syslog på Linux-datorer
  • Agenter som körs på virtuella datorer
  • Anpassade loggar som personer väljer att skicka in
  • Mått från Azure-resurser
  • Telemetriinformation från Application Insights

All den här informationen kommer till vad Log Analytics kallar tabeller. Du kan tänka dig varje tabell som en separat databas. Du kommer att skriva frågor för att hämta informationen från tabellerna. För exemplen som vi kommer att visa senare i den här modulen arbetar vi främst med en tabell med namnet "begäranden".

Diagram of Log Analytics overview with requests table highlighted.

Log Analytics-gränssnitt

Följande bild visar de olika delarna i Log Analytics-gränssnittet.

Screenshot of the Log Analytics workspace in the Azure portal.

Till vänster finns ett avsnitt på skärmen som ser till att du aldrig går vilse när du använder Log Analytics. Den visar de tabeller som du eventuellt arbetar med, och om du expanderar ett avsnitt visas en lista över fälten i tabellen som är tillgängliga för frågor. Om du väljer något av fälten eller tabellnamnet kopieras det till frågekonstruktionsområdet.

Området för att skapa frågor finns högst upp. Här kan du ange en fråga och köra den. Du kan ange en tidsram för data om den inte redan har angetts som en del av frågan. Du kan spara frågor eller öppna ytterligare flikar om du vill arbeta med flera frågor i taget.

Längst ned på sidan finns mer användbar information. Här visar Log Analytics tidigare frågor som du körde, vilket kan vara användbart om du behöver återgå till något som du redan har angett tidigare. Om du till exempel arbetade med en fråga provade du något och var tvungen att backa.

Skriva KQL-frågor

KQL är ett kraftfullt frågespråk. Vi kommer bara att skrapa på ytan med hjälp av några grundläggande frågor så att du kan se hur enkelt det är att använda. Om du senare vill fördjupa dig för att använda några av de mer avancerade funktionerna (inklusive vissa maskininlärningsfunktioner) bör du titta närmare på Log Analytics-självstudien.

Vi börjar med att skriva en enkel KQL-fråga. Nästan alla KQL-frågor börjar med datakällan. tabellen som du frågar efter. Så om du frågar efter data från en "begärandetabell" skulle du börja med detta i frågeområdet:

Requests

Nästa del av en KQL-fråga är att koppla tabellen till den åtgärd du vill utföra. Använd ett vertikalstreck (det lodräta strecket på tangentbordet) mellan tabellens namn och kommandot.

Här är en enkel fråga för att sortera tabellen och returnera de 10 översta posterna som hittas:

Requests
|top 10

Här är några exempel på andra vanliga kommandon som du kan använda i stället för "topp 10:"

  • Om du vill se slumpmässiga 10 poster i stället för de 10 främsta (till exempel för att se tabellstrukturen) kan du använda följande kommando:

    requests
    |take 10
    
  • Om du vill visa poster som har kommit under den senaste halvtimmen kan du använda följande fråga:

    requests
    |where timestamp > ago(30m)
    
  • En annan vanlig uppgift är att ange i vilken ordning data ska returneras. Här är ett exempel på en fråga som sorterar efter ett visst fält (tidsstämpel) i fallande ordning (till exempel de senaste data först):

    requests
    |sort by timestamp desc
    

Precis som med SQL kan du ange flera villkor för att ange vilka poster som ska returneras. Använd ytterligare vertikalstreck och satser om du vill lägga till dem. Vertikalstrecket separerar kommandon så att utdata från det första är indata för nästa kommando. En enskild fråga kan ha valfritt antal kommandon.

Här är ett exempel på en fråga som returnerar alla 404 svarskodsposter (till exempel alla "sidan hittades inte"-poster från en webbtjänst) under de senaste 30 minuterna:

requests
|where timestamp > ago(30m)
|where toint(resultCode) == 404

Den här frågan har skrivits så att effektiviteten maximeras. Genom att först bara välja poster från de senaste 30 minuterna minskar du kraftigt antalet poster som den andra satsen måste söka igenom. Om du skrev den här frågan i motsatt ordning skulle den först hitta alla 404:er från början av tiden i data och sedan ignorera de allra flesta för att ge u bara den senaste halvtimmens värde. Tänk alltid på bearbetningsordningen när du skriver frågor med flera villkor.

Vi tar ett sista frågeexempel innan vi återgår till kraften i Log Analytics senare i den här modulen för att förbättra vår tillförlitlighet. Här är en fråga som visar en beräkning baserad på data:

requests
|where timestamp > ago(30m)
|summarize count() by name, URL

Den här frågan returnerar en sammanfattning av de begäranden som vi har tagit emot under den senaste halvtimmen. Så på en webbtjänst kan det berätta för oss att det har gjorts en GET index.html begäran till URL:en http://tailwindtraders.com 2 875 gånger. Vi pausar vår titt på KQL med den här frågan eftersom den ansluter till de KQL-frågor som vi ska använda i nästa lektion.

Testa dina kunskaper

1.

På vilket språk skriver du logganalysfrågor?

2.

Vad står KQL för?

3.

Var lagras och varifrån efterfrågas data i Log Analytics i de flesta KQL-frågor?