Eventos que coinciden con filtros

Asocie eventos con filtros de patrones en reglas para automatizar la compilación.

Antecedentes

Para comprender el filtrado, resulta útil revisar la estructura de un mensaje de evento real. Events utiliza objetos JSON para representar eventos. Esto es un evento: 

{
	"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"
		}
	}
}

Dos puntos clave que hay que recordar sobre todos los eventos: 

  • Todos los eventos tienen el mismo conjunto de atributos de nivel superior, que se conoce como sobre del evento. Exceptuando uno, la mayoría de estos atributos de nivel superior no son útiles para crear filtros. La excepción es eventType, que identifica el tipo de evento incluido en la carga útil.
  • La carga útil del evento aparece en el atributo data. La información de este campo depende del servicio que generó el evento y el tipo de evento solicitado. La información en la carga útil ayuda a la hora de aislar un evento de otro con un filtro.

Para obtener más información acerca del sobre, consulte Contenido del mensaje de un evento. Para ver una lista de todos los servicios que producen eventos, consulte Servicios que generan eventos.

Coincidencia de eventos con filtros

Las reglas utilizan filtros para seleccionar eventos y direccionarlos para su entrega a recursos de acción. Una regla se representa como un objeto JSON, y es similar a un evento. El filtro es un atributo de la regla y el atributo se denomina condition. Un filtro puede o no coincidir con un evento.

Aspectos importantes que hay que recordar sobre los filtros:

  • Los campos no mencionados en un filtro se ignoran. Puede crear un filtro válido que coincida con todos los mensajes de evento con dos llaves.
  • Para que un filtro coincida con un evento, el evento debe tener todos los nombres de campo en el filtro. Los nombres de campo deben aparecer en el filtro con la misma estructura de anidamiento que se utiliza en el evento.
  • Las reglas se aplican a los eventos en el compartimento en el que se crean, así como en cualquier compartimiento secundario. Esto significa que un filtro especificado por una regla solo coincide con los eventos emitidos desde los recursos en el mismo compartimento o los compartimientos secundarios.
  • Se permite el uso del asterisco (*) para la coincidencia con caracteres comodín. Consulte Ejemplos de coincidencia con caracteres comodín en filtros.

Ejemplos de filtros sencillos

El siguiente filtro coincide con todos los eventos del compartimento y los compartimentos secundarios donde se crea la regla. 

{
... 

	"condition": "{ }"

}

Al agregar campos al filtro, limita los eventos que pueden coincidir con el filtro. Por ejemplo, el siguiente filtro solo coincide con eventos deletebucket

{
...

	"condition": "{
		"eventType": "com.oraclecloud.objectstorage.deletebucket"
	}"
}

Para crear un filtro para más de un tipo de evento, utilice una matriz en eventType. El siguiente filtro coincide con los eventos deletebucket y createbucket

{
...

	"condition": "{
		"eventType": [
			"com.oraclecloud.objectstorage.deletebucket",
			"com.oraclecloud.objectstorage.createbucket"
		]
	}"
}

Ejemplos de filtros con atributos de carga útil de eventos

Los dos filtros siguientes coincidirían con el evento en la parte superior de la página. El primero porque el filtro especifica dos campos y ambos campos aparecen en el evento, el segundo porque aparece el tipo "NoPublicAccess" en el evento.

Lo importante es saber cómo coinciden los nombres de los campos del filtro con la estructura anidada del evento.

{
...

	"condition": "{
		"data": {
			"compartmentName": "example_name",
			"resourceName": "my_bucket"
		}
	}"
}
{
...

	"condition": "{
		"data": {
			"additionalDetails": {
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Ninguno de los siguientes filtros coincidiría con el evento de la parte superior de esta página. El primero porque el filtro especifica un PublicAccessType no encontrado en el evento. El segundo, porque el evento especifica un nombre para un cubo diferente.

{
...

	"condition": "{
		"data": {
			"compartmentName": "example_name",
			"resourceName": "my_bucket",
			"additionalDetails": {
				"publicAccessType": "PublicAccess"
			}
		}
	}"
}
{
...

	"condition": "{
		"data": {
			"additionalDetails": {
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Ejemplos de matrices en filtros

Las matrices de los filtros coinciden con los eventos si cualquiera de los valores del filtro coincide con un valor de un evento. El siguiente filtro coincidiría con el evento en la parte superior de la página, ya que el nombre del cubo en el evento está incluido en una matriz del filtro.

{
...

	"condition": "{
		"data": {
			"resourceName": [
				"my_bucket_2",
				"my_bucket_1",
				"my_bucket"
			],
			"additionalDetails": {
				"namespace": "example_namespace",
				"publicAccessType": "NoPublicAccess"
			}
		}
	}"
}

Puede utilizar una matriz en eventType (o cualquiera de los campos de nivel superior), la carga útil del evento, como se muestra en el ejemplo anterior, o bien la carga útil del evento y un campo de nivel superior.

{
...

	"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"
			}
		}
	}"
}

Ejemplos de coincidencia con caracteres comodín en filtros

A continuación, se enumeran una serie de aspectos que hay que tener en cuenta para la coincidencia con caracteres comodín en filtros.

  • Utilice el carácter comodín solo en valores de atributo. No se puede utilizar el asterisco para las coincidencias en las claves.
  • Un valor de atributo con solo un asterisco coincide con todos los valores del nombre de atributo asociado, pero no con null.
  • El carácter de punto no tiene ningún significado especial en un filtro.

Puede agregar el asterisco al inicio de una cadena, en medio o al final. Todos los filtros que siguen coinciden con el evento en la parte superior de la página.

  • El primero coincide porque el carácter comodín en displayName coincide con el patrón de nomenclatura del cubo.
  • El segundo coincide porque publicAccessType utiliza un carácter comodín. Debido al uso del carácter comodín, estos dos primeros filtros también coincidirían con los eventos de los cubos que tengan un patrón de nomenclatura similar e incluirían eventos de cubos con o sin acceso público.
  • El tercero coincide porque el tipo de evento incluye todos los tipos de eventos del cubo.
{

...
	"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"
			}
		}
	}"
}