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-portalen finns i Komma 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 sortochtop.

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.

Screenshot that shows the top 10 records sorted in descending order.

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.

Screenshot that shows the time picker and its list of time-range commands.

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:

Screenshot that shows the query 'project' results list.

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 och TimeGenerated .
  • Activity Visa kolumnen som EventDetails.
  • Skapa en ny kolumn med namnet EventCode. Funktionen substring() används för att bara hämta de första fyra tecknen från fältet Activity .
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 ObjectNameefter 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 TimeGeneratedskulle 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 binav . 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.

Screenshot that shows the values of a query memory over time.

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