Yapılandırılmış dize verilerinden veri ayıklama
Dize alanları JSON veya Anahtar-Değer çiftleri gibi yapılandırılmış veriler de içerebilir. KQL, daha fazla analiz için bu değerlere kolay erişim sağlar.
Dinamik Alanlar
Log Analytics tablosunda Dinamik olarak tanımlanan alan türleri vardır. Dinamik alanlar şunlar gibi bir anahtar-değer çifti içerir:
{"eventCategory":"Autoscale","eventName":"GetOperationStatusResult","operationId":"xxxxxxxx-6a53-4aed-bab4-575642a10226","eventProperties":"{\"OldInstancesCount\":6,\"NewInstancesCount\":5}","eventDataId":" xxxxxxxx -efe3-43c2-8c86-cd84f70039d3","eventSubmissionTimestamp":"2020-11-30T04:06:17.0503722Z","resource":"ch-appfevmss-pri","resourceGroup":"CH-RETAILRG-PRI","resourceProviderValue":"MICROSOFT.COMPUTE","subscriptionId":" xxxxxxxx -7fde-4caf-8629-41dc15e3b352","activityStatusValue":"Succeeded"}
Dinamik alan içindeki dizelere erişmek için nokta gösterimini kullanın. SigninLogs tablosundaki DeviceDetail alanı dinamik türündedir. Bu örnekte, DeviceDetail.operatingSystem alan adıyla İşletim Sistemine erişebilirsiniz.
SigninLogs
| extend OS = DeviceDetail.operatingSystem
Aşağıdaki sorgu örneği, SigninLogs tablosuyla Dinamik alanların kullanımını gösterir.
// Example query for SigninLogs showing how to break out packed fields.
SigninLogs
| extend OS = DeviceDetail.operatingSystem, Browser = DeviceDetail.browser
| extend StatusCode = tostring(Status.errorCode), StatusDetails = tostring(Status.additionalDetails)
| extend Date = startofday(TimeGenerated)
| summarize count() by Date, Identity, UserDisplayName, UserPrincipalName, IPAddress, ResultType, ResultDescription, StatusCode, StatusDetails
| sort by Date
JSON
KQL, dize alanlarında depolanan JSON'ı işlemek için işlevler sağlar. Birçok günlük JSON biçiminde veri gönderir. Bu, JSON verilerini sorgulanabilir alanlara dönüştürmeyi öğrenmenizi gerektirir.
Aşağıdaki örnek, JSON ile ilgili işlevlerin ve işleçlerin listesidir.
İşlev | Açıklama |
---|---|
parse-json() veya todynamic() | Dizeyi JSON değeri olarak yorumlar ve değeri dinamik olarak döndürür. Bir alana başvurmak için şu işlevlerden birini kullanın: JsonField.Key veya JsonField["Key"] |
mv-expand | , koleksiyondaki her değerin ayrı bir satır alması için dinamik türe sahip bir diziye veya özellik paketi sütununa uygulanır. Genişletilmiş satırdaki diğer tüm sütunlar yinelenir. mv_expand, JSON dizilerini işlemenin en kolay yoludur. |
mv-apply | Her kayda bir alt sorgu uygular ve tüm alt sorguların sonuçlarının birleşimini döndürür. Dizideki her değere bir sorgu uygulayın. |
Sonuçları görmek için her sorguyu ayrı ayrı çalıştırın.
SigninLogs
| extend AuthDetails = parse_json(AuthenticationDetails)
| extend AuthMethod = AuthDetails[0].authenticationMethod
| extend AuthResult = AuthDetails[0].["authenticationStepResultDetail"]
| project AuthMethod, AuthResult, AuthDetails
SigninLogs
| mv-expand AuthDetails = parse_json(AuthenticationDetails)
| project AuthDetails
SigninLogs
| mv-apply AuthDetails = parse_json(AuthenticationDetails) on
(where AuthDetails.authenticationMethod == "Password")