Začínáme s dotazy protokolů v Azure MonitoruGet started with log queries in Azure Monitor

Poznámka

Pokud shromažďujete data alespoň z jednoho virtuálního počítače, můžete toto cvičení použít ve vlastním prostředí.You can work through this exercise in your own environment if you are collecting data from at least one virtual machine. Pokud ne, použijte naše ukázkové prostředí, které obsahuje spoustu ukázkových dat.If not then use our Demo environment, which includes plenty of sample data. Pokud už víte, jak dotazovat v KQL, ale stačí rychle vytvořit užitečné dotazy založené na typech prostředků, Projděte si podokno uložené Ukázkové dotazy.If you already know how to query in KQL, but just need to quickly create useful queries based on resource type(s), see the saved example queries pane.

V tomto kurzu se naučíte psát dotazy protokolu v Azure Monitor.In this tutorial you will learn to write log queries in Azure Monitor. Naučíte se, jak:It will teach you how to:

  • Principy struktury dotazůUnderstand query structure
  • Seřadit výsledky dotazuSort query results
  • Filtrovat výsledky dotazuFilter query results
  • Zadejte časový rozsah.Specify a time range
  • Vyberte pole, která chcete zahrnout do výsledků.Select which fields to include in the results
  • Definování a použití vlastních políDefine and use custom fields
  • Agregace a seskupení výsledkůAggregate and group results

Kurz použití Log Analytics v Azure Portal najdete v tématu Začínáme s Azure Monitor Log Analytics.For a tutorial on using Log Analytics in the Azure portal, see Get started with Azure Monitor Log Analytics.
Další podrobnosti o dotazech protokolu v Azure Monitor najdete v tématu Přehled dotazů protokolu v Azure monitor.For more details on log queries in Azure Monitor, see Overview of log queries in Azure Monitor.

Sledujte níže uvedenou verzi videa v tomto kurzu:Follow along with a video version of this tutorial below:

Vytvoření nového dotazuWriting a new query

Dotazy mohou začít buď s názvem tabulky, nebo s příkazem hledání .Queries can start with either a table name or the search command. Měli byste začít s názvem tabulky, protože definuje pro dotaz jasný rozsah a zvyšuje výkon dotazů a relevanci výsledků.You should start with a table name, since it defines a clear scope for the query and improves both query performance and relevance of the results.

Poznámka

Dotazovací jazyk Kusto používaný službou Azure Monitor rozlišuje velká a malá písmena.The Kusto query language used by Azure Monitor is case-sensitive. Klíčová slova jazyka se obvykle zapisují malými písmeny.Language keywords are typically written in lower-case. Při použití názvů tabulek nebo sloupců v dotazu se ujistěte, že používáte správný případ, jak je znázorněno v podokně schématu.When using names of tables or columns in a query, make sure to use the correct case, as shown on the schema pane.

Dotazy založené na tabulkáchTable-based queries

Azure Monitor organizuje data protokolu v tabulkách, přičemž každá se skládá z několika sloupců.Azure Monitor organizes log data in tables, each composed of multiple columns. Všechny tabulky a sloupce se zobrazí v podokně schématu v Log Analytics na portálu Analytics.All tables and columns are shown on the schema pane in Log Analytics in the Analytics portal. Identifikujte tabulku, na kterou vás zajímáte, a pak se podívejte na bitovou část dat:Identify a table that you're interested in and then take a look at a bit of data:

SecurityEvent
| take 10

