Общие сведения о фильтрации событий для подписок на службу "Сетка событий Azure"
В статье описываются различные способы фильтрации событий, отправляемых в конечную точку. При создании подписки на события предлагается три варианта фильтрации:
- Типы событий
- по тому, что находится в начале или конце темы;
- с помощью расширенных полей и операторов.
Шаблон Azure Resource Manager
Представленные в этой статье примеры содержат фрагменты кода в формате JSON, которые определяют фильтры в шаблонах Azure Resource Manager (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-объектов)
События BLOB-объектов можно фильтровать по типу события, имени контейнера или имени созданного или удаленного объекта.
Тема событий хранилища 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".
Расширенная фильтрация
Вариант расширенной фильтрации позволяет выполнять фильтрацию по значениям в полях данных и указывать оператор сравнения. При расширенной фильтрации можно указать следующее:
- operatorType — тип сравнения;
- ключ — поле в данных события, которое используется для фильтрации Это может быть число, логическое значение, строка или массив.
- Значения — значение или значения для сравнения с ключом.
Ключ.
Ключ — поле в данных события, которое используется для фильтрации. Может иметь один из следующих типов:
Число
Логический
Строка
Массива. Чтобы использовать эту функцию, необходимо присвоить свойству
enableAdvancedFilteringOnArrays
значение true."filter": { "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log", "subjectEndsWith": ".jpg", "enableAdvancedFilteringOnArrays": true }
Для событий в схеме "События в облаке" используются следующие значения для ключа:eventid
, source
, eventtype
, eventtypeversion
или данные события (например, data.key1
).
Если вы используете базовый уровень сетки событий, для событий в схеме сетки событий используйте следующие значения для ключа: ID
, , Topic
, EventType
DataVersion
Subject
или данных событий (напримерdata.key1
). Для пользовательских схем ввода используются поля данных событий (например, data.key1
). Чтобы получить доступ к полям в разделе data, используйте нотацию .
(с точкой). Например, 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"
},
Примечание.
Сетка событий не поддерживает фильтрацию по массиву объектов. Он разрешает только string, boolean, numbers и Array одинаковых типов (например, целочисленный массив или массив строк).
Values
Возможны следующие значения: число, строка, логическое значение или массив.
Операторы
Доступны следующие операторы для чисел:
NumberIn;
Оператор NumberIn возвращает значение true, если значение ключа является одним из указанных значений фильтра. В следующем примере проверяется, равно ли значение атрибута 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, если значение ключа не является ни одним из указанных значений фильтра. В следующем примере проверяется, что значение атрибута 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, если значение ключа меньше указанного значения фильтра. В следующем примере проверяется, является ли значение атрибута 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 возвращает значение true, если значение ключа больше указанного значения фильтра. В следующем примере проверяется, является ли значение атрибута 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
NumberGreaterThanOrEquals;
Оператор NumberLessThanOrEquals возвращает значение true, если значение ключа меньше или равно указанного значения фильтра. В следующем примере проверяется, является ли значение атрибута 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 возвращает значение true, если значение ключа больше или равно указанного значения фильтра. В следующем примере проверяется, является ли значение атрибута 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, если значение ключа входит в один из указанных диапазонов фильтра. В следующем примере проверяется, находится ли значение атрибута 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 возвращает значение true, если значение ключа не входит ни в один из указанных диапазонов фильтра. В следующем примере проверяется, находится ли значение атрибута key1
в разделе data
в одном из двух диапазонов: 3,14159–999,95 и 3000–4000. Если находится, то оператор возвращает false.
{
"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
Доступный оператор логических значений:
BoolEquals
Оператор BoolEquals возвращает значение true, если значение ключа является указанным логическим значением фильтра. В следующем примере проверяется, равно ли true
значение атрибута isEnabled
в разделе data
.
"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, если ключ не содержит указанных значений фильтра в виде подстроки. Если ключ содержит одно из указанных значений в виде подстроки, оператор возвращает значение false. В следующем примере оператор возвращает значение 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 возвращает значение true, если значение ключа начинается с любого из указанных значений фильтра. В следующем примере проверяется, начинается ли значение атрибута 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
Оператор StringNotBeginsWith возвращает значение true, если значение ключа не начинается ни с какого из указанных значений фильтра. В следующем примере проверяется, что значение атрибута 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 возвращает значение true, если значение ключа не заканчивается никаким из указанных значений фильтра. В следующем примере проверяется, что значение атрибута 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, StringEndsWith, StringNotEndsWith, StringIn.
Фильтр вычисляется как соответствующий для следующих операторов: NumberNotIn, StringNotIn.
IsNullOrUndefined
Оператор IsNullOrUndefined возвращает значение true, если значение ключа равно NULL или не определено.
{
"operatorType": "IsNullOrUndefined",
"key": "data.key1"
}
В следующем примере параметр key1 отсутствует, поэтому оператор возвращает значение true.
{
"data":
{
"key2": 5
}
}
В следующем примере параметр key1 имеет значение null, поэтому оператор возвращает значение true.
{
"data":
{
"key1": null
}
}
Если key1 имеет другое значение в этих примерах, оператор будет оцениваться как false.
IsNotNull
Оператор IsNotNull возвращает значение true, если значение ключа не равно NULL или не является неопределенным.
{
"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/"
]
}
]
Источники облачных
Для событий в схеме "События в облаке" используются следующие значения для ключа: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 значений фильтров по всем фильтрам в одной подписке на Сетку событий;
- 512 знаков для значения строки;
- ключи с символом
.
(точка). Пример:http://schemas.microsoft.com/claims/authnclassreference
илиjohn.doe@contoso.com
. В настоящее время escape-символы в ключах не поддерживаются.
Один ключ можно использовать в нескольких фильтрах.
Следующие шаги
- См. дополнительные сведения о фильтрации событий для Сетки событий с помощью PowerShell и Azure CLI.
- Сведения о том, как быстро приступить к использованию службы "Сетка событий", см. в разделе Создание и перенаправление пользовательского события со службой "Сетка событий Azure".