معالجة القواعد المستندة إلى الحد القابلة للتكوين في Azure Stream Analytics
توضح هذه المقالة كيفية استخدام البيانات المرجعية لتحقيق حل تنبيهي يستخدم قواعد مستندة إلى الحد قابلة للتكوين في Azure Stream Analytics.
السيناريو: التنبيه على أساس حدود القاعدة القابلة للتعديل
قد تحتاج إلى إنتاج تنبيه كناتج عندما تصل الأحداث المتدفقة الواردة إلى قيمة معينة، أو عندما تتجاوز القيمة المجمعة استناداً إلى الأحداث المتدفقة الواردة حداً معيناً. من السهل إعداد استعلام Stream Analytics الذي يقارن القيمة بحد ثابت ومحدد مسبقاً. يمكن استخدام تعليمات برمجية مضمّنة لحد ثابت في صيغة الاستعلام المتدفقة باستخدام مقارنات عددية بسيطة (أكبر من، وأقل من، ومساواة).
في بعض الحالات، يجب أن تكون قيم الحد قابلة للتكوين بسهولة أكبر دون تحرير صيغة الاستعلام في كل مرة تتغير فيها قيمة الحد. في حالات أخرى، قد تحتاج إلى العديد من الأجهزة أو المستخدمين الذين تتم معالجتهم بواسطة نفس الاستعلام مع وجود قيم حد مختلفة لكل منهم على كل نوع من الأجهزة.
يمكن استخدام هذا النمط لتكوين الحدود ديناميكياً، واختيار نوع الجهاز الذي يتم تطبيقه بشكل انتقائي عن طريق تصفية بيانات الإدخال، واختيار الحقول المراد تضمينها في الإخراج بشكل انتقائي.
نمط التصميم الموصى به
استخدم إدخال بيانات مرجعية إلى وظيفة Stream Analytics كبحث عن حدود التنبيه:
- قم بتخزين قيم الحد في البيانات المرجعية، قيمة واحدة لكل مفتاح.
- انضم إلى أحداث إدخال البيانات المتدفقة إلى البيانات المرجعية في عمود المفتاح.
- استخدم القيمة المحددة من البيانات المرجعية كقيمة الحد.
مثال على البيانات والاستعلام
في المثال، يتم إنشاء التنبيهات عندما يتطابق تجميع البيانات المتدفقة من الأجهزة في نافذة مدتها دقيقة مع القيم المنصوص عليها في القاعدة المقدمة كبيانات مرجعية.
في الاستعلام، لكل deviceId، ولكل metricName ضمن deviceId، يمكنك تكوين من 0 إلى 5 أبعاد إلى GROUP BY. يتم تجميع الأحداث التي تحتوي على قيم التصفية المقابلة فقط. بمجرد تجميعها، يتم حساب مجاميع الإطارات الخاصة بالحد الأدنى، والحد الأقصى، والمتوسط، عبر نافذة هبوط مدتها 60 ثانية. يتم بعد ذلك حساب عوامل التصفية على القيم المجمعة وفقاً للحد المكونة في المرجع، لإنشاء حدث إخراج التنبيه.
على سبيل المثال، افترض أن هناك وظيفة Stream Analytics لها إدخال بيانات مرجعي يسمى القواعدوتدفق إدخال البيانات المسمى القياسات.
البيانات المرجعيّة
يوضح هذا المثال للبيانات المرجعية كيف يمكن تمثيل القاعدة المستندة إلى الحد. يحتفظ ملف JSON بالبيانات المرجعية ويتم حفظه في موقع تخزين Azure Blob، ويتم استخدام حاوية تخزين البيانات الثنائية الكبيرة هذه كمدخل بيانات مرجعي يُسمى القواعد. يمكنك الكتابة فوق ملف JSON واستبدال تكوين القاعدة مع مرور الوقت، دون التوقف أو بدء وظيفة البث.
- يتم استخدام قاعدة المثال لتمثيل تنبيه قابل للتعديل عند تجاوز CPU (المتوسط أكبر من أو يساوي) القيمة
90
بالمائة. الحقلvalue
قابل للتكوين حسب الحاجة. - لاحظ أن القاعدة بها حقل عامل تشغيل، والذي يتم تفسيره ديناميكياً في بناء جملة الاستعلام لاحقاً في
AVGGREATEROREQUAL
. - تقوم القاعدة بتصفية البيانات على مفتاح مكون معين
2
بقيمةC1
. الحقول الأخرى عبارة عن سلسلة فارغة، تشير إلى عدم تصفية تدفق الإدخال بواسطة حقول الحدث هذه. يمكنك إعداد قواعد إضافية لوحدة المعالجة المركزية لتصفية الحقول المطابقة الأخرى حسب الحاجة. - لا يتم تضمين جميع الأعمدة في حدث تنبيه الإخراج. في هذه الحالة، يتم تشغيل
includedDim
رقم المفتاح2
TRUE
لتمثيل أن الحقل رقم 2 لبيانات الحدث في الدفق سيتم تضمينه في أحداث الإخراج المؤهلة. لا يتم تضمين الحقول الأخرى في إخراج التنبيه، ولكن يمكن تعديل قائمة الحقول.
{
"ruleId": 1234,
"deviceId" : "978648",
"metricName": "CPU",
"alertName": "hot node AVG CPU over 90",
"operator" : "AVGGREATEROREQUAL",
"value": 90,
"includeDim": {
"0": "FALSE",
"1": "FALSE",
"2": "TRUE",
"3": "FALSE",
"4": "FALSE"
},
"filter": {
"0": "",
"1": "",
"2": "C1",
"3": "",
"4": ""
}
}
مثال على دفق الاستعلام
يدمج طلب بحث Stream Analytics هذا في نموذج القواعد البيانات المرجعية من المثال أعلاه، إلى تدفق إدخال للبيانات يُسمى القياسات.
WITH transformedInput AS
(
SELECT
dim0 = CASE rules.includeDim.[0] WHEN 'TRUE' THEN metrics.custom.dimensions.[0].value ELSE NULL END,
dim1 = CASE rules.includeDim.[1] WHEN 'TRUE' THEN metrics.custom.dimensions.[1].value ELSE NULL END,
dim2 = CASE rules.includeDim.[2] WHEN 'TRUE' THEN metrics.custom.dimensions.[2].value ELSE NULL END,
dim3 = CASE rules.includeDim.[3] WHEN 'TRUE' THEN metrics.custom.dimensions.[3].value ELSE NULL END,
dim4 = CASE rules.includeDim.[4] WHEN 'TRUE' THEN metrics.custom.dimensions.[4].value ELSE NULL END,
metric = metrics.metric.value,
metricName = metrics.metric.name,
deviceId = rules.deviceId,
ruleId = rules.ruleId,
alertName = rules.alertName,
ruleOperator = rules.operator,
ruleValue = rules.value
FROM
metrics
timestamp by eventTime
JOIN
rules
ON metrics.deviceId = rules.deviceId AND metrics.metric.name = rules.metricName
WHERE
(rules.filter.[0] = '' OR metrics.custom.filters.[0].value = rules.filter.[0]) AND
(rules.filter.[1] = '' OR metrics.custom.filters.[1].value = rules.filter.[1]) AND
(rules.filter.[2] = '' OR metrics.custom.filters.[2].value = rules.filter.[2]) AND
(rules.filter.[3] = '' OR metrics.custom.filters.[3].value = rules.filter.[3]) AND
(rules.filter.[4] = '' OR metrics.custom.filters.[4].value = rules.filter.[4])
)
SELECT
System.Timestamp as time,
transformedInput.deviceId as deviceId,
transformedInput.ruleId as ruleId,
transformedInput.metricName as metric,
transformedInput.alertName as alert,
AVG(metric) as avg,
MIN(metric) as min,
MAX(metric) as max,
dim0, dim1, dim2, dim3, dim4
FROM
transformedInput
GROUP BY
transformedInput.deviceId,
transformedInput.ruleId,
transformedInput.metricName,
transformedInput.alertName,
dim0, dim1, dim2, dim3, dim4,
ruleOperator,
ruleValue,
TumblingWindow(second, 60)
HAVING
(
(ruleOperator = 'AVGGREATEROREQUAL' AND avg(metric) >= ruleValue) OR
(ruleOperator = 'AVGEQUALORLESS' AND avg(metric) <= ruleValue)
)
مثال تدفق بيانات حدث الإدخال
تمثل بيانات JSON النموذجية هذه بيانات إدخال القياسات المستخدمة في استعلام التدفق أعلاه.
- تم إدراج ثلاثة أمثلة على الأحداث ضمن النطاق الزمني لمدة دقيقة واحدة، القيمة
T14:50
. - الثلاثة جميعها لها نفس
deviceId
القيمة978648
. - تختلف قيم قياس وحدة المعالجة المركزية في كل حدث،
98
،95
،80
على التوالي. أول مثالين فقط يتجاوزان قاعدة تنبيه وحدة المعالجة المركزية المحددة في القاعدة. - كان حقل includeDim في قاعدة التنبيه هو المفتاح رقم 2. يسمى حقل المفتاح 2 المقابل في أمثلة الأحداث باسم
NodeName
. الأحداث الثلاثة النموذجية لها قيمN024
وN024
N014
على التوالي. في الإخراج، ترى العقدة فقطN024
حيث إن هذه هي البيانات الوحيدة التي تطابق معايير التنبيه لوحدة المعالجة المركزية العالية.N014
لا يفي بالحد الأعلى لوحدة المعالجة المركزية. - يتم تكوين قاعدة التنبيه باستخدام
filter
فقط على المفتاح رقم 2، والذي يتوافق مع الحقلcluster
في نماذج الأحداث. جميع الأحداث النموذجية الثلاثة لها قيمةC1
وتتطابق مع معايير التصفية.
{
"eventTime": "2018-04-30T14:50:23.1324132Z",
"deviceId": "978648",
"custom": {
"dimensions": {
"0": {
"name": "NodeType",
"value": "N1"
},
"1": {
"name": "Cluster",
"value": "C1"
},
"2": {
"name": "NodeName",
"value": "N024"
}
},
"filters": {
"0": {
"name": "application",
"value": "A1"
},
"1": {
"name": "deviceType",
"value": "T1"
},
"2": {
"name": "cluster",
"value": "C1"
},
"3": {
"name": "nodeType",
"value": "N1"
}
}
},
"metric": {
"name": "CPU",
"value": 98,
"count": 1.0,
"min": 98,
"max": 98,
"stdDev": 0.0
}
}
{
"eventTime": "2018-04-30T14:50:24.1324138Z",
"deviceId": "978648",
"custom": {
"dimensions": {
"0": {
"name": "NodeType",
"value": "N2"
},
"1": {
"name": "Cluster",
"value": "C1"
},
"2": {
"name": "NodeName",
"value": "N024"
}
},
"filters": {
"0": {
"name": "application",
"value": "A1"
},
"1": {
"name": "deviceType",
"value": "T1"
},
"2": {
"name": "cluster",
"value": "C1"
},
"3": {
"name": "nodeType",
"value": "N2"
}
}
},
"metric": {
"name": "CPU",
"value": 95,
"count": 1,
"min": 95,
"max": 95,
"stdDev": 0
}
}
{
"eventTime": "2018-04-30T14:50:37.1324130Z",
"deviceId": "978648",
"custom": {
"dimensions": {
"0": {
"name": "NodeType",
"value": "N3"
},
"1": {
"name": "Cluster",
"value": "C1 "
},
"2": {
"name": "NodeName",
"value": "N014"
}
},
"filters": {
"0": {
"name": "application",
"value": "A1"
},
"1": {
"name": "deviceType",
"value": "T1"
},
"2": {
"name": "cluster",
"value": "C1"
},
"3": {
"name": "nodeType",
"value": "N3"
}
}
},
"metric": {
"name": "CPU",
"value": 80,
"count": 1,
"min": 80,
"max": 80,
"stdDev": 0
}
}
مثال على الإخراج
يُظهر هذا المثال الناتج عن بيانات JSON أن حدث تنبيه واحد قد تم إنشاؤه بناءً على قاعدة حد وحدة المعالجة المركزية المحددة في البيانات المرجعية. يحتوي حدث الإخراج على اسم التنبيه بالإضافة إلى التجميع (المتوسط، الأدنى، الأقصى) للحقول التي تم النظر فيها. تتضمن بيانات حدث الإخراج رقم مفتاح الحقل 2 NodeName
القيمة N024
بسبب تكوين القاعدة. (تم تعديل JSON لإظهار فواصل الأسطر لسهولة القراءة.)
{"time":"2018-05-01T02:03:00.0000000Z","deviceid":"978648","ruleid":1234,"metric":"CPU",
"alert":"hot node AVG CPU over 90","avg":96.5,"min":95.0,"max":98.0,
"dim0":null,"dim1":null,"dim2":"N024","dim3":null,"dim4":null}