Začínáme s dotazy protokolu ve službě Azure MonitorGet started with log queries in Azure Monitor

Poznámka

By se měla Dokončit Začínáme s Azure Monitor Log Analytics před tímto kurzem.You should complete Get started with Azure Monitor Log Analytics before completing this tutorial.

Poznámka

V tomto cvičení můžete projít v prostředí Log Analytics, nebo můžete použít naši ukázkovém prostředí, což zahrnuje spoustu ukázková data.You can work through this exercise in your own Log Analytics environment, or you can use our Demo environment, which includes plenty of sample data.

V tomto kurzu se dozvíte, psaní dotazů protokolu ve službě Azure Monitor.In this tutorial you will learn to write log queries in Azure Monitor. To se dozvíte, jak do:It will teach you how to:

  • Zjistit strukturu dotazuUnderstand query structure
  • Řazení výsledků dotazuSort query results
  • Filtrování výsledků dotazuFilter query results
  • Zadejte časový rozsahSpecify a time range
  • Vyberte pole, která chcete zahrnout do výsledkůSelect which fields to include in the results
  • Definice a používání vlastních políDefine and use custom fields
  • Agregace a skupinových výsledkyAggregate and group results

Kurz týkající se používat službu Log Analytics na portálu Azure portal, najdete v části 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.
Podrobné informace o dotazech protokolu ve službě Azure Monitor, naleznete v tématu přehled protokolu dotazů ve službě Azure Monitor.For more details on log queries in Azure Monitor, see Overview of log queries in Azure Monitor.

Napište nový dotazWriting a new query

Dotazy můžete spustit buď pomocí názvu tabulky nebo hledání příkazu.Queries can start with either a table name or the search command. Měli byste začít s názvem tabulky, protože definuje vymazat obor pro dotaz a zvyšuje výkon dotazů a relevance 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

Jazyk dotaz Kusto používaný službou Azure Monitor je velká a malá písmena.The Kusto query language used by Azure Monitor is case-sensitive. Klíčová slova jazyka jsou obvykle napsány malé.Language keywords are typically written in lower-case. Při použití názvy tabulek nebo sloupců v dotazu, ujistěte se, že chcete mít správnou velikost, 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 tabulkuTable-based queries

Azure Monitor uspořádá data protokolu v tabulkách, každá skládá z více 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 zajímá a potom se podívejte na části dat:Identify a table that you're interested in and then take a look at a bit of data:

SecurityEvent
| take 10

Dotaz je znázorněno výše vrátí 10 výsledky z SecurityEvent tabulky v žádné konkrétní 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 provést první pohled na tabulku a pochopit jeho strukturu a obsahu.This is a very common way to take a glance at a table and understand its structure and content. Podívejme se, jak je sestavena:Let's examine how it's built:

  • Spustí dotaz s 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 svislé čáry (|) odděluje příkazy, takže výstup první z nich ve vstupu následující příkaz.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 potrubím elementy.You can add any number of piped elements.
  • Po přesměrování je trvat příkaz, který vrátí určitý počet libovolného záznamy z tabulky.Following the pipe is the take command, which returns a specific number of arbitrary records from the table.

Ve skutečnosti spouštět dotaz i bez přidání | take 10 –, který by stále platná, ale můžou se zobrazovat výsledky až 10 000.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 menší strukturované a obecně více vhodných pro hledání záznamů, které zahrnují určité hodnoty v některém ze svých 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á SecurityEvent tabulky pro záznamy obsahující frázi "Kryptografický".This query searches the SecurityEvent table for records that contain the phrase "Cryptographic". Tyto záznamy se vrátí a zobrazí 10 záznamů.Of those records, 10 records will be returned and displayed. Pokud jsme vynechat, nechte in (SecurityEvent) částečně a pouze spustit search "Cryptographic", hledání se přenášejí prostřednictvím všechny tabulek, které by 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.

Varování

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

Řazení a nahořeSort and top

Zatímco trvat je užitečné získat o pár záznamů, výsledky jsou vybrané a zobrazí bez určitého pořadí.While take is useful to get a few records, the results are selected and displayed in no particular order. Získat seřazený zobrazení, může řazení podle preferované sloupce:To get an ordered view, you could sort by the preferred column:

SecurityEvent   
| sort by TimeGenerated desc

Který může vrátit ale příliš mnoho výsledků a může trvat nějakou dobu.That could return too many results though and might also take some time. Seřadí výše uvedeném dotazu celý SecurityEvent tabulku podle sloupce TimeGenerated.The above query sorts the entire SecurityEvent table by the TimeGenerated column. Portál Analytics pak omezení zobrazení na Zobrazit pouze 10 000 záznamů.The Analytics portal then limits the display to show only 10,000 records. Tento přístup není samozřejmě optimální.This approach is of course not optimal.

Nejlepší způsob, jak získat jenom nejnovější 10 záznamů, je použití horní, který seřadí celou tabulku na straně serveru a pak vrátí prvních záznamů: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é pořadí, řazení, takže obvykle vynechat výchozí nastavení je desc argument. Výstup bude vypadat takto:Descending is the default sorting order, so we typically omit the desc argument.The output will look like this:

Prvních 10

Kdy: filtrování na podmínceWhere: filtering on a condition