Výše uvedený dotaz vrátí 10 výsledků z tabulky SecurityEvent , a to bez konkrétního pořadí.The query shown above returns 10 results from the SecurityEvent table, in no specific order. To je velmi běžný způsob, jak se rychle podívat na tabulku a pochopit její strukturu a obsah.This is a very common way to take a glance at a table and understand its structure and content. Pojďme se podívat, jak je sestavená:Let's examine how it's built:

  • Dotaz začíná názvem tabulky SecurityEvent – Tato část definuje rozsah dotazu.The query starts with the table name SecurityEvent - this part defines the scope of the query.
  • Znak kanálu (|) odděluje příkazy, takže výstup prvního z nich se zadává do vstupu z následujícího příkazu.The pipe (|) character separates commands, so the output of the first one in the input of the following command. Můžete přidat libovolný počet prvků s potrubím.You can add any number of piped elements.
  • Následující kanál je příkaz přijmout , který vrátí konkrétní počet libovolných záznamů z tabulky.Following the pipe is the take command, which returns a specific number of arbitrary records from the table.

Dotaz jsme mohli spustit i bez přidání | take 10 -, který by byl stále platný, ale může vracet až 10 000 výsledků.We could actually run the query even without adding | take 10 - that would still be valid, but it could return up to 10,000 results.

Vyhledávací dotazySearch queries

Vyhledávací dotazy jsou méně strukturované a obecně se hodí pro hledání záznamů, které obsahují konkrétní hodnotu v některém z jejich sloupců:Search queries are less structured, and generally more suited for finding records that include a specific value in any of their columns:

search in (SecurityEvent) "Cryptographic"
| take 10

Tento dotaz vyhledá v tabulce SecurityEvent záznamy, které obsahují frázi "kryptografie".This query searches the SecurityEvent table for records that contain the phrase "Cryptographic". Z těchto záznamů se vrátí a zobrazí 10 záznamů.Of those records, 10 records will be returned and displayed. Pokud tuto část vynecháme in (SecurityEvent) a právě ji spustíte search "Cryptographic" , bude hledání probíhat na všech tabulkách, což by mohlo trvat déle a být méně efektivní.If we omit the in (SecurityEvent) part and just run search "Cryptographic", the search will go over all tables, which would take longer and be less efficient.

Upozornění

Vyhledávací dotazy jsou obvykle pomalejší než dotazy založené na tabulkách, protože musí zpracovávat více dat.Search queries are typically slower than table-based queries because they have to process more data.

Seřadit a nahoruSort and top

I když je užitečné získat pár záznamů, výsledky se vyberou a zobrazují se v žádném pořadí.While take is useful to get a few records, the results are selected and displayed in no particular order. Chcete-li získat seřazené zobrazení, můžete Řadit podle preferovaného sloupce:To get an ordered view, you could sort by the preferred column:

SecurityEvent   
| sort by TimeGenerated desc

To může vracet příliš mnoho výsledků, ale může také nějakou dobu trvat.That could return too many results though and might also take some time. Výše uvedený dotaz seřadí celou tabulku SecurityEvent podle sloupce TimeGenerated.The above query sorts the entire SecurityEvent table by the TimeGenerated column. Portál Analytics potom omezí zobrazení na zobrazení pouze záznamů 10 000.The Analytics portal then limits the display to show only 10,000 records. Tento přístup je samozřejmě neoptimální.This approach is of course not optimal.

Nejlepším způsobem, jak získat pouze nejnovější 10 záznamů, je použít horní, který seřadí celou tabulku na straně serveru a potom vrátí nejvyšší záznamy:The best way to get only the latest 10 records is to use top, which sorts the entire table on the server side and then returns the top records:

SecurityEvent
| top 10 by TimeGenerated

Sestupnění je výchozí pořadí řazení, takže typicky vynecháme argument DESC . Výstup bude vypadat nějak takto:Descending is the default sorting order, so we typically omit the desc argument.The output will look like this:

Prvních 10

Kde: filtrování podmínkyWhere: filtering on a condition

Filtry označené podle jejich názvu filtrují data podle konkrétní podmínky.Filters, as indicated by their name, filter the data by a specific condition. Toto je nejběžnější způsob, jak omezit výsledky dotazu na relevantní informace.This is the most common way to limit query results to relevant information.

