Azure İzleyici günlüklerinde metin verilerini ayrıştırma

Azure İzleyici tarafından toplanan bazı günlük verileri tek bir özellikte birden çok bilgi parçası içerir. Bu verilerin birden çok özelliğe ayrıştırılması sorgularda kullanımı kolaylaştırır. Yaygın bir örnek, birden çok değer içeren bir günlük girişinin tamamını tek bir özellikte toplayan özel bir günlük örneğidir. Farklı değerler için ayrı özellikler oluşturarak her birinde arama yapabilir ve toplayabilirsiniz.

Bu makalede, veriler alındığında ve sorguda alındığında Azure İzleyici'de günlük verilerini ayrıştırmayla ilgili farklı seçenekler açıklanır ve her birinin göreli avantajları karşılaştırılır.

Gerekli izinler

Ayrıştırma yöntemleri

Verileri, veriler toplandığında veri alımı sırasında veya bir sorguyla verileri analiz ettiğinizde sorgu zamanında ayrıştırabilirsiniz. Her stratejinin benzersiz avantajları vardır.

Verileri toplama zamanında ayrıştırma

Verileri toplama zamanında ayrıştırmak ve ayrıştırılan verilerin hangi sütunlara gönderılacağını tanımlamak için dönüşümleri kullanın.

Avantaj -ları:

  • Sorguya ayrıştırma komutları eklemeniz gerekmadığı için toplanan verileri sorgulamak daha kolaydır.
  • Sorgunun ayrıştırma gerçekleştirmesi gerekmeyen sorgu performansı daha iyi.

Dezavantaj -ları:

  • Önceden tanımlanmalıdır. Daha önce toplanmış veriler eklenemez.
  • Ayrıştırma mantığını değiştirirseniz, bu yalnızca yeni verilere uygulanır.
  • Veri toplama için gecikme süresini artırır.
  • Hataların işlenmesi zor olabilir.

Sorgu zamanında verileri ayrıştırma

Sorgu zamanında verileri ayrıştırdığınızda, verileri birden çok alana ayrıştırmak için sorgunuza mantık eklersiniz. Gerçek tablonun kendisi değiştirilmez.

Avantaj -ları:

  • Zaten toplanmış veriler de dahil olmak üzere tüm veriler için geçerlidir.
  • Mantıktaki değişiklikler tüm verilere hemen uygulanabilir.
  • Belirli veri yapıları için önceden tanımlanmış mantık da dahil olmak üzere esnek ayrıştırma seçenekleri.

Dezavantaj -ları:

  • Daha karmaşık sorgular gerektirir. Bu dezavantaj, bir tablonun benzetimini yapmak için işlevler kullanılarak azaltılabilir.
  • Ayrıştırma mantığını birden çok sorguda çoğaltması gerekir. İşlevler aracılığıyla bazı mantıkları paylaşabilir.
  • Çok büyük kayıt kümelerinde (milyarlarca kayıt) karmaşık mantık çalıştırdığınızda ek yük oluşturabilir.

Toplanan verileri ayrıştırma

Toplanan verileri ayrıştırma hakkında daha fazla bilgi için bkz. Azure İzleyici'de dönüştürmenin yapısı. Bu yaklaşım, tabloda diğer özellikler gibi sorgular tarafından kullanılabilecek özel özellikler oluşturur.

Desenleri kullanarak sorgudaki verileri ayrıştırma

Ayrıştırmak istediğiniz veriler kayıtlar arasında yinelenen bir desenle tanımlanabilirse, belirli bir veri parçasını bir veya daha fazla yeni özelliğe ayıklamak için Kusto Sorgu Dili farklı işleçler kullanabilirsiniz.

Basit metin desenleri

Bir dize ifadesinden ayıklanabilir bir veya daha fazla özel özellik oluşturmak için sorgunuzdaki ayrıştırma işlecini kullanın. Tanımlanacak düzeni ve oluşturulacak özelliklerin adlarını belirtirsiniz. Bu yaklaşım, benzeri key=valuebir forma sahip anahtar-değer dizelerine sahip veriler için kullanışlıdır.

Aşağıdaki biçimde veri içeren özel bir günlük düşünün:

Time=2018-03-10 01:34:36 Event Code=207 Status=Success Message=Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
Time=2018-03-10 01:33:33 Event Code=208 Status=Warning Message=Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
Time=2018-03-10 01:35:44 Event Code=209 Status=Success Message=Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
Time=2018-03-10 01:38:22 Event Code=302 Status=Error Message=Application could not connect to database
Time=2018-03-10 01:31:34 Event Code=303 Status=Error Message=Application lost connection to database

Aşağıdaki sorgu bu verileri ayrı ayrı özelliklere ayrıştıracak. ile project satırı, özel günlükten tüm girişi tutan tek özellik olan değerini değil RawDatayalnızca hesaplanan özellikleri döndürmek için eklenir.

MyCustomLog_CL
| parse RawData with * "Time=" EventTime " Event Code=" Code " Status=" Status " Message=" Message
| project EventTime, Code, Status, Message

Bu örnek, tablodaki bir UPN'nin AzureActivity kullanıcı adını keser.

AzureActivity
| parse  Caller with UPNUserPart "@" * 
| where UPNUserPart != "" //Remove non UPN callers (apps, SPNs, etc)
| distinct UPNUserPart, Caller

Normal ifadeler

