Este tema describe diversos escenarios para distribuir datos en varios Logstores, como la distribución dinámica, la distribución entre cuentas, la distribución dinámica entre cuentas y la distribución dinámica compleja, así como los pasos correspondientes a cada uno.
Contexto
La función de transformación de datos de Log Service permite distribuir resultados en varios Logstores. Puede usar pares de AccessKey para enviar resultados a Logstores de diferentes cuentas, o utilizar las funciones e_output y e_coutput para enrutar dinámicamente los resultados a un Project y Logstore específicos.
Puede distribuir resultados en Logstores de un máximo de 20 cuentas.
La función
e_outputenvía registros al Logstore especificado y detiene la aplicación de reglas de transformación subsecuentes. Para continuar aplicando reglas después de enviar los registros, utilice la funcióne_coutput. Para obtener más información, consulte e_output and e_coutput functions. Este tema utiliza la funcióne_outputcomo ejemplo.
Escenario 1: Distribución entre cuentas
Por ejemplo, todos los registros de acceso de un sitio web se almacenan en un solo Logstore. Desea enrutar los registros con distintos estados HTTP a Logstores en diferentes cuentas.
Esto se logra mediante la función de transformación de datos de Log Service.
-
Registros sin procesar
http_host: example.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https http_host: example.org http_status: 301 request_method: POST request_uri: /data/data.php scheme: http http_host: example.net http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https http_host: aliyundoc.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https -
Requisitos de distribución
Los registros con un http_status de 2XX se almacenan en Logstore0 del destino de almacenamiento target0, y el tema se establece en success_event.
Los registros donde http_status es 3XX se distribuyen a Logstore1 del destino de almacenamiento target1, y el tema se establece en redirection_event.
Los registros con un http_status de 4XX se distribuyen a Logstore2 del destino de almacenamiento target2, y el tema se establece en unauthorized_event.
Los registros con un http_status de 5XX se distribuyen a Logstore3 del destino de almacenamiento target3, y el tema se establece en internal_server_error_event.
target0 pertenece a la cuenta A, mientras que target1, target2 y target3 pertenecen a la cuenta B.
-
Regla de transformación
e_switch(e_match("status", r"2\d+"), e_set("__topic__", "success_event"), e_match("status", r"3\d+"), e_compose(e_set("__topic__", "redirection_event"), e_output("target1")), e_match("status", r"4\d+"), e_compose(e_set("__topic__", "unauthorized_event"), e_output("target2")), e_match("status", r"5\d+"), e_compose(e_set("__topic__", "internal_server_error_event'"), e_output("target3")) ) -
Destinos de almacenamiento
En el panel Create Data Transformation Job, configure los destinos de almacenamiento. Para obtener más información, consulte Create a data transformation job. La región de destino para Target 2 (target1) es China (Beijing) y su endpoint es
https://cn-beijing.log.aliyuncs.com. La región de destino para Target 3 (target2) es China (Hangzhou) - Current Region y su endpoint escn-hangzhou-intranet.log.aliyuncs.com.Etiqueta
Destino de almacenamiento
Project y Logstore de destino
AccessKey
1
target0
Project0, Logstore0
Par de AccessKey de la cuenta A
2
target1
Project1, Logstore1
Par de AccessKey de la cuenta B
3
target2
Project2, Logstore2
Par de AccessKey de la cuenta B
4
target3
Project3, Logstore3
Par de AccessKey de la cuenta B
-
Resultados de la transformación
## Logs with an http_status of 2xx are distributed to Logstore0, which belongs to Account A. __topic__: success_event http_host: example.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Logs with an http_status of 3xx are distributed to Logstore1, which belongs to Account B. __topic__: redirection_event http_host: example.org http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Logs with an http_status of 4xx are distributed to Logstore2, which belongs to Account B. __topic__: unauthorized_event http_host: example.net http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Logs with an http_status of 5xx are distributed to Logstore3, which belongs to Account B. __topic__: internal_server_error_event http_host: aliyundoc.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
Escenario 2: Distribución dinámica simple
Por ejemplo, todos los registros de acceso de un sitio web se almacenan en un solo Logstore. Desea distribuir estos registros en diferentes Logstores según los campos project y LogStore.
Esto se logra mediante la función de transformación de datos de Log Service.
-
Registros sin procesar
__tag__:type: dynamic_dispatch host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https __tag__:type: dynamic_dispatch host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http __tag__:type: dynamic_dispatch host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https __tag__:type: dynamic_dispatch host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https -
Requisitos de distribución
Los registros se distribuyen dinámicamente según los valores de los campos project y Logstore.
Agregue el campo tag:type con el valor dynamic_dispatch al registro.
-
Regla de transformación
e_output(project=v("project"), logstore=v("logstore"), tags={"type": "dynamic_dispatch"})La función e_output extrae dinámicamente los valores del campo project y del campo Logstore para distribuir los registros.
-
Destino de almacenamiento
En la página Create Data Transformation Job, solo necesita configurar un destino de almacenamiento predeterminado. Este destino se utiliza para almacenar los registros que no se descartan durante el proceso de transformación.
NotaEn este escenario, el Project y Logstore de destino para la distribución dinámica se determinan mediante la configuración en la función
e_output. Este destino es independiente del configurado para el destino de almacenamiento predeterminado (Etiqueta 1) en la página Create Data Transformation Job.Ejemplo de configuración para el destino de almacenamiento predeterminado (Etiqueta 1): Establezca Target Name en
target0, Destination Region en China (Zhangjiakou), Destination Project enProject0y Destination Logstore enLogstore0. Para Authorization Method, seleccione Default Role. -
Resultados de la transformación
## Distributed to Logstore1 in Project1. __tag__:type: dynamic_dispatch host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Distributed to Logstore2 in Project1. __tag__:type: dynamic_dispatch host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Distributed to Logstore1 in Project2. __tag__:type: dynamic_dispatch host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Distributed to Logstore2 in Project2. __tag__:type: dynamic_dispatch host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
Escenario 3: Distribución dinámica entre cuentas
Por ejemplo, todos los registros de acceso de un sitio web se almacenan en un solo Logstore. Desea enrutar dinámicamente los registros a Logstores en diferentes cuentas según los campos project y logstore de los registros.
Esto se logra mediante la función de transformación de datos de Log Service.
-
Registros sin procesar
host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https -
Requisitos de distribución
Los datos se distribuyen dinámicamente a Projects en diferentes cuentas según los valores de los campos project y LogStore en un registro. Por ejemplo, Project1 (que contiene Logstore1 y Logstore2) pertenece a la cuenta A, y Project2 (que contiene Logstore1 y Logstore2) pertenece a la cuenta B.
-
Regla de transformación
e_switch(e_match(v("project"), "Project1"), e_output(name="target1", project=v("project"), logstore=v("logstore")), e_match(v("project"), "Project2"), e_output(name="target2", project=v("project"), logstore=v("logstore"))) -
Destinos de almacenamiento
En la página Create Data Transformation Job, configure los destinos de almacenamiento. Para obtener más información, consulte Create a data transformation job.
NotaEn este escenario, el Project y Logstore de destino se determinan mediante la configuración en la función
e_output. Este destino es independiente del configurado para el destino de almacenamiento predeterminado (Etiqueta 1) en la página Create Data Transformation Job.Para el Authorization Method de cada destino de almacenamiento, seleccione AccessKey Pair y luego introduzca el AccessKey ID y el AccessKey Secret de la cuenta correspondiente.
Etiqueta
Destino de almacenamiento
Project y Logstore de destino
AccessKey
1
target0
Project0, Logstore0
No aplica
2
target1
Puede ser cualquier valor. El destino lo determina la función
e_output.Par de AccessKey de la cuenta A
3
target2
Puede ser cualquier valor. El destino lo determina la función
e_output.Par de AccessKey de la cuenta B
-
Resultados de la transformación
## Distributed to Logstore1 in Account A's Project1. host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Distributed to Logstore2 in Account A's Project1. host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Distributed to Logstore1 in Account B's Project2. host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Distributed to Logstore2 in Account B's Project2. host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
Escenario 4: Distribución dinámica compleja
Por ejemplo, una empresa publica anuncios de un videojuego y almacena todos los registros de solicitudes API del juego en un solo Logstore. La empresa desea analizar el encabezado de solicitud user_agent para enrutar las solicitudes de diferentes dispositivos (iOS, Android y Windows) a Logstores separados, y analizar el campo request_method para calcular la tasa de conversión de los anuncios.
Estos requisitos se cumplen mediante las funciones de transformación de datos, y de consulta y análisis de Log Service.
-
Registro sin procesar
__source__:127.0.0.0 __tag__:__receive_time__: 1589541467 ip:10.0.0.0 request_method: GET user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 -
Requisitos de distribución
Distribuir los registros de solicitudes de usuarios de Windows a Logstore1 en el destino de almacenamiento
target1.Distribuir los registros de solicitudes de usuarios de iOS a Logstore2 en el destino de almacenamiento
target2.Distribuir los registros de solicitudes de usuarios de Android a Logstore3 en el destino de almacenamiento
target3.
-
Regla de transformación
En este ejemplo, puede usar la función ua_parse_os para analizar el campo user_agent, la función dct_get para obtener información del sistema operativo desde el encabezado de la solicitud, y la función e_set para agregar un nuevo campo llamado os y establecer su valor con la información del sistema operativo. Posteriormente, utilice la función e_output y funciones condicionales para realizar la distribución dinámica.
e_set("os", dct_get(ua_parse_os(v("user_agent")),"family")) e_if(e_search("os==Windows"),e_output(name="target1")) e_if(e_search("os=iOS"),e_output(name="target2")) e_if(e_search("os==Android"),e_output(name="target3")) -
Destinos de almacenamiento
En la página Create Data Transformation Job, configure los destinos de almacenamiento. Para obtener más información, consulte Create a data transformation job.
Para cada destino de almacenamiento, configure su Target Name, Destination Project y Destination Logstore. También debe seleccionar una Destination Region (por ejemplo, China (Hangzhou)) y un Authorization Method (Default Role o Custom Role). Si selecciona Custom Role, debe proporcionar el Role ARN.
Etiqueta
Destino de almacenamiento
Project y Logstore de destino
1
target0
Project0, Logstore0
2
target1
Project1, Logstore1
3
target2
Project2, Logstore2
4
target3
Project3, Logstore3
-
Consulta y análisis
Ejecute consultas en los Logstores de destino para determinar la tasa de conversión de los anuncios. Los siguientes resultados indican que los usuarios de Android tienen una tasa de conversión más alta. Para obtener más información, consulte Query and analysis quick start.
-
En la página Search & Analysis de Logstore2, ejecute la siguiente consulta para contar las solicitudes GET y POST de usuarios de iOS.
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
-
En la página Search & Analysis de Logstore3, ejecute la siguiente consulta para contar las solicitudes GET y POST de usuarios de Android.
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
-