Este tópico descreve cenários de distribuição de dados para vários Logstores, como distribuição dinâmica, entre contas, dinâmica entre contas e dinâmica complexa, além das etapas para cada caso.
Informações básicas
O recurso de transformação de dados do Log Service permite distribuir resultados para vários Logstores. Use pares de AccessKey para enviar resultados a Logstores em contas diferentes ou utilize as funções e_output e e_coutput para rotear resultados dinamicamente para um Project e Logstore específicos.
É possível distribuir resultados para Logstores em até 20 contas diferentes.
A função
e_outputenvia logs para o Logstore especificado e interrompe a aplicação das regras de transformação subsequentes. Para continuar aplicando regras após o envio dos logs, use a funçãoe_coutput. Para mais informações, consulte Funções e_output e e_coutput. Este tópico usa a funçãoe_outputcomo exemplo.
Cenário 1: Distribuição entre contas
Por exemplo, todos os logs de acesso de um site estão armazenados em um único Logstore. O objetivo é rotear logs com diferentes status HTTP para Logstores em contas distintas.
Use o recurso de transformação de dados do Log Service para realizar essa tarefa.
-
Logs brutos
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 distribuição
Logs com http_status igual a 2XX são armazenados no Logstore0 do destino de armazenamento target0, com o tópico definido como success_event.
Logs com http_status igual a 3XX são distribuídos para o Logstore1 no destino de armazenamento target1, com o tópico definido como redirection_event.
Logs com http_status igual a 4XX são enviados ao Logstore2 no destino de armazenamento target2, com o tópico definido como unauthorized_event.
Logs com http_status igual a 5XX são direcionados ao Logstore3 no destino de armazenamento target3, com o tópico definido como internal_server_error_event.
O target0 pertence à conta A, enquanto target1, target2 e target3 pertencem à conta B.
-
Regra de transformação
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 armazenamento
No painel Create Data Transformation Job, configure os destinos de armazenamento. Para mais informações, consulte Criar um job de transformação de dados. A região de destino para o Target 2 (target1) é China (Beijing), com endpoint
https://cn-beijing.log.aliyuncs.com. Já o Target 3 (target2) tem como região China (Hangzhou) - Current Region, e seu endpoint écn-hangzhou-intranet.log.aliyuncs.com.Label
Storage target
Destination Project and Logstore
AccessKey
1
target0
Project0, Logstore0
Par de AccessKey da Conta A
2
target1
Project1, Logstore1
Par de AccessKey da Conta B
3
target2
Project2, Logstore2
Par de AccessKey da Conta B
4
target3
Project3, Logstore3
Par de AccessKey da Conta B
-
Resultados da transformação
## 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
Cenário 2: Distribuição dinâmica simples
Suponha que todos os logs de acesso de um site estejam em um único Logstore e você precise distribuí-los para diferentes Logstores com base nos campos project e LogStore.
Use o recurso de transformação de dados do Log Service para atender a essa necessidade.
-
Logs brutos
__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 distribuição
A distribuição ocorre dinamicamente conforme os valores dos campos project e Logstore.
Adicione o campo tag:type com o valor dynamic_dispatch ao log.
-
Regra de transformação
e_output(project=v("project"), logstore=v("logstore"), tags={"type": "dynamic_dispatch"})A função e_output extrai dinamicamente os valores dos campos project e Logstore para distribuir os logs.
-
Destino de armazenamento
Na página Create Data Transformation Job, configure apenas um destino de armazenamento padrão. Esse destino armazena os logs não descartados durante o processo de transformação.
NotaNeste cenário, o Project e o Logstore de destino para a distribuição dinâmica são definidos pela configuração na função
e_output. Esse destino é independente daquele configurado para o destino de armazenamento padrão (Label 1) na página Create Data Transformation Job.Exemplo de configuração para o destino de armazenamento padrão (Label 1): defina Target Name como
target0, Destination Region como China (Zhangjiakou), Destination Project comoProject0e Destination Logstore comoLogstore0. Em Authorization Method, selecione Default Role. -
Resultados da transformação
## 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
Cenário 3: Distribuição dinâmica entre contas
Imagine que todos os logs de acesso de um site residam em um único Logstore e seja necessário roteá-los dinamicamente para Logstores em contas diferentes, utilizando os campos project e logstore presentes nos logs.
Use o recurso de transformação de dados do Log Service para implementar essa solução.
-
Logs brutos
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 distribuição
Os dados são distribuídos dinamicamente para Projects em contas distintas conforme os valores dos campos project e LogStore no log. Por exemplo, o Project1 (contendo Logstore1 e Logstore2) pertence à conta A, e o Project2 (contendo Logstore1 e Logstore2) pertence à conta B.
-
Regra de transformação
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 armazenamento
Na página Create Data Transformation Job, configure os destinos de armazenamento. Para mais detalhes, consulte Criar um job de transformação de dados.
NotaNeste cenário, o Project e o Logstore de destino são determinados pela configuração na função
e_output. Esse destino independe daquele configurado para o destino de armazenamento padrão (Label 1) na página Create Data Transformation Job.Para o Authorization Method de cada destino de armazenamento, selecione AccessKey Pair e insira o AccessKey ID e o AccessKey Secret da conta correspondente.
Label
Storage target
Destination Project and Logstore
AccessKey
1
target0
Project0, Logstore0
Não aplicável
2
target1
Pode ser qualquer valor. O destino é determinado pela função
e_output.Par de AccessKey da Conta A
3
target2
Pode ser qualquer valor. O destino é determinado pela função
e_output.Par de AccessKey da Conta B
-
Resultados da transformação
## 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
Cenário 4: Distribuição dinâmica complexa
Considere uma empresa que veicula anúncios de um jogo e armazena todos os logs de requisição de API desse jogo em um único Logstore. A empresa deseja analisar o cabeçalho de requisição user_agent para rotear requisições de diferentes dispositivos (iOS, Android e Windows) para Logstores separados e examinar o campo request_method para calcular a taxa de conversão dos anúncios.
Use os recursos de transformação de dados e de consulta e análise do Log Service para atender a esses requisitos.
-
Log bruto
__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 distribuição
Encaminhar logs de requisição de usuários Windows para o Logstore1 no destino de armazenamento
target1.-
Direcionar logs de requisição de usuários iOS para o Logstore2 no destino de armazenamento
target2. Enviar logs de requisição de usuários Android para o Logstore3 no destino de armazenamento
target3.-
Regra de transformação
Neste exemplo, use a função ua_parse_os para analisar o campo user_agent, a função dct_get para obter informações do sistema operacional a partir do cabeçalho da requisição e a função e_set para adicionar um novo campo chamado os, definindo seu valor com as informações do sistema operacional. Em seguida, use a função e_output juntamente com funções condicionais para executar a distribuição 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 armazenamento
Na página Create Data Transformation Job, configure os destinos de armazenamento. Para mais informações, consulte Criar um job de transformação de dados.
Para cada destino de armazenamento, configure Target Name, Destination Project e Destination Logstore. Selecione também uma Destination Region (por exemplo, China (Hangzhou)) e um Authorization Method (Default Role ou Custom Role). Caso selecione Custom Role, forneça o Role ARN.
Label
Storage target
Destination Project and Logstore
1
target0
Project0, Logstore0
2
target1
Project1, Logstore1
3
target2
Project2, Logstore2
4
target3
Project3, Logstore3
-
Consulta e análise
Execute consultas nos Logstores de destino para determinar a taxa de conversão dos anúncios. Os resultados abaixo indicam que usuários Android apresentam uma taxa de conversão maior. Para mais detalhes, consulte Início rápido em consulta e análise.
-
Na página Search & Analysis do Logstore2, execute a seguinte consulta para contar as requisições GET e POST de usuários iOS.
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
-
Na página Search & Analysis do Logstore3, execute a seguinte consulta para contar as requisições GET e POST de usuários Android.
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
-