Azure İzleyici'de dönüşümün yapısı
Azure İzleyici'deki dönüştürmeler, gelen verileri Log Analytics çalışma alanında depolanmadan önce filtrelemenize veya değiştirmenize olanak sağlar. Bunlar, veri toplama kuralında (DCR) Kusto Sorgu Dili (KQL) deyimi olarak uygulanır. Bu makalede, bu sorgunun nasıl yapılandırıldığına ilişkin ayrıntılar ve izin verilen KQL diliyle ilgili sınırlamalar sağlanır.
Dönüştürme yapısı
KQL deyimi, veri kaynağındaki her girişe ayrı ayrı uygulanır. Gelen verilerin biçimini anlamalı ve hedef tablonun yapısında çıkış oluşturmalıdır. adlı source
bir sanal tablo, giriş akışını temsil eder. source
tablo sütunları giriş veri akışı tanımıyla eşleşer. Aşağıda tipik bir dönüştürme örneği verilmiştir. Bu örnek aşağıdaki işlevleri içerir:
- Gelen verileri bir
where
deyimle filtreler. - işlecini
extend
kullanarak yeni bir sütun ekler. - çıkışı, işlecini kullanarak hedef tablonun sütunlarıyla eşleşecek şekilde biçimlendirır
project
.
source
| where severity == "Critical"
| extend Properties = parse_json(properties)
| project
TimeGenerated = todatetime(["time"]),
Category = category,
StatusDescription = StatusDescription,
EventName = name,
EventId = tostring(Properties.EventId)
KQL sınırlamaları
Dönüştürme her kayda ayrı ayrı uygulandığından, birden çok kayıt üzerinde işlem gösteren KQL işleçleri kullanamaz. Yalnızca tek bir satırı giriş olarak alan ve en fazla bir satır döndüren işleçler desteklenir. Örneğin, birden çok kaydı özetlediğinden özetleme desteklenmez. Desteklenen özelliklerin tam listesi için bkz. Desteklenen KQL özellikleri.
Veri toplama kuralındaki (DCR) dönüştürmeler, gelen verileri Log Analytics çalışma alanında depolanmadan önce filtrelemenize veya değiştirmenize olanak sağlar. Bu makalede, dönüştürme deyimi için kullanılan Kusto Sorgu Dili (KQL) ayrıntıları ve sınırlamaları da dahil olmak üzere DCR'de dönüştürmelerin nasıl der kullanılacağı açıklanır.
Ayrıştır komutu
Dönüştürmedeki ayrıştır komutu performans nedeniyle deyim başına 10 sütunla sınırlıdır. Dönüştürmeniz 10'dan fazla sütunu ayrıştırmayı gerektiriyorsa, büyük ayrıştırma komutlarında açıklandığı gibi bunu birden çok deyime bölün.
Gerekli sütunlar
Her dönüşümün çıkışı, türünde datetime
adlı TimeGenerated
bir sütunda geçerli bir zaman damgası içermelidir. Bunu finale extend
veya project
bloka eklediğinizden emin olun! DCR'nin dönüşümün çıkışında olmadan TimeGenerated
oluşturulması veya güncelleştirilmesi hataya neden olur.
Dinamik verileri işleme
Dinamik verilerle aşağıdaki girişi göz önünde bulundurun:
{
"TimeGenerated" : "2021-11-07T09:13:06.570354Z",
"Message": "Houston, we have a problem",
"AdditionalContext": {
"Level": 2,
"DeviceID": "apollo13"
}
}
AdditionalContext'teki özelliklere erişmek için bunu giriş akışında dinamik tür sütun olarak tanımlayın:
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "Message",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "dynamic"
}
]
AdditionalContext sütununun içeriği artık ayrıştırılabilir ve KQL dönüşümünde kullanılabilir:
source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)
Dinamik değişmez değerler
parse_json
Dinamik değişmez değerleri işlemek için işlevini kullanın.
Örneğin, aşağıdaki sorgular aynı işlevselliği sağlar:
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":{}}')
Desteklenen KQL özellikleri
Desteklenen deyimler
Let deyimi
sağ tarafı let
bir skaler ifade, tablosal ifade veya kullanıcı tanımlı bir işlev olabilir. Yalnızca skaler bağımsız değişkenleri olan kullanıcı tanımlı işlevler desteklenir.
Tablosal ifade deyimleri
KQL deyimi için desteklenen tek veri kaynakları şunlardır:
kaynak verileri temsil eden kaynak. Örneğin:
source | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41" | project PreciseTimeStamp, Message
print
işleci, her zaman tek bir satır oluşturur. Örneğin:print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Tablosal işleçler
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(column_ifexists yerine columnifexists kullanın)
Skaler işleçler
Sayısal işleçler
Tüm Sayısal işleçler desteklenir.
Datetime ve Timespan aritmetik işleçleri
Tüm Datetime ve Timespan aritmetik işleçleri desteklenir.
Dize işleçleri
Aşağıdaki Dize işleçleri desteklenir.
==
!=
=~
!~
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
Bit düzeyinde işleçler
Aşağıdaki Bit düzeyinde işleçler desteklenir.
binary_and()
binary_or()
binary_xor()
binary_not()
binary_shift_left()
binary_shift_right()
Skaler işlevler
Bit düzeyinde işlevler
Dönüştürme işlevleri
DateTime ve TimeSpan işlevleri
ago
datetime_add
datetime_diff
datetime_part
dayofmonth
dayofweek
dayofyear
endofday
endofmonth
endofweek
endofyear
getmonth
getyear
hourofday
make_datetime
make_timespan
now
startofday
startofmonth
startofweek
startofyear
todatetime
totimespan
weekofyear
Dinamik ve dizi işlevleri
Matematiksel işlevler
Koşullu işlevler
Dize işlevleri
base64_encodestring
(base64_encode_tostring yerine base64_encodestring kullanın)base64_decodestring
(base64_decode_tostring yerine base64_decodestring kullanın)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
Tür işlevleri
Özel işlevler
parse_cef_dictionary
CEF iletisi içeren bir dize verüldüğünde, parse_cef_dictionary
iletinin Extension özelliğini dinamik anahtar/değer nesnesine ayrıştırıyor. Noktalı virgül, örnekte gösterildiği gibi ham ileti yöntemine geçirilmeden önce değiştirilmesi gereken ayrılmış bir karakterdir.
| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage)
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage)
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension
geo_location
IP adresi (IPv4 ve IPv6 desteklenir) geo_location
içeren bir dize verildiğinde, işlev aşağıdaki öznitelikler de dahil olmak üzere yaklaşık coğrafi konumu döndürür:
- Ülke
- Bölge
- State
- City
- Enlem
- Boylam
| extend GeoLocation = geo_location("1.0.0.5")
Önemli
Bu işlev tarafından kullanılan IP coğrafi konum hizmetinin doğası gereği, aşırı kullanıldığında veri alımı gecikmesine neden olabilir. Bu işlevi dönüştürme başına birkaç kereden fazla kullanırken dikkatli olun.
Tanımlayıcı alıntılama
Tanımlayıcı alıntısını gerektiği gibi kullanın.
Sonraki adımlar
- Azure İzleyici aracısını kullanarak bir sanal makineden veri toplama kuralı ve bu kuralla ilişkilendirme oluşturun.