Filtry, jak je uvedeno podle názvu, filtrovat data podle určité 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 příslušné informace.This is the most common way to limit query results to relevant information.

Přidání filtru do dotazu, použijte kde operátor za nímž následuje jedna nebo více podmínek.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 SecurityEvent záznamy, jejichž úroveň rovná 8:For example, the following query returns only SecurityEvent records where Level equals 8:

SecurityEvent
| where Level == 8

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

VýrazExpression PopisDescription Příklad:Example
== Kontroly rovnostiCheck equality
(malá a velká písmena)(case-sensitive)
Level == 8
=~ Kontroly rovnostiCheck equality
(velká a malá písmena)(case-insensitive)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <>!=, <> Kontrola nerovnostiCheck inequality
(i výraz je shodný s)(both expressions are identical)
Level != 4
a, neboand, or Vyžaduje mezi podmínkyRequired between conditions Level == 16 or CommandLine != ""

Chcete-li filtrovat podle několika podmínek, můžete použít a:To filter by multiple conditions, you can either use and:

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

nebo kanálu více kde prvky jednu po druhé: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 možná budete muset k provádění porovnání na správný typ přetypování.Values can have different types, so you might need to cast them to perform comparison on the correct type. Například SecurityEvent úroveň sloupec je typu řetězec, proto musíte přetypovat na číselný typ, jako int nebo dlouhé, než budete moct použít na něm číselné 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ý rozsahSpecify a time range

Výběr časuTime picker

Výběr času vedle tlačítka Spustit je a indikuje, že jsme při dotazování pouze záznamy z 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, použije na všechny dotazy.This is the default time range applied to all queries. Chcete-li získat pouze záznamy z poslední hodina, vyberte za poslední hodinu 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 vlastní časový rozsah tak, že přidáte filtr času v dotazu.You can also define your own time range by adding a time filter to the query. Doporučujeme umístit filtr času bezprostředně 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

Ve výše uvedené filtr času ago(30m) znamená "30 minutami", takže tento 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. Jiné jednotky doby zahrnout dny (2d) (25 mil.) minut a sekund (10 s).Other units of time include days (2d), minutes (25m), and seconds (10s).

Projekt a rozšířit: vyberte a výpočetní sloupceProject and Extend: select and compute columns

Použití projektu vybrat konkrétní sloupce se mají 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 generuje tento výstup:The preceding example generates this output:

Výsledky dotazu projektu

Můžete také použít projektu přejmenování sloupců a definovat nové značky.You can also use project to rename columns and define new ones. Následující příklad používá projektu provést následující kroky:The following example uses project to do the following:

  • Vyberte pouze počítače a TimeGenerated původní sloupce.Select only the Computer and TimeGenerated original columns.
  • Přejmenovat aktivity sloupec EventDetails.Rename the Activity column to EventDetails.
  • Vytvoří nový sloupec s názvem EventCode.Create a new column named EventCode. Substring() funkce se používá ke stahování jenom první čtyři znaky z pole aktivity.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í uchovává všechny původní sloupce sady výsledků dotazu a definuje další značky.extend keeps all original columns in the result set and defines additional ones. Následující dotaz používá rozšířit přidáte EventCode sloupce.The following query uses extend to add the EventCode column. Všimněte si, že v tomto sloupci nemusí být zobrazeny na konci tabulka výsledků v takovém případě je třeba Rozbalit podrobnosti záznam k jeho zobrazení.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í: agregační skupiny řádkůSummarize: aggregate groups of rows

Použití shrnout identifikovat skupinami záznamů, podle jednoho nebo více sloupců, a na ně vztahují agregace.Use summarize to identify groups of records, according to one or more columns, and apply aggregations to them. Nejběžnější použití nástroje shrnout je počet, který vrátí 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 kontroluje všechny výkonu záznamy od poslední hodiny skupin je podle ObjectNamea vrátí počet záznamů 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 tak, že 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 způsobem použití je provést matematické a statistické výpočty s každou skupinu.Another common use is to perform mathematical or statistical calculations on each group. Například následující vypočítá průměr CounterValue pro jednotlivé počítače:For example, the following calculates the average CounterValue for each computer:

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

Bohužel nemají smysl výsledky tohoto dotazu, protože jsme kombinovat společně různých čítačů výkonu.Unfortunately, the results of this query are meaningless since we mixed together different performance counters. Chcete-li to lépe vystihuje, byste měli vypočítat průměr odděleně 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

Vytvořit souhrn podle sloupce pro časSummarize by a time column

Seskupování výsledků můžete také založené na sloupec času nebo jinou hodnotu.Grouping results can also be based on a time column, or another continuous value. Jednoduše sumarizace by TimeGenerated ale by vytvořit skupiny pro každou jeden milisekund v příslušném časovém rozsahu, protože to jsou 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 průběžné hodnoty, je nejlepší přerušit jednotkami pomocí rozsahu bin.To create groups based on continuous values, it is best to break the range into manageable units using bin. Následující dotaz analyzuje výkonu záznamy, které měří volná paměť (počet MB k dispozici) v 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 hodinu 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)

Aby byl srozumitelnější výstup, vyberete zobrazíte jako čas – graf, zobrazuje dostupné paměti v průběhu času:To make the output clearer, you select to display it as a time-chart, showing the available memory over time:

Dotaz paměti v čase

Další postupNext steps