تصفية الأحداث لشبكة الأحداث

توضح هذه المقالة كيفية تصفية الأحداث عند إنشاء اشتراك شبكة أحداث. للتعرف على خيارات تصفية الأحداث، راجع فهم تصفية الأحداث لاشتراكات شبكة الأحداث.

تصفية حسب نوع الحدث

عند إنشاء اشتراك شبكة الأحداث، يمكنك تحديد أنواع الأحداث المراد إرسالها إلى نقطة النهاية. تُنشئ الأمثلة الموجودة في هذا القسم اشتراكات أحداث لمجموعة موارد ولكنها تحد من الأحداث التي يتم إرسالها إلى Microsoft.Resources.ResourceWriteFailure وMicrosoft.Resources.ResourceWriteSuccess. إذا كنت بحاجة إلى مزيد من المرونة عند تصفية الأحداث حسب أنواع الأحداث، فشاهد التصفية حسب عوامل التشغيل والبيانات.

Azure PowerShell

بالنسبة إلى PowerShell، استخدم المعلمة -IncludedEventType عند إنشاء الاشتراك.

$includedEventTypes = "Microsoft.Resources.ResourceWriteFailure", "Microsoft.Resources.ResourceWriteSuccess"

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -Endpoint <endpoint-URL> `
  -IncludedEventType $includedEventTypes

Azure CLI

في واجهة سطر الأوامر Azure CLI، استخدم المعلمة --included-event-types. يستخدم المثال التالي Azure CLI في Bash shell:

includedEventTypes="Microsoft.Resources.ResourceWriteFailure Microsoft.Resources.ResourceWriteSuccess"

az eventgrid event-subscription create \
  --name demoSubToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --included-event-types $includedEventTypes

مدخل Azure

أثناء إنشاء اشتراك حدث لموضوع نظام، استخدم القائمة المنسدلة لتحديد أنواع الأحداث كما هو موضح في الصورة التالية.

Screenshot showing the Create Subscription page with event types selected.

بالنسبة إلى اشتراك موجود في موضوع نظام، استخدم علامة التبويب عوامل التصفية في صفحة اشتراك الحدث كما هو موضح في الصورة التالية.

Screenshot showing the Event Subscription page with the Filters tab selected.

يمكنك تحديد عوامل التصفية أثناء إنشاء موضوع مخصص عن طريق تحديد ارتباط إضافة نوع الحدث كما هو موضح في الصورة التالية.

Screenshot showing the Create Event Subscription page for a custom topic.

لتحديد عامل تصفية لاشتراك موجود في موضوع مخصص، استخدم علامة التبويب عوامل التصفية في صفحة اشتراك الحدث.

Screenshot of the Event Subscription page with Add Event Type button selected.

قالب Azure Resource Manager

بالنسبة لقالب إدارة الموارد، استخدم الخاصية includedEventTypes.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2018-09-15-preview",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectBeginsWith": "",
        "subjectEndsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [
          "Microsoft.Resources.ResourceWriteFailure",
          "Microsoft.Resources.ResourceWriteSuccess"
        ]
      }
    }
  }
]

إشعار

لمعرفة المزيد عن عوامل التصفية هذه (أنواع الأحداث والموضوع والمتقدم)، راجع فهم تصفية الأحداث لاشتراكات شبكة الأحداث.

تصفية حسب الموضوع

يمكنك تصفية الأحداث حسب الموضوع في بيانات الحدث. يمكنك تحديد قيمة لمطابقتها مع بداية الموضوع أو نهايته. إذا كنت بحاجة إلى مزيد من المرونة عند تصفية الأحداث حسب الموضوع، فشاهد التصفية حسب عوامل التشغيل والبيانات.

في مثال PowerShell التالي، تُنشئ اشتراك حدث يُجري التصفية حسب بداية الموضوع. يمكنك استخدام المعلمة -SubjectBeginsWith لقصر الأحداث على تلك الخاصة بمورد معين. تمرر معرف المورد لمجموعة أمان الشبكة.

Azure PowerShell

$resourceId = (Get-AzResource -ResourceName demoSecurityGroup -ResourceGroupName myResourceGroup).ResourceId

New-AzEventGridSubscription `
  -Endpoint <endpoint-URL> `
  -EventSubscriptionName demoSubscriptionToResourceGroup `
  -ResourceGroupName myResourceGroup `
  -SubjectBeginsWith $resourceId

ينشئ مثال PowerShell التالي اشتراكًا لوحدة تخزين blob. حيث يقصر الأحداث على تلك التي تنتهي بـ .jpg.

$storageId = (Get-AzStorageAccount -ResourceGroupName myResourceGroup -AccountName $storageName).Id

New-AzEventGridSubscription `
  -EventSubscriptionName demoSubToStorage `
  -Endpoint <endpoint-URL> `
  -ResourceId $storageId `
  -SubjectEndsWith ".jpg"

Azure CLI

في مثال Azure CLI التالي، تُنشئ اشتراك حدث يُجري التصفية حسب بداية الموضوع. يمكنك استخدام المعلمة --subject-begins-with لقصر الأحداث على تلك الخاصة بمورد معين. تمرر معرف المورد لمجموعة أمان الشبكة.

resourceId=$(az network nsg show -g myResourceGroup -n demoSecurityGroup --query id --output tsv)

az eventgrid event-subscription create \
  --name demoSubscriptionToResourceGroup \
  --resource-group myResourceGroup \
  --endpoint <endpoint-URL> \
  --subject-begins-with $resourceId

ينشئ مثال Azure CLI التالي اشتراكًا لوحدة تخزين blob. حيث يقصر الأحداث على تلك التي تنتهي بـ .jpg.

storageid=$(az storage account show --name $storageName --resource-group myResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --resource-id $storageid \
  --name demoSubToStorage \
  --endpoint <endpoint-URL> \
  --subject-ends-with ".jpg"

مدخل Azure

لاشتراك حدث موجود:

  1. في صفحة اشتراك الأحداث، حدد تمكين تصفية الموضوع.

  2. أدخل قيمًا لواحد أو أكثر من الحقول التالية: يبدأ الموضوع بـ وينتهي الموضوع بـ . في الخيارات التالية يتم تحديد كلا الخيارين.

    Screenshot of Event Subscription page with subject filtering example.

  3. حدد خيار مطابقة موضوع حساس لحالة الأحرف إذا كنت تريد أن يتطابق موضوع الحدث مع حالة عوام التصفية المحددة.

عند إنشاء اشتراك حدث، استخدم علامة التبويب عوامل التصفية في معالج الإنشاء.

Screenshot of Create Event Subscription page with the Filters tab selected.

قالب Azure Resource Manager

في مثال نموذج Resource Manager التالي، تُنشئ اشتراك حدث يُجري التصفية حسب بداية الموضوع. يمكنك استخدام خاصية subjectBeginsWith لقصر الأحداث على تلك الخاصة بمورد معين. تمرر معرف المورد لمجموعة أمان الشبكة.

"resources": [
  {
    "type": "Microsoft.EventGrid/eventSubscriptions",
    "name": "[parameters('eventSubName')]",
    "apiVersion": "2018-09-15-preview",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectBeginsWith": "[resourceId('Microsoft.Network/networkSecurityGroups','demoSecurityGroup')]",
        "subjectEndsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [ "All" ]
      }
    }
  }
]

ينشئ مثال قالب Resource Manager التالي اشتراكًا لتخزين blob. حيث يقصر الأحداث على تلك التي تنتهي بـ .jpg.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts/providers/eventSubscriptions",
    "name": "[concat(parameters('storageName'), '/Microsoft.EventGrid/', parameters('eventSubName'))]",
    "apiVersion": "2018-09-15-preview",
    "properties": {
      "destination": {
        "endpointType": "WebHook",
        "properties": {
          "endpointUrl": "[parameters('endpoint')]"
        }
      },
      "filter": {
        "subjectEndsWith": ".jpg",
        "subjectBeginsWith": "",
        "isSubjectCaseSensitive": false,
        "includedEventTypes": [ "All" ]
      }
    }
  }
]

إشعار

لمعرفة المزيد عن عوامل التصفية هذه (أنواع الأحداث والموضوع والمتقدم)، راجع فهم تصفية الأحداث لاشتراكات شبكة الأحداث.

تصفية حسب المشغلين والبيانات

للحصول على مزيدٍ من المرونة في التصفية، يمكنك استخدام عوامل التشغيل وخصائص البيانات لتصفية الأحداث.

اشترك مع عوامل التصفية المتقدمة

للتعرف على عوامل التشغيل والمفاتيح التي يمكنك استخدامها للتصفية المتقدمة، راجع التصفية المتقدمة.

تُنشئ هذه الأمثلة موضوعًا مخصصًا. تشترك في الموضوع المخصص وتُجري التصفية حسب القيمة في كائن البيانات. تُرسَل الأحداث التي تم تعيين خاصية اللون لها على الأزرق أو الأحمر أو الأخضر إلى الاشتراك.

Azure PowerShell

بالنسبة إلى PowerShell، استخدم:

$topicName = <your-topic-name>
$endpointURL = <endpoint-URL>

New-AzResourceGroup -Name gridResourceGroup -Location eastus2
New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location eastus2 -Name $topicName

$topicid = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicName).Id

$expDate = '<mm/dd/yyyy hh:mm:ss>' | Get-Date
$AdvFilter1=@{operatorType="StringIn"; key="Data.color"; values=@('blue', 'red', 'green')}

New-AzEventGridSubscription `
  -ResourceId $topicid `
  -EventSubscriptionName <event_subscription_name> `
  -Endpoint $endpointURL `
  -ExpirationDate $expDate `
  -AdvancedFilter @($AdvFilter1)

