Correspondance d'événements avec des filtres
Mettre en correspondance des événements avec des filtres de modèle dans les règles pour automatiser la création.
Informations générales
Pour comprendre le filtrage, il est utile d'examiner la structure d'un message d'événement. Events utilise des objets JSON pour représenter les événements. Voici un événement :
{
"cloudEventsVersion": "0.1",
"eventID": "<unique_ID>",
"eventType": "com.oraclecloud.objectstorage.deletebucket",
"source": "objectstorage",
"eventTypeVersion": "1.0",
"eventTime": "2019-01-10T21:19:24Z",
"contentType": "application/json",
"extensions": {
"compartmentId": "ocid1.compartment.oc1..<unique_ID>"
},
"data": {
"compartmentId": "ocid1.compartment.oc1..<unique_ID>",
"compartmentName": "example_name",
"resourceName": "my_bucket",
"resourceId": "ocid1.compartment.oc1..<unique_ID>",
"availabilityDomain": "NfHZ:PHX-AD-2",
"freeFormTags": {
"Department": "Finance"
},
"definedTags": {
"Operations": {
"CostCenter": "42"
}
},
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess",
"eTag": "f8ffb6e9-f602-460f-a6c0-00b5abfa24c7"
}
}
}
Deux points clés sont à retenir sur tous les événements :
- Les événements possèdent tous le même ensemble d'attributs de niveau supérieur, qui constituent l'enveloppe de l'événement. A une exception près, ces attributs de niveau supérieur ne sont pas utiles pour la création de filtres. L'exception est l'attribut
eventType
, qui identifie le type d'événement inclus dans la charge utile. -
La charge utile de l'événement apparaît dans l'attribut
data
. Les informations de ce champ dépendent du service qui a généré l'événement et du type d'événement demandé. Les informations dans la charge utile permettent d'isoler les événements les uns par rapport aux autres à l'aide d'un filtre.
Pour plus d'informations sur l'enveloppe, reportez-vous à Contenu d'un message d'événement. Pour obtenir la liste de tous les services qui génèrent des événements, reportez-vous à Services produisant des événements.
Mise en correspondance d'événements avec des filtres
Les règles utilisent des filtres pour sélectionner des événements et les acheminer afin de les diffuser vers des ressources d'action. Une règle est représentée sous la forme d'un objet JSON, comme un événement. Le filtre est un attribut de la règle, et l'attribut est nommé condition
. Un filtre correspond ou non à un événement.
Quelques points importants à retenir concernant les filtres :
- Les champs non mentionnés dans un filtre sont ignorés. Vous pouvez créer un filtre valide qui correspond à tous les messages d'événement avec deux accolades.
- Pour qu'un filtre corresponde à un événement, cet événement doit contenir tous les noms de champ répertoriés dans le filtre. Les noms de champ doivent apparaître dans le filtre avec la même structure d'imbrication que dans l'événement.
- Les règles s'appliquent aux événements du compartiment dans lequel vous les créez et des compartiments enfant. Cela signifie qu'un filtre indiqué par une règle correspond uniquement aux événements émis à partir de ressources du même compartiment ou d'un compartiment enfant.
-
La correspondance avec caractère générique est prise en charge avec l'astérisque (*). Reportez-vous à Exemples de correspondance avec caractère générique dans les filtres.
Exemples de filtre simple
Le filtre suivant correspond à chaque événement du compartiment et de tous les compartiments enfant dans lesquels vous créez la règle.
{
...
"condition": "{ }"
}
Lorsque vous ajoutez des champs au filtre, vous limitez les événements auxquels il peut correspondre. Par exemple, le filtre suivant correspond uniquement aux événements deletebucket
.
{
...
"condition": "{
"eventType": "com.oraclecloud.objectstorage.deletebucket"
}"
}
Afin de créer un filtre pour plusieurs types d'événement, utilisez un tableau dans eventType
. Le filtre suivant correspond aux événements deletebucket
et createbucket
.
{
...
"condition": "{
"eventType": [
"com.oraclecloud.objectstorage.deletebucket",
"com.oraclecloud.objectstorage.createbucket"
]
}"
}
Exemples de filtre avec des attributs de charge utile d'événement
Les deux filtres suivants correspondent à l'événement en haut de la page : le premier car le filtre indique deux champs et que les deux champs apparaissent dans l'événement, le second car le type "NoPublicAccess" apparaît dans l'événement.
Il est important de noter que les noms de champ dans le filtre correspondent à la structure d'imbrication de l'événement.
{
...
"condition": "{
"data": {
"compartmentName": "example_name",
"resourceName": "my_bucket"
}
}"
}
{
...
"condition": "{
"data": {
"additionalDetails": {
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Aucun des filtres suivants ne correspond à l'événement en haut de cette page : le premier car le filtre indique un attribut PublicAccessType introuvable dans l'événement, le second car l'événement indique le nom d'un bucket différent.
{
...
"condition": "{
"data": {
"compartmentName": "example_name",
"resourceName": "my_bucket",
"additionalDetails": {
"publicAccessType": "PublicAccess"
}
}
}"
}
{
...
"condition": "{
"data": {
"additionalDetails": {
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Exemples de tableau dans les filtres
Les tableaux dans les filtres correspondent aux événements si l'une des valeurs du filtre correspond à une valeur d'un événement. Le filtre suivant correspond à l'événement situé en haut de la page car le nom du bucket dans l'événement est inclus dans un tableau dans le filtre.
{
...
"condition": "{
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Vous pouvez utiliser un tableau dans eventType
(ou tout champ de niveau supérieur), la charge utile d'événement comme indiqué dans l'exemple précédent, ou à la fois la charge utile d'événement et un champ de niveau supérieur.
{
...
"condition": "{
"eventType": [
"com.oraclecloud.objectstorage.deletebucket",
"com.oraclecloud.objectstorage.createbucket"
],
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
Exemples de correspondance avec caractère générique dans les filtres
Voici quelques éléments à prendre en compte concernant la correspondance avec caractère générique pour les filtres.
- Utilisez le caractère générique uniquement dans les valeurs d'attribut. Vous ne pouvez pas utiliser l'astérisque pour la mise en correspondance dans les clés.
- Une valeur d'attribut avec un astérisque uniquement correspond à toutes les valeurs pour le nom d'attribut associé, mais pas à la valeur NULL.
- Le point n'a pas de signification particulière dans un filtre.
Vous pouvez ajouter l'astérisque au début, au milieu ou à la fin d'une chaîne. Tous les filtres suivants correspondent à l'événement en haut de la page.
- Le premier correspond car le caractère générique dans
displayName
correspond au modèle de dénomination de bucket. - Le deuxième correspond car
publicAccessType
utilise un caractère générique. En raison de l'utilisation du caractère générique, ces deux premiers filtres correspondent également aux événements des buckets avec un modèle de dénomination similaire et comprennent les événements de buckets avec ou sans accès public. - Le troisième correspond car le type d'événement inclut tous les types d'événement de bucket.
{
...
"condition": "{
"data": {
"resourceName": "my_bucket*",
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}
{
...
"condition": "{
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "*"
}
}
}"
}
{
...
"condition": "{
"eventType": "com.oraclecloud.objectstorage.*bucket",
"data": {
"resourceName": [
"my_bucket_2",
"my_bucket_1",
"my_bucket"
],
"additionalDetails": {
"namespace": "example_namespace",
"publicAccessType": "NoPublicAccess"
}
}
}"
}