Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här artikeln beskrivs grunderna i att använda loggfrågor i Azure Monitor-loggar. I tillämpliga fall innehåller den exempel på frågor mot data med både KQL-läge och enkelt Log Analytics-läge:
- Med KQL-läge kan du skriva och anpassa avancerade frågor med hjälp av Kusto Query Language (KQL).   
- Enkelt läge ger ett användarvänligt gränssnitt där du väljer en tabell och använder filter för att skapa frågor.   
En mer detaljerad jämförelse mellan KQL-läge och enkelt läge finns i Översikt över Log Analytics i Azure Monitor.
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.
Självstudievideo
Kommentar
Den här videon visar en tidigare version av användargränssnittet, men skärmbilderna i den här artikeln är uppdaterade och återspeglar det aktuella användargränssnittet.
Behörigheter som krävs
Du måste ha Microsoft.OperationalInsights/workspaces/query/*/read behörighet till de Log Analytics-arbetsytor som du utför frågor i, som den inbyggda rollen Log Analytics Reader tillhandahåller, till exempel.
Strukturera en 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.
Tips/Råd
Läs mer om metodtips för KQL-frågor.
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 Azure Portal.
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 takefö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.
Sökfrågor
Sökfrågorna är mindre strukturerade. De passar bäst för att hitta poster som innehåller ett specifikt värde i någon av kolumnerna i en viss tabell.
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:
search in (SecurityEvent) "Cryptographic"
| take 10
Om du utelämnar delen in (SecurityEvent) och bara kör search "Cryptographic", 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.
Begränsa resultat
Använd operatorn take för att visa ett litet urval av poster genom att returnera upp till det angivna antalet poster. Till exempel:
SecurityEvent
| take 10
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 och top .
Sortera resultat
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.
Sortera
Du kan använda operatornsort för att sortera frågeresultaten 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 endast hämta de senaste posterna är att använda operatorntop.
Desc och asc
              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
Om du vill sortera i stigande ordning anger du asc.
Främsta
Använd operatorntop 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 det här exemplet:
Filtrera resultat
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 operatornwhere 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 != "" | 
Filtrera efter flera villkor
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.
Kommentar
Om du inkluderar ett tidsintervall i frågan ändras tidsväljaren automatiskt till Ange i fråga. Om du manuellt ändrar tidsväljaren till ett annat värde använder Log Analytics det mindre av de två tidsintervallen.
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.
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).
Inkludera eller exkludera kolumner i frågeresultat
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 ComputerochTimeGenerated.
- 
              ActivityVisa 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)
Definiera och använda anpassade fält
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)
Kommentar
Använd operatorn extend för ad hoc-beräkningar i frågor. Använd inmatningstidstransformeringar eller sammanfattningsregler för att transformera eller aggregera data vid inmatningstid för mer effektiva frågor.
Aggregera och gruppera resultat
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
Gruppera unika kombinationer av värden i flera kolumner
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
Utföra matematiska eller statistiska beräkningar
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 == "DC01.na.contosohotels.com" 
| 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. Det gör du genom att växla till Diagramvy , öppna sidofältet Diagramformatering till höger och välja Linje som diagramtyp:
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.
 
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
               
              
              