Azure CLI

بالنسبة إلى Azure CLI، استخدم:

topicName=<your-topic-name>
endpointURL=<endpoint-URL>

az group create -n gridResourceGroup -l eastus2
az eventgrid topic create --name $topicName -l eastus2 -g gridResourceGroup

topicid=$(az eventgrid topic show --name $topicName -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  -n demoAdvancedSub \
  --advanced-filter data.color stringin blue red green \
  --endpoint $endpointURL \
  --expiration-date "<yyyy-mm-dd>"

لاحظ أنه تم تعيين تاريخ انتهاء الصلاحية للاشتراك.

مدخل Azure

  1. في صفحة اشتراك الحدث، حدد إضافة عامل تصفية جديد في قسم عوامل التصفية المتقدمة.

    Screenshot showing the Event Subscription page with Add new filter link highlighted.

  2. حدد مفتاحا أو عامل تشغيل أو قيمة أو قيمًا لمقارنتها. في المثال التالي، يُستخدم data.color كمفتاح، ويتم استخدام String كعامل تشغيل، وتُحدد قيم الأزرق والأحمر والأخضر للقيم.

    Screenshot showing an example of an advanced filter.

    إشعار

    لمعرفة المزيد عن عوامل التصفية المتقدمة، راجع فهم تصفية الأحداث لاشتراكات شبكة الأحداث.

اختبار عامل التصفية

لاختبار عامل التصفية، أرسل حدثا مع تعيين حقل اللون على اللون الأخضر. نظرًا لأن اللون الأخضر هو إحدى القيم الموجودة في عامل التصفية، يتم تسليم الحدث إلى نقطة النهاية.

Azure PowerShell

بالنسبة إلى PowerShell، استخدم:

$endpoint = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicName).Endpoint
$keys = Get-AzEventGridTopicKey -ResourceGroupName gridResourceGroup -Name $topicName

