استخراج بيانات من بيانات سلسلة منظّمة البنية
قد تحتوي حقول السلاسل أيضًا على بيانات منظّمة البنية، مثل أزواج JSON أو أزواج قيم المفاتيح. توفر KQL سهولة الوصول إلى هذه القيم لمزيد من التحليل.
الحقول الديناميكية
ضمن جدول تحليلات السجلات، هناك أنواع حقول معرّفة على أنها ديناميكية. تحتوي الحقول الديناميكية على زوج من قيمة المفتاح، مثل:
{"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"}
للوصول إلى السلاسل ضمن حقل ديناميكي، استخدم رمز النقطة. يعتبر حقل DeviceDetail من جدول SigninLogs من النوع الديناميكي. في هذا المثال، يمكنك الوصول إلى نظام التشغيل باستخدام اسم الحقل DeviceDetail.operatingSystem.
SigninLogs
| extend OS = DeviceDetail.operatingSystem
يوضح مثال الاستعلام أدناه استخدام الحقول الديناميكية مع جدول SigninLogs.
// 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 وظائف لمعالجة JSON المخزنة في حقول السلسلة. ترسل العديد من السجلات البيانات بتنسيق JSON، الأمر الذي يتطلب منك أن تعرف كيفية تحويل بيانات JSON إلى حقول قابلة للاستعلام.
يعبر المثال أدناه عن قائمة بالوظائف وعوامل التشغيل ذات الصلة بـ JSON.
دالة | الوصف |
---|---|
parse-json() أو todynamic() | يفسر سلسلة كقيمة JSON وإرجاع القيمة كحيوية. استخدم أياً من هذين للإشارة إلى حقل: JsonField.Key أو JsonField ["Key"] |
mv-expand | يتم تطبيقه على مصفوفة dynamic-typed أو عمود مجموعة الخصائص بحيث تحصل كل قيمة في المجموعة على صف منفصل. تُكرر كل الأعمدة الموجودة في صف موسع. mv_expand هي أسهل طريقة لمعالجة صفائف JSON. |
mv-apply | تطبيق استعلام فرعي على كل سجل وإرجاع توحيد نتائج جميع الاستعلامات الفرعية. تطبيق استعلام على كل قيمة في صفيفة. |
تشغيل كل استعلام بشكل منفصل لمشاهدة النتائج.
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")