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ır
Microsoft.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ır
Microsoft.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=value
bir 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ı parsedProp
dinamik 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 MyCustomCSVLog
kaydedin.
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.