Udostępnij za pośrednictwem


Struktura transformacji w usłudze Azure Monitor

Przekształcenia w usłudze Azure Monitor umożliwiają filtrowanie lub modyfikowanie danych przychodzących przed ich zapisaniem w obszarze roboczym usługi Log Analytics. Są one implementowane jako instrukcja język zapytań Kusto (KQL) w regule zbierania danych (DCR). Ten artykuł zawiera szczegółowe informacje na temat sposobu, w jaki to zapytanie ma strukturę i ograniczenia dotyczące dozwolonego języka KQL.

Struktura przekształcania

Instrukcja KQL jest stosowana indywidualnie do każdego wpisu w źródle danych. Musi on zrozumieć format danych przychodzących i utworzyć dane wyjściowe w strukturze tabeli docelowej. Tabela wirtualna o nazwie source reprezentuje strumień wejściowy. source kolumny tabeli są zgodne z definicją wejściowego strumienia danych. Poniżej przedstawiono typowy przykład przekształcenia. Ten przykład obejmuje następujące funkcje:

  • Filtruje dane przychodzące za pomocą instrukcji where .
  • Dodaje nową kolumnę extend przy użyciu operatora .
  • Formatuje dane wyjściowe w celu dopasowania kolumn tabeli docelowej przy użyciu project operatora .
source  
| where severity == "Critical" 
| extend Properties = parse_json(properties)
| project
    TimeGenerated = todatetime(["time"]),
    Category = category,
    StatusDescription = StatusDescription,
    EventName = name,
    EventId = tostring(Properties.EventId)

Ograniczenia języka KQL

Ponieważ transformacja jest stosowana do każdego rekordu indywidualnie, nie może używać żadnych operatorów KQL działających na wielu rekordach. Obsługiwane są tylko operatory, które przyjmują jeden wiersz jako dane wejściowe i zwracają nie więcej niż jeden wiersz. Na przykład funkcja summarize nie jest obsługiwana, ponieważ podsumowuje wiele rekordów. Aby uzyskać pełną listę obsługiwanych funkcji, zobacz Obsługiwane funkcje języka KQL.

Przekształcenia w regule zbierania danych (DCR) umożliwiają filtrowanie lub modyfikowanie danych przychodzących przed ich zapisaniem w obszarze roboczym usługi Log Analytics. W tym artykule opisano sposób tworzenia przekształceń w kontrolerze domeny, w tym szczegółowe informacje i ograniczenia język zapytań Kusto (KQL) używane na potrzeby instrukcji transform.

Przeanalizuj polecenie

Polecenie analizy w transformacji jest ograniczone do 10 kolumn na instrukcję ze względu na wydajność. Jeśli transformacja wymaga analizowania więcej niż 10 kolumn, podziel ją na wiele instrukcji zgodnie z opisem w artykule Podział dużych poleceń analizy.

Wymagane kolumny

Dane wyjściowe każdej transformacji muszą zawierać prawidłowy znacznik czasu w kolumnie o nazwie TimeGenerated typu datetime. Pamiętaj, aby uwzględnić go w finale extend lub project bloku! Tworzenie lub aktualizowanie kontrolera DOMENY bez TimeGenerated w danych wyjściowych przekształcenia prowadzi do błędu.

Obsługa danych dynamicznych

Rozważ następujące dane wejściowe z danymi dynamicznymi:

{
    "TimeGenerated" : "2021-11-07T09:13:06.570354Z",
    "Message": "Houston, we have a problem",
    "AdditionalContext": {
        "Level": 2,
        "DeviceID": "apollo13"
    }
}

Aby uzyskać dostęp do właściwości w obiekcie AdditionalContext, zdefiniuj ją jako kolumnę typu dynamicznego w strumieniu wejściowym:

"columns": [
    {
        "name": "TimeGenerated",
        "type": "datetime"
    },
    {
        "name": "Message",
        "type": "string"
    }, 
    {
        "name": "AdditionalContext",
        "type": "dynamic"
    }
]

Zawartość kolumny AdditionalContext może być teraz analizowana i używana w przekształceniu KQL:

source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)

Literały dynamiczne

parse_json Użyj funkcji do obsługi literałów dynamicznych.

Na przykład następujące zapytania zapewniają te same funkcje:

print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')

Obsługiwane funkcje języka KQL

Obsługiwane instrukcje

Instrukcja let

Prawa strona let może być wyrażeniem skalarnym, wyrażeniem tabelarycznym lub funkcją zdefiniowaną przez użytkownika. Obsługiwane są tylko funkcje zdefiniowane przez użytkownika z argumentami skalarnymi.

Instrukcje wyrażeń tabelarycznych

Jedynymi obsługiwanymi źródłami danych dla instrukcji KQL są następujące:

  • źródło, które reprezentuje dane źródłowe. Na przykład:

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print operator, który zawsze tworzy pojedynczy wiersz. Na przykład:

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

Operatory tabelaryczne

Operatory skalarne

Operatory liczbowe

Obsługiwane są wszystkie operatory liczbowe.

Operatory arytmetyczne daty/godziny i przedziału czasu

Obsługiwane są wszystkie operatory arytmetyczne daty/godziny i przedziału czasu.

Operatory ciągów

Obsługiwane są następujące operatory ciągów .

  • ==
  • !=
  • =~
  • !~
  • contains
  • !contains
  • contains_cs
  • !contains_cs
  • has
  • !has
  • has_cs
  • !has_cs
  • startswith
  • !startswith
  • startswith_cs
  • !startswith_cs
  • endswith
  • !endswith
  • endswith_cs
  • !endswith_cs
  • matches regex
  • in
  • !in

Operatory bitowe

Obsługiwane są następujące operatory bitowe.

  • binary_and()
  • binary_or()
  • binary_xor()
  • binary_not()
  • binary_shift_left()
  • binary_shift_right()

Funkcje skalarne

Funkcje bitowe

Funkcje konwersji

Funkcje DateTime i TimeSpan

Funkcje dynamiczne i tablicowe

Funkcje matematyczne

Funkcje warunkowe

Funkcje ciągów

Funkcje typów

Funkcje specjalne

parse_cef_dictionary

Biorąc pod uwagę ciąg zawierający komunikat CEF, parse_cef_dictionary analizuje właściwość Extension komunikatu w obiekcie dynamicznego klucza/wartości. Średnik to zastrzeżony znak, który należy zastąpić przed przekazaniem nieprzetworzonego komunikatu do metody, jak pokazano w przykładzie.

| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage) 
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage) 
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension

Przykładowe dane wyjściowe funkcji parse_cef_dictionary.

geo_location

Biorąc pod uwagę ciąg zawierający adres IP (obsługiwane są protokoły IPv4 i IPv6), geo_location funkcja zwraca przybliżoną lokalizację geograficzną, w tym następujące atrybuty:

  • Kraj
  • Region (Region)
  • Stan
  • City
  • Szerokość
  • Długość
| extend GeoLocation = geo_location("1.0.0.5")

Zrzut ekranu przedstawiający przykładowe dane wyjściowe funkcji geo_location.

Ważne

Ze względu na charakter usługi geolokalizacji IP używanej przez tę funkcję może ona wprowadzać opóźnienie pozyskiwania danych, jeśli jest używane nadmiernie. Zachowaj ostrożność podczas korzystania z tej funkcji więcej niż kilka razy na przekształcenie.

Identyfikator cudzysłów

Użyj identyfikatora cudzysłów zgodnie z potrzebami.

Następne kroki

  • Utwórz regułę zbierania danych i skojarzenie z nią z maszyny wirtualnej przy użyciu agenta usługi Azure Monitor.