Chcete-li přidat filtr do dotazu, použijte operátor WHERE následovaný jednou nebo více podmínkami.To add a filter to a query, use the where operator followed by one or more conditions. Například následující dotaz vrátí pouze záznamy SecurityEvent , kde úroveň rovná 8:For example, the following query returns only SecurityEvent records where Level equals 8:

SecurityEvent
| where Level == 8

Při psaní podmínek filtrování můžete použít následující výrazy:When writing filter conditions, you can use the following expressions:

VýrazExpression PopisDescription PříkladExample
== Kontrolovat rovnostCheck equality
(rozlišuje velká a malá písmena)(case-sensitive)
Level == 8
=~ Kontrolovat rovnostCheck equality
(nerozlišuje velká a malá písmena)(case-insensitive)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <>!=, <> Kontrolovat nerovnostCheck inequality
(oba výrazy jsou identické)(both expressions are identical)
Level != 4
and, orand, or Požadováno mezi podmínkamiRequired between conditions Level == 16 or CommandLine != ""

Chcete-li filtrovat podle více podmínek, můžete buď použít , a:To filter by multiple conditions, you can either use and:

SecurityEvent
| where Level == 8 and EventID == 4672

nebo více kanálů , kde jeden po druhém je elementem:or pipe multiple where elements one after the other:

SecurityEvent
| where Level == 8 
| where EventID == 4672

Poznámka

Hodnoty mohou mít různé typy, takže je možná budete muset přetypovat na provedení porovnání se správným typem.Values can have different types, so you might need to cast them to perform comparison on the correct type. Například sloupec úrovně SecurityEvent je typu String, takže je nutné jej přetypovat na číselný typ, jako je int nebo Long, předtím, než můžete použít numerické operátory: SecurityEvent | where toint(Level) >= 10For example, SecurityEvent Level column is of type String, so you must cast it to a numerical type such as int or long, before you can use numerical operators on it: SecurityEvent | where toint(Level) >= 10

Zadejte časový rozsah.Specify a time range

Výběr časuTime picker

Výběr času je vedle tlačítka Spustit a označuje, že dotazuje pouze záznamy za posledních 24 hodin.The time picker is next to the Run button and indicates we’re querying only records from the last 24 hours. Toto je výchozí časový rozsah, který se použije u všech dotazů.This is the default time range applied to all queries. Chcete-li získat pouze záznamy z poslední hodiny, vyberte možnost poslední hodina a spusťte dotaz znovu.To get only records from the last hour, select Last hour and run the query again.

Výběr času

Filtr času v dotazuTime filter in query

Můžete také definovat svůj vlastní časový rozsah přidáním filtru času do dotazu.You can also define your own time range by adding a time filter to the query. Nejvhodnější je umístit filtr času hned za název tabulky:It’s best to place the time filter immediately after the table name:

SecurityEvent
| where TimeGenerated > ago(30m) 
| where toint(Level) >= 10

Filtr ve výše uvedeném časovém intervalu ago(30m) znamená "před 30 minutami", takže dotaz vrátí pouze záznamy z posledních 30 minut.In the above time filter ago(30m) means "30 minutes ago" so this query only returns records from the last 30 minutes. Mezi další jednotky času patří dny (2D), minuty (25m) a sekundy (desítkách).Other units of time include days (2d), minutes (25m), and seconds (10s).

Projekt a rozšířené: výběrové a výpočetní sloupceProject and Extend: select and compute columns

Pomocí projektu můžete vybrat konkrétní sloupce, které chcete zahrnout do výsledků:Use project to select specific columns to include in the results:

SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity

Předchozí příklad vygeneruje tento výstup:The preceding example generates this output:

Dotaz na výsledky projektu

