استخراج بيانات من بيانات سلسلة منظّمة البنية

مكتمل

قد تحتوي حقول السلاسل أيضًا على بيانات منظّمة البنية، مثل أزواج 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")