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 where deyimiyle filtreler
- extend işlecini kullanarak yeni bir sütun ekler
- Proje işlecini kullanarak çıkışı hedef tablonun sütunlarıyla eşleşecek şekilde biçimlendirır
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.
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'yi dönüştürme çıkışında olmadan TimeGenerated
oluşturmak veya güncelleştirmek 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
Dinamik değişmez değerleri işlemek için parse_json 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
let öğesinin sağ tarafı 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
- her zaman tek bir satır üreten print işleci. Örneğin:
print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Tablosal işleçler
- Genişlet -mek
- Proje
- Yazdırma
- Nerede
- Ayrıştı -rma
- proje dışı
- 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.
- ==
- !=
- =~
- !~
- içerir
- !Içerir
- contains_cs
- !contains_cs
- Hsa
- !Hsa
- has_cs
- !has_cs
- startswith
- !Startswith
- startswith_cs
- !startswith_cs
- ilebiter
- !Endswith
- endswith_cs
- !endswith_cs
- regex ile eşleşir
- içinde
- !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
- Önce
- datetime_add
- datetime_diff
- datetime_part
- dayofmonth
- Dayofweek
- Dayofyear
- endofday
- endofmonth
- hafta sonu
- endofyear
- getmonth
- getyear
- Hourofday
- make_datetime
- make_timespan
- Nwo
- startofday
- startofmonth
- startofweek
- startofyear
- todatetime
- zaman aralığı
- 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
- Ayıklamak
- extract_all
- ındexof
- ısempty
- isnotempty
- parse_json
- replace
- split
- strcat
- strcat_delim
- Strlen
- Dize
- 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önteme 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
- Durum
- 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.