Projekt můžete také použít k přejmenování sloupců a definování nových.You can also use project to rename columns and define new ones. Následující příklad používá projekt k provedení následujících akcí:The following example uses project to do the following:

  • Vyberte pouze původní sloupce počítač a TimeGenerated .Select only the Computer and TimeGenerated original columns.
  • Zobrazí sloupec aktivity jako EventDetails.Displays the Activity column as EventDetails.
  • Vytvoří nový sloupec s názvem kód události.Create a new column named EventCode. Funkce substring () se používá k získání pouze prvních čtyř znaků z pole Activity.The substring() function is used to get only the first four characters from the Activity field.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

Rozšířené zachová všechny původní sloupce v sadě výsledků a definuje další.extend keeps all original columns in the result set and defines additional ones. Následující dotaz používá k přidání sloupce kód události sloupec Extended .The following query uses extend to add the EventCode column. Všimněte si, že tento sloupec se nemusí zobrazit na konci tabulky. v takovém případě budete muset rozbalit Podrobnosti záznamu a zobrazit ho.Note that this column may not display at the end of the table results in which case you would need to expand the details of a record to view it.

SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)

Shrnutí: agregované skupiny řádkůSummarize: aggregate groups of rows

Použijte sumarizace k identifikaci skupin záznamů, podle jednoho nebo více sloupců a použijte pro ně agregace.Use summarize to identify groups of records, according to one or more columns, and apply aggregations to them. Nejběžnějším využitím souhrnu je počet, který vrací počet výsledků v každé skupině.The most common use of summarize is count, which returns the number of results in each group.

Následující dotaz zkontroluje všechny záznamy výkonu za poslední hodinu, seskupuje je podle ObjectName a spočítá záznamy v každé skupině:The following query reviews all Perf records from the last hour, groups them by ObjectName, and counts the records in each group:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName

Někdy je vhodné definovat skupiny podle více dimenzí.Sometimes it makes sense to define groups by multiple dimensions. Každá jedinečná kombinace těchto hodnot definuje samostatnou skupinu:Each unique combination of these values defines a separate group:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName

Dalším běžným použitím je provádět matematické nebo statistické výpočty na každé skupině.Another common use is to perform mathematical or statistical calculations on each group. Například následující příkaz vypočítá průměrnou CounterValue pro každý počítač:For example, the following calculates the average CounterValue for each computer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer

Výsledky tohoto dotazu bohužel nejsou stejné, protože jsme provedli kombinaci různých čítačů výkonu.Unfortunately, the results of this query are meaningless since we mixed together different performance counters. Aby bylo toto smysluplnější, doporučujeme vypočítat průměr zvlášť pro každou kombinaci CounterName a počítače:To make this more meaningful, we should calculate the average separately for each combination of CounterName and Computer:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName

Shrnout podle sloupce s časemSummarize by a time column

Seskupení výsledků může být také založeno na časovém sloupci nebo jiné průběžné hodnotě.Grouping results can also be based on a time column, or another continuous value. Jednoduché Shrnutí byste by TimeGenerated ale mohli vytvořit skupiny pro každou dobu v milisekundách v časovém rozsahu, protože se jedná o jedinečné hodnoty.Simply summarizing by TimeGenerated though would create groups for every single millisecond over the time range, since these are unique values.

Chcete-li vytvořit skupiny založené na souvislých hodnotách, je nejlepší rozdělit rozsah na spravovatelné jednotky pomocí přihrádky.To create groups based on continuous values, it is best to break the range into manageable units using bin. Následující dotaz analyzuje záznamy výkonu , které měří volnou paměť (k dispozici v MB) na určitém počítači.The following query analyzes Perf records that measure free memory (Available MBytes) on a specific computer. Vypočítá průměrnou hodnotu každé období 1 hodiny za posledních 7 dnů:It calculates the average value of each 1 hour period over the last 7 days:

Perf 
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

Chcete-li, aby byl výstup jasný, vyberte ho a zobrazte ho jako časový graf. zobrazí se dostupná paměť v čase:To make the output clearer, you select to display it as a time-chart, showing the available memory over time:

Dotazování paměti v čase

Další krokyNext steps