$eventID = Get-Random 99999
$eventDate = Get-Date -Format s

$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/cars"
    eventTime= $eventDate
    data= @{
        model="SUV"
        color="green"
    }
    dataVersion="1.0"
}

$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

لاختبار سيناريو لا يتم فيه إرسال الحدث، أرسل حدثًا مع تعيين حقل اللون على اللون الأصفر. اللون الأصفر ليس أحد القيم المحددة في الاشتراك، لذا لا يتم تسليم الحدث إلى اشتراكك.

$htbody = @{
    id= $eventID
    eventType="recordInserted"
    subject="myapp/vehicles/cars"
    eventTime= $eventDate
    data= @{
        model="SUV"
        color="yellow"
    }
    dataVersion="1.0"
}

$body = "["+(ConvertTo-Json $htbody)+"]"

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

Azure CLI

بالنسبة إلى Azure CLI، استخدم:

topicEndpoint=$(az eventgrid topic show --name $topicName -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicName -g gridResourceGroup --query "key1" --output tsv)

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/cars", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "model": "SUV", "color": "green"},"dataVersion": "1.0"} ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $topicEndpoint

لاختبار سيناريو لا يتم فيه إرسال الحدث، أرسل حدثًا مع تعيين حقل اللون على اللون الأصفر. اللون الأصفر ليس أحد القيم المحددة في الاشتراك، لذا لا يتم تسليم الحدث إلى اشتراكك.

بالنسبة إلى Azure CLI، استخدم:

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/cars", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "model": "SUV", "color": "yellow"},"dataVersion": "1.0"} ]'

curl -X POST -H "aeg-sas-key: $key" -d "$event" $topicEndpoint

الخطوات التالية

لمعرفة المزيد عن عوامل التصفية (أنواع الأحداث والموضوع والمتقدم)، راجع فهم تصفية الأحداث لاشتراكات شبكة الأحداث.