Aracılığıyla paylaş


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 datetimeadlı 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

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

Dinamik ve dizi işlevleri

Matematiksel işlevler

Koşullu işlevler

Dize işlevleri

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

parse_cef_dictionary işlevinin örnek çıktısı.

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")

geo_location işlevinin örnek çıktısının ekran görüntüsü.

Ö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