Aracılığıyla paylaş


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 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 özelliğe toplayan özel bir günlükdür . 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

  • Verileri toplama zamanında ayrıştırmak için, örneğin Log Analytics Katkıda Bulunanı yerleşik rolü tarafından sağlanan izinlere ihtiyacınız vardırMicrosoft.Insights/dataCollectionRuleAssociations/*.
  • Verileri sorgu zamanında ayrıştırmak için, örneğin Log Analytics Okuyucusu yerleşik rolü tarafından sağlanan izinlere ihtiyacınız vardırMicrosoft.OperationalInsights/workspaces/query/*/read.

Ayrıştırma yöntemleri

Verileri toplama sırasında veya 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üştürmeleri kullanın.

Avantajlar:

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

Dezavantajlar:

  • Ö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.

Avantajlar:

  • 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.

Dezavantajlar:

  • 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 deseni 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.

Verileri aşağıdaki biçimde olan özel bir günlüğü göz önünde bulundurun:

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ı ayrı özelliklere ayrıştıracak. ile satırı project , özel günlükten tüm girişi tutan tek bir özellik değil RawData, yalnı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ı ayırır.

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 ardından 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ırma özelliğini etkinleştirmek için Normal İfadeler'in re2 sürümünü kullanır. Bu sürüm, diğer normal ifade çeşitlemeleriyle benzerdir ancak aynı değildir. Daha fazla bilgi için re2 ifade 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 bir sınırlayıcı 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 çıktıya eklenecek tek tek alanları belirtmek için genişletme işleciyle bu yaklaşımı kullanabilirsiniz.

Not

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

Verileri aşağıdaki CSV biçiminde olan özel bir günlüğü göz önünde bulundurun:

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 çı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çimlendiriliyorsa, ö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ırırProperties. Sonuçları, JSON'daki 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 yoğun işlemci kullanabilir. 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 alanında 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ılan 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.