Verileriniz normal bir ifadeyle tanımlanabilirse, tek tek değerleri ayıklamak için normal ifadeleri kullanan işlevleri kullanabilirsiniz. Aşağıdaki örnek, alanı kayıtlardan AzureActivity ayırmak UPN ve sonra farklı kullanıcılar döndürmek için ayıklamayı kullanır.

AzureActivity
| extend UPNUserPart = extract("([a-z.]*)@", 1, Caller) 
| distinct UPNUserPart, Caller

Azure İzleyici, büyük ölçekte verimli ayrıştırmayı etkinleştirmek için Normal İfadeler'in re2 sürümünü kullanır. Bu sürüm benzerdir ancak diğer normal ifade değişkenleriyle aynı değildir. Daha fazla bilgi için re2 ifadesi söz dizimine bakın.

Sorguda sınırlandırılmış verileri ayrıştırma

Sınırlandırılmış veriler, alanları CSV dosyasındaki virgül gibi ortak bir karakterle ayırır. Belirttiğiniz sınırlayıcıyı kullanarak sınırlandırılmış verileri ayrıştırmak için split işlevini kullanın. Verilerdeki tüm alanları döndürmek veya çıkışa eklenecek tek tek alanları belirtmek için genişletme işleciyle bu yaklaşımı kullanabilirsiniz.

Not

Bölme bir dinamik nesne döndürdüğünden, sonuçların işleçlerde ve filtrelerde kullanılacak dize gibi veri türlerine açıkça atanması gerekebilir.

Aşağıdaki CSV biçimindeki verileri içeren özel bir günlük düşünün:

2018-03-10 01:34:36, 207,Success,Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
2018-03-10 01:33:33, 208,Warning,Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
2018-03-10 01:35:44, 209,Success,Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
2018-03-10 01:38:22, 302,Error,Application could not connect to database
2018-03-10 01:31:34, 303,Error,Application lost connection to database

Aşağıdaki sorgu bu verileri ayrıştırıp hesaplanan özelliklerden ikisine göre özetler. İlk satır özelliği bir dize dizisine böler RawData . Sonraki satırların her biri tek tek özelliklere bir ad verir ve işlevleri kullanarak bunları uygun veri türüne dönüştürerek bunları çıkışa ekler.

MyCustomCSVLog_CL
| extend CSVFields  = split(RawData, ',')
| extend EventTime  = todatetime(CSVFields[0])
| extend Code       = toint(CSVFields[1]) 
| extend Status     = tostring(CSVFields[2]) 
| extend Message    = tostring(CSVFields[3]) 
| where getyear(EventTime) == 2018
| summarize count() by Status,Code

Sorguda önceden tanımlanmış yapıları ayrıştırma

Verileriniz bilinen bir yapıda biçimlendirildiyse, önceden tanımlanmış yapıları ayrıştırmak için Kusto Sorgu Dili işlevlerden birini kullanabilirsiniz:

Aşağıdaki örnek sorgu, JSON'da yapılandırılmış olan tablonun alanını AzureActivity ayrıştırmaktadırProperties. Sonuçları, JSON'da adlandırılmış tek değeri içeren adlı parsedPropdinamik bir özelliğe kaydeder. Bu değerler sorgu sonuçlarını filtrelemek ve özetlemek için kullanılır.

AzureActivity
| extend parsedProp = parse_json(Properties) 
| where parsedProp.isComplianceCheck == "True" 
| summarize count() by ResourceGroup, tostring(parsedProp.tags.businessowner)

Bu ayrıştırma işlevleri işlemci yoğunluklu olabilir. Bunları yalnızca sorgunuz biçimlendirilmiş verilerden birden çok özellik kullandığında kullanın. Aksi takdirde, basit desen eşleştirme işlemi daha hızlıdır.

Aşağıdaki örnekte etki alanı denetleyicisi TGT Preauth türünün dökümü gösterilmektedir. Tür yalnızca EventData bir XML dizesi olan alanda bulunur. Bu alandan başka veri gerekmez. Bu durumda, gerekli veri parçasını seçmek için ayrıştırma kullanılır.

SecurityEvent
| where EventID == 4768
| parse EventData with * 'PreAuthType">' PreAuthType '</Data>' * 
| summarize count() by PreAuthType

Bir tablonun benzetimini yapmak için işlev kullanma

Belirli bir tabloda aynı ayrıştırma işlemini gerçekleştiren birden çok sorgunuz olabilir. Bu durumda, ayrıştırma mantığını her sorguda çoğaltmak yerine ayrıştırılmış verileri döndüren bir işlev oluşturun . Ardından, diğer sorgularda özgün tablonun yerine işlev diğer adını kullanabilirsiniz.

Yukarıdaki virgülle ayrılmış özel günlük örneğini göz önünde bulundurun. Ayrıştırılmış verileri birden çok sorguda kullanmak için aşağıdaki sorguyu kullanarak bir işlev oluşturun ve diğer adıyla MyCustomCSVLogkaydedin.

MyCustomCSVLog_CL
| extend CSVFields = split(RawData, ',')
| extend DateTime  = tostring(CSVFields[0])
| extend Code      = toint(CSVFields[1]) 
| extend Status    = tostring(CSVFields[2]) 
| extend Message   = tostring(CSVFields[3]) 

Artık aşağıdaki örnekte olduğu gibi sorgularda gerçek tablo adının yerine diğer adı MyCustomCSVLog kullanabilirsiniz:

MyCustomCSVLog
| summarize count() by Status,Code

Sonraki adımlar

Veri kaynaklarından ve çözümlerden toplanan verileri analiz etmek için günlük sorguları hakkında bilgi edinin.