As funções de processamento de eventos permitem descartar, reter, dividir e enviar logs durante a transformação de dados. Este tópico aborda a sintaxe, os parâmetros e os exemplos de cada função.
Funções
|
Categoria |
Função |
Descrição |
|
Operações de eventos |
Descarta um log com base em uma condição. Pode ser usada com outras funções. Para obter mais informações, consulte Replicar e distribuir dados. |
|
|
Retém um log com base em uma condição. Tanto e_keep quanto e_drop descartam logs. O e_keep descarta um log quando a condição não é atendida, enquanto o e_drop descarta um log quando a condição é atendida.
Pode ser usada com outras funções. Para obter mais informações, consulte Transformar dados JSON complexos. |
||
|
Divisão de eventos |
Divide um log em vários logs com base no valor de um campo. Também é possível extrair campos com JMESPath antes da divisão. Pode ser usada com outras funções. Para obter mais informações, consulte Transformar dados JSON complexos. |
|
|
Saída de eventos |
Envia um log para um Logstore especificado. Você pode configurar o topic, source, tags e shard hash para o log de saída.
Pode ser usada com outras funções. Para obter mais informações, consulte Agregar dados de log de diferentes Logstores em um único Logstore. |
|
|
Transformação de eventos em dados de séries temporais |
Converte um log para o formato de séries temporais (Metricstore). Nota
Após processar os dados no formato de séries temporais, selecione um Metricstore como destino ao salvar os resultados da transformação. Veja a seguir um exemplo de dados típicos de séries temporais:
Para obter mais informações, consulte Dados de séries temporais (Metric). Pode ser usada com outras funções. Para obter mais informações, consulte Converter campos de log em um Logstore em medidas de métricas em um Metricstore. |
e_drop
Descarta um log com base em uma condição.
-
Sintaxe
e_drop(condition=True)O identificador fixo DROP é suportado, o que equivale a e_drop().
-
Parâmetros
Nome do parâmetro
Tipo
Obrigatório
Descrição
condition
Bool
Não
Padrão: True. Normalmente, um resultado de função condicional é passado para esse parâmetro.
-
Resposta
Descarta o log e retorna None se a condição for atendida. Caso contrário, retorna o log original.
-
Exemplos
-
Exemplo 1: Descartar o log se o valor do campo __programe__ for access. Caso contrário, manter o log.
-
Logs brutos
__programe__: access age: 18 content: 123 name: maki __programe__: error age: 18 content: 123 name: maki -
Regra de transformação
e_if(e_search("__programe__==access"), DROP) -
Resultado
O log com o campo __programe__ definido como access é descartado. O log com o campo __programe__ definido como error é retido.
__programe__: error age: 18 content: 123 name: maki
-
-
Exemplo 2: A condição é avaliada como True. O log é descartado.
-
Log bruto
k1: v1 k2: v2 k3: k1 -
Regra de transformação
e_drop(e_search("k1==v1")) -
Resultado
O log é descartado porque a condição k1==v1 é True.
-
-
Exemplo 3: A condição é avaliada como False. O log é retido.
-
Log bruto
k1: v1 k2: v2 k3: k1 -
Regra de transformação
e_drop(e_search("not k1==v1")) -
Resultado
k1: v1 k2: v2 k3: k1
-
-
Exemplo 4: Nenhuma condição é definida. O valor padrão True é usado e o log é descartado.
-
Log bruto
k1: v1 k2: v2 k3: k1 -
Regra de transformação
e_drop() -
Resultado
O log é descartado.
-
-
-
Referências
Pode ser usada com outras funções. Para obter mais informações, consulte Replicar e distribuir dados.
e_keep
Retém um log com base em uma condição.
-
Sintaxe
e_keep(condition=True)O identificador fixo KEEP é suportado, o que equivale a e_keep().
-
Parâmetros
Nome do parâmetro
Tipo
Obrigatório
Descrição
condition
Bool
Não
Padrão: True. Normalmente, um resultado de função condicional é passado para esse parâmetro.
-
Resposta
Retorna o log original se a condição for atendida. Descarta o log se a condição não for atendida.
-
Exemplos
-
Exemplo 1: Reter o log se o valor do campo
__programe__for access. Caso contrário, descartar o log.-
Logs brutos
__programe__: access age: 18 content: 123 name: maki __programe__: error age: 18 content: 123 name: maki -
Regra de transformação
e_keep(e_search("__programe__==access")) # Equivalent to e_if(e_search("not __programe__==access"), DROP) # Equivalent to e_if_else(e_search("__programe__==access"), KEEP, DROP) -
Resultado
O log com o campo __programe__ definido como access é retido.
__programe__: access age: 18 content: 123 name: maki
-
-
Exemplo 2: A condição é avaliada como True. O log é retido.
-
Log bruto
k1: v1 k2: v2 k3: k1 -
Regra de transformação
e_keep(e_search("k1==v1")) -
Resultado
k1: v1 k2: v2 k3: k1
-
-
Exemplo 3: A condição é avaliada como False. O log é descartado.
-
Log bruto
k1: v1 k2: v2 k3: k1 -
Regra de transformação
e_keep(e_search("not k1==v1")) -
Resultado
O log é descartado.
-
-
Exemplo 4: A condição é False. O log é descartado.
-
Log bruto
k1: v1 k2: v2 k3: k1 -
Regra de transformação
e_keep(False) -
Resultado
O log é descartado.
-
-
-
Referências
Pode ser usada com outras funções. Para obter mais informações, consulte Transformar dados JSON complexos.
e_split
Divide um log em vários logs com base no valor de um campo. Também é possível extrair campos com JMESPath antes da divisão.
-
Sintaxe
e_split(field_name, sep=',', quote='"', lstrip=True, jmes=None, output=None)Regras de divisão:
-
Se você especificar o parâmetro jmes, o valor do campo do log é convertido em uma lista JSON, e o JMES é usado para extrair valores para a próxima etapa. Se você não especificar o parâmetro jmes, o valor do campo é usado diretamente na próxima etapa.
-
Se o valor da etapa anterior for uma lista ou uma string no formato de lista JSON, o log será dividido com base nessa lista. Caso contrário, o valor será analisado como um arquivo CSV usando os parâmetros sep, quote, e lstrip. O log será então dividido com base nos valores analisados.
-
-
Parâmetros
Nome do parâmetro
Tipo
Obrigatório
Descrição
field_name
String
Sim
O nome do campo a ser dividido. Para obter informações sobre como definir nomes de campos especiais, consulte Tipos de eventos.
sep
String
Não
O separador usado para dividir vários valores.
quote
String
Não
O caractere de aspas usado para delimitar valores.
lstrip
String
Não
Se deve remover os espaços à esquerda de cada valor. Padrão: True.
jmes
String
Não
Converte o valor do campo em um objeto JSON, extrai um valor usando uma expressão JMES e, em seguida, divide o resultado.
output
String
Não
O nome do campo para os resultados da divisão. Por padrão, o nome do campo original é substituído.
-
Resposta
Retorna uma lista de logs com os valores dos campos substituídos pelos valores divididos da lista de origem.
-
Exemplos
-
Logs brutos
__topic__: age: 18 content: 123 name: maki __topic__: age: 18 content: 123 name: maki -
Regra de transformação
e_set("__topic__", "V_SENT,V_RECV,A_SENT,A_RECV") e_split("__topic__") -
Resultado
__topic__: A_SENT age: 18 content: 123 name: maki __topic__: V_RECV age: 18 content: 123 name: maki ...
-
-
Referências
Pode ser usada com outras funções. Para obter mais informações, consulte Transformar dados JSON complexos.
Logstore de saída
Envia um log para um Logstore especificado. Você pode configurar o topic, source e tags para o log de saída.
-
Sintaxe
e_output(name=None, project=None, logstore=None, topic=None, source=None, tags=None, hash_key_field=None, hash_key=None) e_coutput(name=None, project=None, logstore=None, topic=None, source=None, tags=None, hash_key_field=None, hash_key=None)No modo de visualização, os logs não são enviados para o Logstore de destino. Em vez disso, são enviados para o Logstore internal-etl-log, um Logstore dedicado que é criado automaticamente no projeto atual quando você visualiza pela primeira vez um job de transformação de dados. Você não pode modificar a configuração nem gravar outros dados nesse Logstore. Este Logstore é gratuito.
-
Parâmetros
NotaSe você configurar os parâmetros name, project e logstore na função e_output ou e_coutput e também configurar um Project de destino e um Logstore de destino no painel Create Data Transformation Job, os parâmetros da função terão precedência. Os detalhes são os seguintes:
-
Se você configurar apenas o parâmetro name na função e_output ou e_coutput, os resultados da transformação serão distribuídos e armazenados no Logstore de destino que corresponde ao nome especificado.
-
Se você configurar apenas os parâmetros project e Logstore na função e_output, os resultados da transformação serão distribuídos e armazenados no Logstore de destino que você especificou na função e_output.
Se você usar um par de AccessKey para autorização, o par de AccessKey da conta conectada atual será usado durante o processo de transformação.
-
Se você configurar os parâmetros name, project e Logstore na função e_output, os resultados da transformação serão distribuídos e armazenados no Logstore de destino que você especificou na função e_output.
Se você usar um par de AccessKey para autorização, o par de AccessKey especificado para o nome de destino será usado durante o processo de transformação.
Nome do parâmetro
Tipo
Obrigatório
Descrição
name
String
Não
O nome do destino de armazenamento. Padrão: None.
project
String
Não
O projeto de destino. Já deve existir.
Logstore
String
Não
O Logstore de destino. Já deve existir.
topic
String
Não
Define um novo topic para o log.
source
String
Não
Define um novo source para o log.
tags
Dict
Não
Define novas tags para o log. Passe as tags em formato de dicionário.
NotaVocê não precisa adicionar o prefixo
__tag__:às palavras-chave.hash_key_field
String
Não
Um nome de campo no log. O job de transformação encaminha o log para um shard específico com base no valor de hash desse campo.
NotaSe o campo especificado não existir no log, o sistema volta ao modo de balanceamento de carga e grava o log aleatoriamente em um shard.
hash_key
String
Não
Um valor de hash. O job de transformação encaminha o log para um shard específico com base nesse valor.
NotaO parâmetro hash_key_field tem prioridade maior do que este parâmetro. Se o parâmetro hash_key_field já estiver configurado na sintaxe de transformação, este parâmetro não terá efeito.
-
Definir o destino de armazenamento padrão
Ao usar a função e_output ou e_coutput, você deve configurar um destino de armazenamento padrão no painel Create Data Transformation Job. O Simple Log Service usa o destino de armazenamento rotulado como 1 como padrão. Por exemplo, o job de transformação de dados envia os dados que atendem aos critérios de uma função e_output para os respectivos Logstores de destino target_01, target_02 e target_03. O job envia todos os outros dados não descartados durante a transformação para o Logstore de destino do destino de armazenamento padrão (target0). Na área Storage destination, configure dois destinos de armazenamento. Destino de armazenamento 1: Defina Target name como
target0, Target region como China (Hangzhou), Target Project comoProject0, Destination Logstore comoLogstore0e Authorization method como default role. Destino de armazenamento 2: Defina Target name comotarget1, Target region como China (Hangzhou), Target Project comoProject1, Destination Logstore comoLogstore1e Authorization method como default role. -
Configurações avançadas de parâmetros
Ao usar a função e_output ou e_coutput e o projeto ou Logstore de destino não existir, acesse o painel Create Data Transformation Job. Na seção Advanced Parameter Settings, defina key como config.sls_output.failure_strategy e value como {"drop_when_not_exists":"true"} para ignorar o log. O log ignorado é descartado e reportado como um log de nível de aviso. Se você não configurar as Advanced Parameter Settings, o job de transformação de dados aguardará a criação do projeto e do Logstore de destino antes de executar.
AvisoAo usar as Advanced Parameter Settings, os logs serão descartados se o projeto ou Logstore de destino não existir. Use este recurso com cautela.
-
Resultados
-
e_output: Envia o log para o Logstore especificado. As regras de transformação subsequentes não são executadas neste log.
-
e_coutput: Envia o log para o Logstore especificado. As regras de transformação subsequentes continuam sendo executadas neste log.
-
-
-
Exemplos
-
Exemplo 1: Se o valor do campo k2 corresponder a uma expressão regular, envie o log para target2 e defina o topic como topic1.
-
Log bruto
__topic__: k1: v1 k2: v2 x1: v3 x5: v4 -
Regra de transformação
A função
e_drop()é usada aqui para descartar dados filtrados pela funçãoe_if(). Se você não adicionar essa função, os dados filtrados serão entregues ao destino de armazenamento padrão.e_if(e_match("k2", r"\w+"), e_output(name="target2", source="source1", topic="topic1")) e_drop() -
Resultado
__topic__: topic1 k1: v1 k2: v2 x1: v3 x5: v4
-
-
Exemplo 2: Calcular um hash com base no valor do campo db_version no log. Envie o log para um shard específico do destino de armazenamento com base nesse valor de hash.
-
Logs brutos
__topic__: db_name: db-01 db_version:5.6 __topic__: db_name: db-02 db_version:5.7 -
Regra de transformação
e_output(name="target1", hash_key_field="db_version") -
Resultado
# Assume the storage destination target1 has two shards. # The range of shard 0 is [00000000000000000000000000000000,80000000000000000000000000000000). # The range of shard 1 is [80000000000000000000000000000000,ffffffffffffffffffffffffffffffff). # The hash values for db_version values 5.6 and 5.7 are 0ebe1a34e990772a2bad83ce076e0766 and f1867131d82f2256b4521fe34aec2405, respectively. # shard 0: __topic__: db_name: db-01 db_version:5.6 # shard 1: __topic__: db_name: db-02 db_version:5.7
-
-
Exemplo 3: Especificar diretamente um valor de hash para enviar o log para um shard específico do destino de armazenamento.
-
Logs brutos
__topic__: db_name: db-01 db_version:5.6 __topic__: db_name: db-02 db_version:5.7 -
Regra de transformação
e_output(name="target1", hash_key="00000000000000000000000000000000") -
Resultado
# Assume the storage destination has two shards. # The range of shard 0 is [00000000000000000000000000000000,80000000000000000000000000000000). # The range of shard 1 is [80000000000000000000000000000000,ffffffffffffffffffffffffffffffff). # shard 0: __topic__: db_name: db-01 db_version:5.6 __topic__: db_name: db-02 db_version:5.7 # shard 1: None
-
-
-
Referências
Pode ser usada com outras funções. Para obter mais informações, consulte Agregar dados de log de diferentes Logstores em um único Logstore.
e_to_metric
Converte um log para o formato de séries temporais (Metricstore).
-
Sintaxe
e_to_metric(names=None, labels=None, time_field='__time__', time_precision='s', ignore_none_names=True, ignore_none_labels=True) -
Parâmetros
Nome do parâmetro
Tipo
Obrigatório
Descrição
names
String, StringList, or Tuple List
Sim
O nome da métrica para os dados de séries temporais. Pode ser uma única string, uma lista de strings ou uma lista de tuplas. Seu valor é o nome do campo de log correspondente.
-
String: Converte um campo de log em um nome de métrica para dados de séries temporais. Contém uma única string, como rt. Um registro de dados de séries temporais contendo
__name__:rté retornado. -
StringList: Converte campos de log em nomes de métricas para dados de séries temporais. Contém várias strings, como ["rt", "qps"]. Dois registros de dados de séries temporais são retornados, contendo
__name__:rte__name__:qpsrespectivamente. -
Tuple List: Converte vários campos de log em nomes de métricas para dados de séries temporais e os renomeia. Contém várias tuplas, como [("rt","max_rt"),("qps", "total_qps")]. O primeiro elemento da tupla é o campo de log original, e o segundo é o campo de nome da métrica para os dados de séries temporais transformados. Dois registros de dados de séries temporais são retornados, contendo
__name__:max_rte__name__:total_qpsrespectivamente.
labels
String, StringList, or Tuple List
Não
O campo de rótulos para os dados de séries temporais. Pode ser uma única string, uma lista de strings ou uma lista de tuplas. Seu valor é o nome do campo de log correspondente.
NotaNas descrições a seguir, host e app são nomes de campos de log, e hostvalue e appvalue são valores de campos de log.
-
String: Converte um campo de log em rótulos para dados de séries temporais. Contém uma única string, como host. Um registro de dados de séries temporais contendo
__label__:host#$#hostvalueé retornado. -
StringList: Converte campos de log em rótulos para dados de séries temporais. Contém várias strings, como ["host", "app"]. Dois registros de dados de séries temporais são retornados, contendo
__label__:host#$#hostvaluee__label__:app#$#appvaluerespectivamente. -
Tuple List: Converte vários campos de log em rótulos para dados de séries temporais e os renomeia. Contém várias tuplas, como [("host","hostname"),("app", "appname")]. O primeiro elemento da tupla é o campo de log original, e o segundo é o campo de rótulos para os dados de séries temporais transformados. Dois registros de dados de séries temporais são retornados, contendo
__label__:hostname#$#hostvaluee__label__:appname#$#appvaluerespectivamente.
time_field
String
Não
O campo de tempo para os dados de séries temporais. Por padrão, o campo
__time__do log é usado.time_precision
Int
Não
A unidade de tempo do campo de timestamp nos logs brutos. Valores válidos: seconds, milliseconds, microseconds e nanoseconds. Padrão: seconds. Por exemplo,
time_field="ms"especifica milissegundos como unidade de tempo.ignore_none_names
Boolean
Não
Se deve ignorar a conversão quando o campo de log especificado não existir.
-
True (padrão): Ignora a conversão. Os dados não são convertidos para dados de séries temporais.
-
False: Reporta um erro se o campo não existir.
ignore_none_labels
Boolean
Não
Se deve ignorar a conversão do rótulo quando o campo de log especificado não existir.
-
True (padrão): Ignora a conversão. Os dados não são convertidos para dados de séries temporais.
-
False: Reporta um erro se o campo não existir.
-
-
Resposta
Retorna dados de séries temporais.
-
Exemplos
-
Exemplo 1: Converter um log que contém o campo rt para o formato de dados de séries temporais.
-
Log bruto
__time__: 1614739608 rt: 123 -
Regra de transformação
e_to_metric(names="rt") -
Resultado
__labels__: __name__:rt __time_nano__:1614739608000000000 __value__:123.0
-
-
Exemplo 2: Converter um log que contém o campo rt para o formato de dados de séries temporais e usar o campo host como um novo rótulo.
-
Log bruto
__time__: 1614739608 rt: 123 host: myhost -
Regra de transformação
e_to_metric(names="rt", labels="host") -
Resultado
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608000000000 __value__:123.0
-
-
Exemplo 3: Converter um log que contém os campos rt e qps para o formato de dados de séries temporais e usar o campo host como um novo rótulo.
-
Log bruto
__time__: 1614739608 rt: 123 qps: 10 host: myhost -
Regra de transformação
e_to_metric(names=["rt","qps"], labels="host") -
Resultado
__labels__:host#$#myhost __name__:rt __time_nano__:1614739608000000000 __value__:123.0 __labels__:host#$#myhost __name__:qps __time_nano__:1614739608000000000 __value__:10.0
-
-
Exemplo 4: Converter um log que contém os campos rt e qps para o formato de dados de séries temporais, substituir os nomes dos campos por max_rt e total_qps e usar o campo host como um novo rótulo.
-
Log bruto
__time__: 1614739608 rt: 123 qps: 10 host: myhost -
Regra de transformação
e_to_metric(names=[("rt","max_rt"),("qps","total_qps")], labels="host") -
Resultado
__labels__:host#$#myhost __name__:max_rt __time_nano__:1614739608000000000 __value__:123.0 __labels__:host#$#myhost __name__:total_qps __time_nano__:1614739608000000000 __value__:10.0
-
-
Exemplo 5: Converter um log que contém os campos rt e qps para o formato de dados de séries temporais, substituir os nomes dos campos por max_rt e total_qps e renomear o campo host para hostname para usar como um novo rótulo.
-
Log bruto
__time__: 1614739608 rt: 123 qps: 10 host: myhost -
Regra de transformação
e_to_metric(names=[("rt","max_rt"),("qps","total_qps")], labels=[("host","hostname")]) -
Resultado
__labels__:hostname#$#myhost __name__:max_rt __time_nano__:1614739608000000000 __value__:123.0 __labels__:hostname#$#myhost __name__:total_qps __time_nano__:1614739608000000000 __value__:10.0
-
-
Exemplo 6: Converter um log que contém os campos remote_user1 e request_length para o formato de dados de séries temporais, substituir os nomes dos campos por remote_user2 e request_length1 e usar o campo status1 como um novo rótulo.
-
Log bruto
__time__:1652943594 remote_user:89 request_length:4264 request_method:GET status:200 -
Regra de transformação
# The remote_user1 and status1 fields do not exist, so they are ignored and not converted. e_to_metric( names=[("remote_user1", "remote_user2"), ("request_length", "request_length1")], labels="status1", ignore_none_names=True, ignore_none_labels=True, ) -
Resultado
__labels__: __name__:request_length1 __time_nano__:1652943594000000000 __value__:4264.0
-
-
Exemplo 7: Converter um log que contém o campo remote_user para o formato de dados de séries temporais, usar o campo status como um novo rótulo e especificar a unidade de tempo dos dados de log de origem como milissegundos.
-
Log bruto
__time__:1652943594 remote_user:89 request_length:4264 request_method:GET status:200 -
Regra de transformação
e_to_metric( names="remote_user", labels="status", time_precision="ms", ignore_none_names=True, ignore_none_labels=True, ) -
Resultado
__labels__:status#$#200 __name__:remote_user __time_nano__:1652943594000000 __value__:89.0
-
-
Exemplo 8: Converter um log que contém o campo remote_user para o formato de dados de séries temporais, usar o campo status como um novo rótulo, usar o campo time como o campo de tempo para os dados de séries temporais e especificar a unidade de tempo dos dados de log de origem como nanossegundos.
-
Log bruto
time:1652943594 remote_user:89 request_length:4264 request_method:GET status:200 -
Regra de transformação
e_to_metric( names="remote_user", labels="status", time_field="time", time_precision="ns", ignore_none_names=True, ignore_none_labels=True, ) -
Resultado
__labels__:status#$#200 __name__:remote_user __time_nano__:1652943594 __value__:89.0
-
-
-
Referências
Pode ser usada com outras funções. Para obter mais informações, consulte Converter campos de log em um Logstore em medidas de métricas em um Metricstore.