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
- 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/*
. - Sorgu zamanında verileri 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, 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=value
bir 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 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ı 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ı 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 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 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.