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:

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

  • ==
  • !=
  • =~
  • !~
  • 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

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ö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

Sample output of parse_cef_dictionary function.

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

Screenshot of sample output of geo_location function.

Ö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