Obsługiwane funkcje KQL w przekształceniach usługi Azure Monitor
Przekształcenia w usłudze Azure Monitor umożliwiają uruchamianie zapytania KQL względem przychodzących danych usługi Azure Monitor w celu filtrowania lub modyfikowania danych przychodzących przed ich zapisaniem w obszarze roboczym usługi Log Analytics. W tym artykule szczegółowo opisano zagadnienia dotyczące języka KQL i obsługiwane funkcje zapytań przekształcania oprócz specjalnych operatorów, które są dostępne tylko w przekształceniach.
Ponieważ przekształcenia są stosowane do każdego rekordu indywidualnie, nie mogą 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.
Tylko operatory wymienione w tym artykule są obsługiwane w przekształceniach. Wszelkie inne operatory, które mogą być używane w innych zapytaniach dziennika, nie są obsługiwane w przekształceniach.
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.
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)
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":{}}')
Następujące funkcje są dostępne tylko w przekształceniach. Nie można ich używać w innych zapytaniach dziennika.
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
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")
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.
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.
Jedyne obsługiwane źródła danych dla instrukcji KQL w transformacji 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)
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(użyj kolumnifexists zamiast column_ifexists)
- Obsługiwane są wszystkie operatory liczbowe.
- Obsługiwane są wszystkie operatory arytmetyczne daty/godziny i przedziału czasu.
- 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
- Obsługiwane są następujące operatory bitowe.
binary_and()
binary_or()
binary_xor()
binary_not()
binary_shift_left()
binary_shift_right()
- Funkcje bitowe
- Funkcje konwersji
- Funkcje DateTime i TimeSpan
- Funkcje dynamiczne i tablicowe
- Funkcje matematyczne
- Funkcje warunkowe
- Funkcje ciągów
base64_encodestring
(użyj base64_encodestring zamiast base64_encode_tostring)base64_decodestring
(użyj base64_decodestring zamiast base64_decode_tostring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
- Funkcje typów
Użyj identyfikatora cudzysłów zgodnie z potrzebami.
- Utwórz regułę zbierania danych i skojarzenie z nią z maszyny wirtualnej przy użyciu agenta usługi Azure Monitor.