فهم تصفية الأحداث لاشتراكات Event Grid
توضح هذه المقالة الطرق المختلفة لتصفية الأحداث التي ترسل إلى نقطة النهاية الخاصة بك. عند إنشاء اشتراك حدث، تتوفر لديك ثلاثة خيارات للتصفية:
- أنواع الحدث
- يبدأ الموضوع أو ينتهي مع
- الحقول المتقدمة والمشغلين
قالب Azure Resource Manager
الأمثلة المُوضحة في هذه المقالة هي قصاصات JSON برمجية لتعريف عوامل التصفية في قوالب Azure Resource Manager (ARM). للحصول على مثال لقالب ARM كامل وتوزيع قالب ARM، راجع التشغيل السريع: توجيه أحداث تخزين كائن ثنائي كبير الحجم إلى نقطة نهاية الويب باستخدام قالب ARM. فيما يلي بعض الأقسام حول قسم filter
من المثال في التشغيل السريع. يحدد قالب ARM الموارد التالية.
- حساب مخزن Azure
- موضوع النظام لحساب التخزين
- اشتراك الحدث لموضوع النظام. سترى القسم الفرعي
filter
في قسم اشتراك الحدث.
في المثال التالي، عوامل تصفية اشتراك الحدث للأحداث Microsoft.Storage.BlobCreated
وMicrosoft.Storage.BlobDeleted
.
{
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-08-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
},
{
"type": "Microsoft.EventGrid/systemTopics",
"apiVersion": "2021-12-01",
"name": "[parameters('systemTopicName')]",
"location": "[parameters('location')]",
"properties": {
"source": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
"topicType": "Microsoft.Storage.StorageAccounts"
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
]
},
{
"type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
"apiVersion": "2021-12-01",
"name": "[format('{0}/{1}', parameters('systemTopicName'), parameters('eventSubName'))]",
"properties": {
"destination": {
"properties": {
"endpointUrl": "[parameters('endpoint')]"
},
"endpointType": "WebHook"
},
"filter": {
"includedEventTypes": [
"Microsoft.Storage.BlobCreated",
"Microsoft.Storage.BlobDeleted"
]
}
},
"dependsOn": [
"[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopicName'))]"
]
}
]
}
تصفية نوع الحدث
بشكل افتراضي، يتم إرسال جميع أنواع الأحداث لمصدر الحدث إلى نقطة النهاية. يمكنك أن تقرر إرسال أنواع أحداث معينة فقط إلى نقطة النهاية. على سبيل المثال، يمكنك الحصول على إعلامك بالتحديثات التي تم تحديثها إلى مواردك، ولكن لا يتم إعلامك بعمليات أخرى مثل عمليات الحذف. في هذه الحالة، عامل تصفية حسب نوع الحدث Microsoft.Resources.ResourceWriteSuccess
. قم بتوفير صفيف مع أنواع الأحداث، أو حدد All
للحصول على جميع أنواع الأحداث لمصدر الحدث.
بناء الجملة JSON لتصفية حسب نوع الحدث هو:
"filter": {
"includedEventTypes": [
"Microsoft.Resources.ResourceWriteFailure",
"Microsoft.Resources.ResourceWriteSuccess"
]
}
تصفية الموضوع
للتصفية البسيطة حسب الموضوع، حدد قيمة بداية أو نهاية للموضوع. على سبيل المثال، يمكنك تحديد موضوع ينتهي بـ .txt
للحصول فقط على الأحداث المتعلقة بتحميل ملف نصي إلى حساب التخزين. أو يمكنك تصفية الموضوع الذي يبدأ بـ /blobServices/default/containers/testcontainer
للحصول على جميع الأحداث لتلك الحاوية وليس الحاويات الأخرى في حساب التخزين.
عند نشر الأحداث على مواضيع مخصصة، قم بإنشاء موضوعات للأحداث التي تجعل من السهل على المشتركين معرفة ما إذا كانوا مهتمين بالحدث. يستخدم المشتركون خاصية الموضوع لتصفية الأحداث وتوجيهها. ضع في اعتبارك إضافة المسار لمكان وقوع الحدث، بحيث يمكن للمشتركين التصفية حسب أجزاء ذلك المسار. يمكن المسار المشتركين من تصفية الأحداث بشكل ضيق أو واسع. إذا قدمت مساراً من ثلاثة أجزاء مثل /A/B/C
في الموضوع، فيمكن للمشتركين التصفية حسب المقطع الأول/A
للحصول على مجموعة واسعة من الأحداث. يحصل هؤلاء المشتركون على أحداث مع مواضيع مثل /A/B/C
أو /A/D/E
. يمكن للمشتركين الآخرين التصفية حسب /A/B
للحصول على مجموعة أحداث أضيق.
أمثلة (أحداث Blob Storage)
يمكن تصفية أحداث Blob حسب نوع الحدث أو اسم الحاوية أو اسم الكائن الذي تم إنشاؤه أو حذفه.
يستخدم موضوع أحداث مخزن الكائنات الثنائية كبيرة الحجم التنسيق:
/blobServices/default/containers/<containername>/blobs/<blobname>
لمطابقة جميع الأحداث الخاصة بحساب تخزين، يمكنك ترك عوامل تصفية الموضوع فارغة.
لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في مجموعة من الحاويات ولها نفس البادئة، استخدم subjectBeginsWith
عامل تصفية مثل:
/blobServices/default/containers/containerprefix
لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في حاوية معينة، استخدم subjectBeginsWith
عامل تصفية مثل:
/blobServices/default/containers/containername/
لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في حاوية معينة ولها نفس بادئة اسم كائن ثنائي كبير الحجم، استخدم subjectBeginsWith
عامل تصفية مثل:
/blobServices/default/containers/containername/blobs/blobprefix
لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في مجلد فرعي معين للحاوية، استخدم subjectBeginsWith
عامل تصفية مثل:
/blobServices/default/containers/{containername}/blobs/{subfolder}/
لمطابقة الأحداث من الكائنات الثنائية كبيرة الحجم التي تم إنشاؤها في حاوية معينة ولها نفس لاحقة كائن ثنائي كبير الحجم استخدم subjectEndsWith
عامل تصفية مثل "log" أو ".jpg".
تصفية متقدمة
للتصفية حسب القيم في حقول البيانات وتحديد عامل المقارنة، استخدم خيار التصفية المتقدم. في التصفية المتقدمة، يمكنك تحديد:
- نوع عامل التشغيل - نوع المقارنة.
- مفتاح - الحقل في بيانات الحدث الذي تستخدمه للتصفية. يمكن أن يكون رقماً أو منطقيَّا أو سلسلة أو مصفوفة.
- القيم - القيمة أو القيم المطلوب مقارنتها بالمفتاح.
مفتاح
المفتاح هو الحقل الموجود في بيانات الحدث الذي تستخدمه للتصفية. يمكن أن يكون أحد الأنواع التالية:
الرقم
قيمة منطقية
السلسلة
صفيف. تحتاج إلى تعيين الخاصية
enableAdvancedFilteringOnArrays
على "صواب" لاستخدام هذه الميزة."filter": { "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log", "subjectEndsWith": ".jpg", "enableAdvancedFilteringOnArrays": true }
بالنسبة إلى الأحداث في مخطط أحداث السحابة، استخدم القيم التالية للمفتاح: eventid
، source
، eventtype
، eventtypeversion
أو بيانات الأحداث (مثل data.key1
).
إذا كنت تستخدم المستوى الأساسي لشبكة الأحداث، للأحداث في مخطط Event Grid، فاستخدم القيم التالية للمفتاح: ID
أو Subject
DataVersion
Topic
EventType
بيانات الحدث (مثل ).data.key1
بالنسبة إلى مخطط الإدخال المخصص، استخدم حقول بيانات الحدث (مثل data.key1
). للوصول إلى الحقول في قسم البيانات، استخدم تدوين .
(نقطة). على سبيل المثال، data.siteName
، data.appEventTypeDetail.action
للوصول siteName
أو action
لعينة الحدث التالية.
"data": {
"appEventTypeDetail": {
"action": "Started"
},
"siteName": "<site-name>",
"clientRequestId": "None",
"correlationRequestId": "None",
"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
"address": "None",
"verb": "None"
},
إشعار
لا تدعم Event Grid التصفية على صفيف من الكائنات. يسمح فقط بالسلسلة والقيم والأرقام والصفيف من نفس الأنواع (مثل صفيف عدد صحيح أو صفيف سلسلة).
القيم
يمكن أن تكون القيم: رقماً أو سلسلة أو منطقية أو صفيفاً
عوامل التشغيل
العوامل المتاحة للأرقام هي:
NumberIn
يتم تقييم عامل التشغيل NumberIn إلى true إذا كانت قيمة key إحدى قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter
في القسم data
هي 5 أو 1.
"advancedFilters": [{
"operatorType": "NumberIn",
"key": "data.counter",
"values": [
5,
1
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a, b, c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
NumberNotIn
يتم تقييم NumberNotIn إلى true إذا كانت قيمة key ليست أياً من قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter
في القسمdata
ليست 41 و0.
"advancedFilters": [{
"operatorType": "NumberNotIn",
"key": "data.counter",
"values": [
41,
0
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a, b, c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
NumberLessThan
يتم تقييم عامل التشغيل NumberLessThan إلى true إذا كانت قيمة key أقل من قيمة التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter
في القسمdata
أقل من 100.
"advancedFilters": [{
"operatorType": "NumberLessThan",
"key": "data.counter",
"value": 100
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH key IN (v1, v2, v3)
IF key < filter
MATCH
NumberGreaterThan
يتم تقييم عامل التشغيل NumberGreaterThan إلى "صحيح" إذا كانت قيمة المفتاح أكبر من قيمة التصفية المحددة. في المثال التالي، يتحقق ما إذا كانت قيمة السمة counter
في القسم data
أكبر من 20.
"advancedFilters": [{
"operatorType": "NumberGreaterThan",
"key": "data.counter",
"value": 20
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH key IN (v1, v2, v3)
IF key > filter
MATCH
NumberLessThanOrEquals
يتم تقييم عامل التشغيل NumberLessThanOrEquals إلى true إذا كانت قيمة key أقل من أو تساوي قيمة التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter
في القسم data
أقل من أو تساوي 100.
"advancedFilters": [{
"operatorType": "NumberLessThanOrEquals",
"key": "data.counter",
"value": 100
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH key IN (v1, v2, v3)
IF key <= filter
MATCH
NumberGreaterThanOrEquals
يتم تقييم عامل التشغيل NumberGreaterThanOrEquals إلى "صحيح" إذا كانت قيمة المفتاح أكبر من أو تساوي قيمة عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة counter
في القسم data
أكبر من أو تساوي 30.
"advancedFilters": [{
"operatorType": "NumberGreaterThanOrEquals",
"key": "data.counter",
"value": 30
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH key IN (v1, v2, v3)
IF key >= filter
MATCH
NumberInRange
يتم تقييم عامل التشغيل NumberInRange إلى true إذا كانت قيمة key موجودة في أحد نطاقات التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
تقع في أحد النطاقين: 3.14159 - 999.95، 3000 - 4000.
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
الخاصية values
هي مجموعة من النطاقات. في المثال السابق، إنها مصفوفة من نطاقين. فيما يلي مثال على مصفوفة ذات نطاق واحد يجب التحقق منه.
مصفوفة ذات نطاق واحد:
{
"operatorType": "NumberInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: مصفوفة من النطاقات. في هذه الشفرة الزائفة، a
وb
هي قيم منخفضة وعالية لكل نطاق في المصفوفة. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
MATCH
NumberNotInRange
يتم تقييم عامل التشغيل NumberNotInRange إلى "صحيح" إذا كانت قيمة المفتاح ليست في أي من نطاقات التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
تقع في أحد النطاقين: 3.14159 - 999.95، 3000 - 4000. إذا كان الأمر كذلك، فسيقوم العامل بإرجاع خطأ.
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3.14159, 999.95], [3000, 4000]]
}
الخاصية values
هي مجموعة من النطاقات. في المثال السابق، إنها مصفوفة من نطاقين. فيما يلي مثال على مصفوفة ذات نطاق واحد يجب التحقق منه.
مصفوفة ذات نطاق واحد:
{
"operatorType": "NumberNotInRange",
"key": "data.key1",
"values": [[3000, 4000]]
}
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: مصفوفة من النطاقات. في هذه الشفرة الزائفة، a
وb
هي قيم منخفضة وعالية لكل نطاق في المصفوفة. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH (a,b) IN filter.Values
FOR_EACH key IN (v1, v2, v3)
IF key >= a AND key <= b
FAIL_MATCH
العامل المتاح لـ booleans هو:
BoolEquals
يتم تقييم عامل التشغيل BoolEquals إلى صحيح إذا كانت قيمة المفتاح هي القيمة المنطقية المحددة عامل التصفية . في المثال التالي، يتحقق مما إذا كانت قيمة السمة isEnabled
في القسم data
هي true
.
"advancedFilters": [{
"operatorType": "BoolEquals",
"key": "data.isEnabled",
"value": true
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل قيمة عامل التصفية المنطقية. هذا هو الرمز الزائف مع المفتاح: [v1, v2, v3]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
عوامل التشغيل المتاحة لـ السلاسل هي:
StringContains
يتم تقييم StringContains إلى true إذا كانت قيمة المفتاح تحتوي على أي من قيم التصفية المحددة (كسلاسل فرعية). في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
تحتوي على إحدى السلاسل الفرعية المحددة: microsoft
أو azure
. على سبيل المثال، يحتوي azure data factory
على azure
.
"advancedFilters": [{
"operatorType": "StringContains",
"key": "data.key1",
"values": [
"microsoft",
"azure"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
MATCH
StringNotContains
يتم تقييم عامل التشغيل StringNotContains إلى true إذا كان المفتاح لا يحتوي على قيم التصفية المحددة كسلاسل فرعية. إذا كان المفتاح يحتوي على إحدى القيم المحددة كسلسلة فرعية، يتم تقييم عامل التشغيل على خطأ. في المثال التالي، يُرجع عامل التشغيل صحيحاً فقط إذا كانت قيمة السمة key1
في القسم data
لا تحتوي على contoso
وfabrikam
كسلاسل فرعية.
"advancedFilters": [{
"operatorType": "StringNotContains",
"key": "data.key1",
"values": [
"contoso",
"fabrikam"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key CONTAINS filter
FAIL_MATCH
راجع قسم القيود للتعرف على القيود الحالية لعامل التشغيل هذا.
StringBeginsWith
يتم تقييم عامل التشغيل StringBeginsWith إلى "صحيح" إذا كانت قيمة المفتاح تبدأ بأي من قيم عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
تبدأ بـ event
أو message
. على سبيل المثال، event hubs
يبدأ بـ event
.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
MATCH
StringNotBeginsWith
يتم تقييم عامل التشغيل String Not Begins With إلى true إذا كانت قيمة key لا تبدأ بأي من قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
لا تبدأ بـ event
أو message
.
"advancedFilters": [{
"operatorType": "StringNotBeginsWith",
"key": "data.key1",
"values": [
"event",
"message"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key BEGINS_WITH filter
FAIL_MATCH
StringEndsWith
يتم تقييم عامل التشغيل StringEndsWith إلى true إذا كانت قيمة المفتاح تنتهي بـ إحدى قيم التصفية المحددة. في المثال التالي، يتحقق ما إذا كانت قيمة السمة key1
في القسم data
تنتهي بـ jpg
أو jpeg
أو png
. على سبيل المثال، eventgrid.png
ينتهي بـ png
.
"advancedFilters": [{
"operatorType": "StringEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
MATCH
StringNotEndsWith
يتم تقييم عامل التشغيل StringNotEndsWith إلى صحيح إذا كانت قيمة المفتاح لا تنتهي بأي من قيم عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
لا تنتهي بـ jpg
أو jpeg
أو png
.
"advancedFilters": [{
"operatorType": "StringNotEndsWith",
"key": "data.key1",
"values": [
"jpg",
"jpeg",
"png"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF key ENDS_WITH filter
FAIL_MATCH
StringIn
يتحقق عامل التشغيل StringIn مما إذا كانت قيمة المفتاح تطابق تماماً إحدى قيم التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
هي contoso
أو fabrikam
أو factory
.
"advancedFilters": [{
"operatorType": "StringIn",
"key": "data.key1",
"values": [
"contoso",
"fabrikam",
"factory"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
MATCH
StringNotIn
يتحقق عامل التشغيل StringNotIn مما إذا كانت قيمة المفتاح لا تطابق أياً من قيم عامل التصفية المحددة. في المثال التالي، يتحقق مما إذا كانت قيمة السمة key1
في القسم data
ليست aws
وbridge
.
"advancedFilters": [{
"operatorType": "StringNotIn",
"key": "data.key1",
"values": [
"aws",
"bridge"
]
}]
إذا كان المفتاح عبارة عن مصفوفة، يتم التحقق من جميع القيم الموجودة في المصفوفة مقابل مصفوفة قيم المرشح. إليك الشفرة الزائفة بالمفتاح: [v1, v2, v3]
والمرشح: [a,b,c]
. يتم تجاهل أي قيم أساسية مع أنواع البيانات التي لا تتطابق مع نوع بيانات الفلتر.
FOR_EACH filter IN (a, b, c)
FOR_EACH key IN (v1, v2, v3)
IF filter == key
FAIL_MATCH
جميع مقارنات السلاسل ليست حساسة لحالة الأحرف.
إشعار
إذا كان الحدث JSON لا يحتوي على مفتاح التصفية المتقدم، يتم تقييم عامل التصفية على أنه غير مطابق لعوامل التشغيل التالية: NumberGreaterThan و NumberGreaterThanOrEquals و NumberLessThan و NumberLessThanOrEquals و NumberIn و BoolEquals و StringContains و StringNotContains و StringBeginsWith و StringNotBeginsWith و StringEndsWith و StringNotEndsWith و StringIn.
يتم تقييم عامل التصفية على أنه مطابق لعوامل التشغيل التالية: NumberNotIn، StringNotIn.
IsNullOrUndefined
يتم تقييم عامل التشغيل IsNullOrUndefined إلى صحيح إذا كانت قيمة المفتاح فارغة أو غير محددة.
{
"operatorType": "IsNullOrUndefined",
"key": "data.key1"
}
في المثال التالي، key1 مفقود، لذا فإن عامل التشغيل سيقيم إلى true.
{
"data":
{
"key2": 5
}
}
في المثال التالي، تم تعيين key1 على null، لذا فإن عامل التشغيل سيقيم القيمة true.
{
"data":
{
"key1": null
}
}
إذا كان key1 يحتوي على أي قيمة أخرى في هذه الأمثلة، فسيتم تقييم عامل التشغيل إلى false.
IsNotNull
يتم تقييم عامل التشغيل IsNotNull إلى صحيح إذا كانت قيمة المفتاح ليست فارغة أو غير محددة.
{
"operatorType": "IsNotNull",
"key": "data.key1"
}
أو وو
إذا حددت عامل تصفية واحداً بقيم متعددة، فسيتم تنفيذ عملية أو ، لذا يجب أن تكون قيمة حقل المفتاح إحدى هذه القيم. إليك مثال:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/",
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
إذا حددت عدة عوامل تصفية مختلفة، فسيتم إجراء عملية و، لذلك يجب استيفاء كل شرط من شروط التصفية. إليك مثال:
"advancedFilters": [
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/microsoft.devtestlab/"
]
},
{
"operatorType": "StringContains",
"key": "Subject",
"values": [
"/providers/Microsoft.Compute/virtualMachines/"
]
}
]
CloudEvents
بالنسبة للأحداث في مخطط CloudEvents ، استخدم القيم التالية للمفتاح: eventid
، source
، eventtype
، eventtypeversion
أو بيانات الأحداث (مثل data.key1
).
يمكنك أيضاً استخدام سمات سياق الإضافة في CloudEvents 1.0. في المثال التالي، تعد comexampleextension1
وcomexampleothervalue
سمات سياق امتداد.
{
"specversion" : "1.0",
"type" : "com.example.someevent",
"source" : "/mycontext",
"id" : "C234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"subject": null,
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : {
"appinfoA" : "abc",
"appinfoB" : 123,
"appinfoC" : true
}
}
فيما يلي مثال على استخدام سمة سياق ملحق في عامل تصفية.
"advancedFilters": [{
"operatorType": "StringBeginsWith",
"key": "comexampleothervalue",
"values": [
"5",
"1"
]
}]
القيود
التصفية المتقدمة لها القيود التالية:
- 25 عامل تصفية متقدمة و25 قيمة لعوامل التصفية عبر جميع عوامل التصفية لكل اشتراك Event Grid
- 512 حرفاً لكل قيمة سلسلة
- المفاتيح التي تحتوي على حرف
.
(نقطة) بداخلها. على سبيل المثال:http://schemas.microsoft.com/claims/authnclassreference
أوjohn.doe@contoso.com
. حالياً، لا يوجد دعم لأحرف الإلغاء في المفاتيح.
يمكن استخدام نفس المفتاح في أكثر من عامل تصفية واحد.
الخطوات التالية
- للتعرف على تصفية الأحداث باستخدام PowerShell وAzure CLI، راجع تصفية الأحداث لشبكة الأحداث .
- لبدء استخدام Event Grid بسرعة، راجع إنشاء أحداث مخصصة وتوجيهها باستخدام Azure Event Grid .