Os plugins de transformação de dados convertem logs brutos em diferentes formatos, resolvem endereços IP em localizações geográficas e transformam logs em métricas ou traces.
Plugins de transformação de dados
O Log Service disponibiliza os seguintes plugins de transformação de dados.
|
Parâmetro |
Tipo |
Descrição |
|
Converter endereço IP |
extensão |
Converte um endereço IP em uma localização geográfica (país, região, cidade, latitude e longitude). |
|
Log para métrica |
extensão |
Converte logs em métricas do Log Service. |
|
Log para trace |
extensão |
Converte logs em dados de trace do Log Service. |
Ponto de entrada
Para utilizar um plugin do Logtail no processamento de logs, adicione-o ao crie ou modifique uma configuração do Logtail. Para obter mais informações, consulte Overview.
Plugin de conversão de endereço IP
O plugin processor_geoip converte endereços IP em logs em dados de geolocalização, como país, província, cidade, longitude e latitude.
Configuração
O pacote de instalação do Logtail não inclui um banco de dados GeoIP, portanto, é necessário baixe manualmente um para o servidor onde o Logtail está instalado e configurá-lo. Recomendamos o baixe de um banco de dados com precisão no nível de City. Para saber mais, consulte MaxMind GeoLite2.
Certifique-se de que o banco de dados esteja no formato MMDB.
A configuração via formulário está disponível para logs de texto e saída padrão de contêiner.
A configuração JSON não está disponível para logs de texto.
Configuração por formulário
-
Parâmetros
defina o Processor Type como Convert IP Addresses.
Parâmetro
Descrição
Original Field
O campo source que contém o endereço IP para conversão.
GeoIP Database Path
O caminho absoluto para o banco de dados GeoIP. Por exemplo,
/user/data/GeoLite2-City_20180102/GeoLite2-City.mmdb.Retain Original Field
Mantém o campo source no log processado.
Report Original Field Missing Error
Gera um erro se o campo source estiver ausente no log bruto.
Report Parsing Failure Error
Gera um erro se o endereço IP for inválido ou não for encontrado no banco de dados.
Language
O idioma dos nomes de localidade. Padrão: zh-CN.
ImportanteCertifique-se de que o seu banco de dados GeoIP suporte o idioma especificado.
-
Exemplo
-
Log bruto
"source_ip" : "**.**.**.**" Configuração do plugin do Logtail: configure o processor com as seguintes definições: defina o Processor Type como Convert IP Addresses, especifique
source_ippara Original Field e/user/data/GeoLite2-City_20180102/GeoLite2-City.mmdbpara GeoIP Database Path. Nas configurações avançadas, selecione Retain Original Field, Report Original Field Missing Error e Report Parsing Failure Error. Defina Language comozh-CNe clique em confirme.-
Resultado do processamento
"source_ip" : "**.**.**.**" "source_ip_province_" : "Zhejiang" "source_ip_city_" : "China (Hangzhou)" "source_ip_province_code_" : "ZJ" "source_ip_country_code_" : "CN" "source_ip_longitude_" : "120.********" "source_ip_latitude_" : "30.********"
-
Configuração JSON
-
Parâmetros
defina type como processor_geoip. O parâmetro detail é descrito na tabela a seguir.
Parâmetro
Tipo
Obrigatório
Descrição
SourceKey
String
Sim
O campo source que contém o endereço IP para conversão.
DBPath
String
Sim
O caminho completo para o banco de dados GeoIP. Por exemplo, /user/data/GeoLite2-City_20180102/GeoLite2-City.mmdb.
NoKeyError
Boolean
Não
Gera um erro se o campo especificado por
SourceKeyestiver ausente no log bruto.-
true: Gera um erro. -
false(padrão): Não gera erro.
NoMatchError
Boolean
Não
Gera um erro se o endereço IP for inválido ou não for encontrado no banco de dados.
-
true(padrão): Gera um erro. -
false: Não gera erro.
KeepSource
Boolean
Não
Mantém o campo source no log processado.
-
true(padrão): Mantém o campo source. -
false: Não mantém o campo source.
Language
String
Não
O idioma dos nomes de localidade. Padrão: zh-CN.
ImportanteCertifique-se de que o seu banco de dados GeoIP suporte o idioma especificado.
-
-
Exemplo
-
Log bruto
"source_ip" : "**.**.**.**" -
Configuração do plugin do Logtail
{ "type": "processor_geoip", "detail": { "SourceKey": "source_ip", "NoKeyError": true, "NoMatchError": true, "KeepSource": true, "DBPath" : "/user/data/GeoLite2-City_20180102/GeoLite2-City.mmdb" } } -
Resultado do processamento
"source_ip" : "**.**.**.**" "source_ip_city_" : "China (Hangzhou)" "source_ip_province_code_" : "ZJ" "source_ip_country_code_" : "CN" "source_ip_longitude_" : "120.********" "source_ip_latitude_" : "30.********"
-
Processador Log to Metric
Utilize o plugin processor_log_to_sls_metric para converter logs em métricas do SLS.
Configuração
O plugin processor_log_to_sls_metric é compatível com o Logtail 1.7.1 e versões posteriores.
Console
defina o Processor Type como Log to Metric. A tabela a seguir descreve os parâmetros.
-
Parâmetros
Parâmetro
Descrição
MetricTimeKey
O campo de tempo do log usado para mapear o campo
__time_nano__nos dados de séries temporais. Por padrão, o valor do campo__time__é usado.Certifique-se de que o campo especificado contenha um timestamp Unix válido. As unidades suportadas são segundos (10 dígitos), milissegundos (13 dígitos), microssegundos (16 dígitos) e nanossegundos (19 dígitos).
MetricLabelKeys
A lista de chaves do campo
__labels__. As chaves devem seguir a expressão regular^[a-zA-Z_][a-zA-Z0-9_]*$. Os valores não podem conter uma barra vertical (|) ou#$#. Para mais detalhes, consulte Time series data (Metric).Você não pode adicionar o campo
__labels__ao parâmetro MetricLabelKeys. Se o campo__labels__existir no campo source, seu valor é anexado ao novo campo__labels__.MetricValues
Um mapa de campos de log para os nomes e valores das métricas. Em cada par chave-valor, a chave especifica o campo de log para o nome da métrica (
__name__), e o valor especifica o campo de log para o valor da métrica (__value__).-
O nome da métrica corresponde ao campo
__name__e deve seguir a expressão regular^[a-zA-Z_:][a-zA-Z0-9_:]*$. -
O valor da métrica corresponde ao campo
__value__, que deve ser do tipo Double.
Para obter mais detalhes, consulte Time series data (metrics).
CustomMetricLabels
Para o campo
__labels__personalizado, a chave (Key) deve seguir a expressão regular^[a-zA-Z_][a-zA-Z0-9_]*$, e o valor (Value) não pode conter uma barra vertical (|) ou#$#. Para mais detalhes, consulte Time Series Data (Metric).IgnoreError
Indica se deve registrar um erro quando nenhum log corresponder à conversão. Padrão:
false(um erro é registrado). -
-
Exemplo de configuração
-
Log bruto
{ "script_md5":"8c6aebe9****c27f", "remote_addr":"123.XX.XX.123", "remote_user":"-", "time_local":"15/Aug/2023:12:03:20", "method":"GET", "url":"/www.a.com", "protocol":"HTTP/1.1", "status":"404", "body_bytes_sent":"4146", "http_referer":"-", "http_user_agent":"curl/7.74.0", "http_x_forwarded_for":"-", "__labels__":"field1#$#field1|field2#$#field2|tag1#$#tag1|tag2#$#tag2", "body_bytes_sent_name":"body_bytes_sent", "status_name":"status", "httptime":"1692101000", "__time__":"1692101000" } -
Configuração do plugin do Logtail
Na caixa de diálogo de configuração do processador, defina o Processor Type como Log to Metric. defina MetricTimeKey como
httptime. Adicioneurlemethoda MetricLabelKeys. Em MetricValues, adicione dois mapeamentos:body_bytes_sent_nameparabody_bytes_sentestatus_nameparastatus. Em CustomMetricLabels, adicione um rótulo com a chavenginxe o valortest. Clique em confirme. -
Resultado do processamento
-
Primeiro registro de dados de série temporal
{ "__labels__":"field1#$#field1|field2#$#field2|method#$#GET|nginx#$#test|tag1#$#tag1|tag2#$#tag2|url#$#/www.a.com", "__name__":"body_bytes_sent", "__value__":"4146", "__time_nano__":"1692101000000000000", "__time__":"1692101000" } -
Segundo registro de dados de série temporal
{ "__labels__":"field1#$#field1|field2#$#field2|method#$#GET|nginx#$#test|tag1#$#tag1|tag2#$#tag2|url#$#/www.a.com", "__name__":"status", "__value__":"404", "__time_nano__":"1692101000000000000", "__time__":"1692101000" }
-
-
JSON
defina type como processor_log_to_sls_metric. A tabela a seguir descreve os parâmetros no objeto detail.
-
Parâmetros
Parâmetro
Tipo
Obrigatório
Descrição
MetricTimeKey
String
Não
O campo de tempo do log usado para mapear o campo
__time_nano__nos dados de séries temporais. Por padrão, o valor do campo__time__é usado.Certifique-se de que o campo especificado contenha um timestamp Unix válido. As unidades suportadas são segundos (10 dígitos), milissegundos (13 dígitos), microssegundos (16 dígitos) e nanossegundos (19 dígitos).
MetricLabelKeys
Array de strings
Sim
A lista de chaves do campo
__labels__. As chaves devem seguir a expressão regular^[a-zA-Z_][a-zA-Z0-9_]*$. Os valores não podem conter barras verticais (|) ou#$#. Para mais detalhes, consulte Time series data (metrics).Você não pode adicionar o campo
__labels__ao parâmetro MetricLabelKeys. Se o campo__labels__existir no campo source, seu valor é anexado ao novo campo__labels__.MetricValues
Mapa
Sim
Um mapa de campos de log para os nomes e valores das métricas. Em cada par chave-valor, a chave especifica o campo de log para o nome da métrica (
__name__), e o valor especifica o campo de log para o valor da métrica (__value__).-
O nome da métrica corresponde ao campo
__name__e deve seguir a expressão regular^[a-zA-Z_:][a-zA-Z0-9_:]*$. -
O valor da métrica corresponde ao campo
__value__e deve ser do tipo Double.
Para obter mais detalhes, consulte Time series data (metrics).
CustomMetricLabels
Mapa
Não
Para o campo
__labels__personalizado, a chave (Key) deve seguir a expressão regular^[a-zA-Z_][a-zA-Z0-9_]*$, e o valor (Value) não pode conter uma barra vertical (|) ou#$#. Para mais detalhes, consulte Time series data (Metric).IgnoreError
Boolean
Não
Indica se deve registrar um erro quando nenhum log corresponder. Padrão:
false(um erro é registrado). -
-
Exemplo de configuração
-
Log bruto
{ "script_md5":"8c6aebe9****c27f", "remote_addr":"123.XX.XX.123", "remote_user":"-", "time_local":"15/Aug/2023:12:03:20", "method":"GET", "url":"/www.a.com", "protocol":"HTTP/1.1", "status":"404", "body_bytes_sent":"4146", "http_referer":"-", "http_user_agent":"curl/7.74.0", "http_x_forwarded_for":"-", "__labels__":"field1#$#field1|field2#$#field2|tag1#$#tag1|tag2#$#tag2", "body_bytes_sent_name":"body_bytes_sent", "status_name":"status", "httptime":"1692101000", "__time__":"1692101000" } -
Configuração do plugin do Logtail
{ "processors":[ { "detail":{ "CustomMetricLabels":{ "nginx":"test" }, "IgnoreError":false, "MetricLabelKeys":[ "url", "method" ], "MetricTimeKey":"httptime", "MetricValues":{ "body_bytes_sent_name":"body_bytes_sent", "status_name":"status" } }, "type":"processor_log_to_sls_metric" } ] } -
Resultado do processamento
-
Primeiro registro de dados de série temporal
{ "__labels__":"field1#$#field1|field2#$#field2|method#$#GET|nginx#$#test|tag1#$#tag1|tag2#$#tag2|url#$#/www.a.com", "__name__":"body_bytes_sent", "__value__":"4146", "__time_nano__":"1692101000000000000", "__time__":"1692101000" } -
Segundo registro de dados de série temporal
{ "__labels__":"field1#$#field1|field2#$#field2|method#$#GET|nginx#$#test|tag1#$#tag1|tag2#$#tag2|url#$#/www.a.com", "__name__":"status", "__value__":"404", "__time_nano__":"1692101000000000000", "__time__":"1692101000" }
-
-
Processador Log to Trace
Utilize o plugin processor_otel_trace para converter logs em traces do SLS.
Configuração
O processador content é compatível com o Logtail 1.7.1 e versões posteriores.
Configuração por formulário
defina o Processor Type como Log to Trace. A tabela a seguir descreve os parâmetros.
-
Parâmetros
Parâmetro
Descrição
SourceKey
O nome do campo source.
Format
O formato de saída. Valores válidos:
-
protobuf
-
json
-
protojson
NoKeyError
Se
true, gera um erro se o campo source estiver ausente no log. O padrão éfalse.TraceIDNeedDecode
Se
true, decodifica oTraceIDem Base64. O padrão éfalse.Ao definir
Formatcomoprotojsone oTraceIDestiver codificado em Base64, defina este parâmetro comotruepara evitar falhas na conversão.SpanIDNeedDecode
Se
true, decodifica oSpanIDem Base64. O padrão éfalse.Ao definir
Formatcomoprotojsone oSpanIDestiver codificado em Base64, defina este parâmetro comotruepara evitar falhas na conversão.ParentSpanIDNeedDecode
Se
true, decodifica oParentSpanIDem Base64. O padrão éfalse.Ao definir
Formatcomoprotojsone oParentSpanIDestiver codificado em Base64, defina este parâmetro comotruepara evitar falhas na conversão. -
-
Exemplo de configuração
-
Log bruto
INFO OtlpJsonLoggingSpanExporter - {"resource":{"attributes":[]},"scopeSpans":[{"scope":{"name":"io.opentelemetry.spring-webmvc-3.1","version":"1.26.0-alpha","attributes":[]},"spans":[{"traceId":"a7adbcb0921fa4a5b90615d0ad38ef95","spanId":"eecaa7e1b63c9f61","parentSpanId":"fa85fcee7fe0e0e8","name":"HelloWorldController.sayHello","kind":1,"startTimeUnixNano":"1696659118615748056","endTimeUnixNano":"1696659128701715998","attributes":[{"key":"thread.id","value":{"intValue":"48"}},{"key":"thread.name","value":{"stringValue":"http-nio-18080-exec-1"}}],"events":[],"links":[],"status":{}}]},{"scope":{"name":"io.opentelemetry.tomcat-7.0","version":"1.26.0-alpha","attributes":[]},"spans":[{"traceId":"a7adbcb0921fa4a5b90615d0ad38ef95","spanId":"fa85fcee7fe0e0e8","name":"GET /hello","kind":2,"startTimeUnixNano":"1696659118479360000","endTimeUnixNano":"1696659128703706165","attributes":[{"key":"http.status_code","value":{"intValue":"200"}},{"key":"user_agent.original","value":{"stringValue":"curl/7.84.0"}},{"key":"net.host.name","value":{"stringValue":"localhost"}},{"key":"http.response_content_length","value":{"intValue":"12"}},{"key":"http.target","value":{"stringValue":"/hello"}},{"key":"net.sock.peer.addr","value":{"stringValue":"127.0.0.1"}},{"key":"net.host.port","value":{"intValue":"18080"}},{"key":"net.sock.peer.port","value":{"intValue":"53649"}},{"key":"thread.id","value":{"intValue":"48"}},{"key":"thread.name","value":{"stringValue":"http-nio-18080-exec-1"}},{"key":"http.route","value":{"stringValue":"/hello"}},{"key":"net.sock.host.addr","value":{"stringValue":"127.0.0.1"}},{"key":"net.protocol.name","value":{"stringValue":"http"}},{"key":"net.protocol.version","value":{"stringValue":"1.1"}},{"key":"http.scheme","value":{"stringValue":"http"}},{"key":"http.method","value":{"stringValue":"GET"}}],"events":[],"links":[],"status":{}}]}],"schemaUrl":"https://opentelemetry.io/schemas/1.19.0"} -
Configuração do processador do Logtail
defina o Processor Type como Log to Trace, defina SourceKey como
protojson, defina Format comoprotobufe selecione NoKeyError. Mantenha TraceIDNeedDecode, SpanIDNeedDecode e ParentSpanIDNeedDecode desmarcados e clique em confirme. -
Resultado do processamento
O código a seguir mostra um exemplo de resultado do processamento.
1 10-07 14:12:08 attribute: {"http.method":"GET","http.response_content_length":"","http.route":"/hello","http.scheme":"http","http.status_code":"","http.target":"/hello","net.host.name":"localhost","net.host.port":"","net.protocol.name":"http","net.protocol.version":"1.1","net.sock.host.addr":"127.0.0.1","net.sock.peer.addr":"127.0.0.1","net.sock.peer.port":"","thread.id":"","thread.name":"http-nio-18080-exec-1","user_agent.original":"curl/7.84.0"} duration: 10224346 end: 1696659128703706 host: B-7xxx xxx.local kind: server links: [] logs: [] name: GET /hello otlp.name: io.opentelemetry.tomcat-7.0 otlp.version: 1.26.0-alpha parentSpanID: resource: {"host.arch":"x86_64","os.description":"Mac OS X 13.0.1","os.type":"darwin","process.command_args":"","process.executable.path":"/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/bin/java","process.pid":"","process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 20.0.1+9-29","process.runtime.name":"Java(TM) SE Runtime Environment","process.runtime.version":"20.0.1+9-29","telemetry.auto.version":"1.26.0","telemetry.sdk.language":"java","telemetry.sdk.name":"opentelemetry","telemetry.sdk.version":"1.26.0"} service: unknown_service:java spanID: 7dexxx xxxb47bc start: 1696659118479360 statusCode: UNSET statusMessage: traceID: 6bb690xxx xxxff79 traceState:
-
Configuração JSON
defina type como processor_otel_trace. A tabela a seguir descreve os parâmetros no objeto detail.
-
Parâmetros
Parâmetro
Tipo
Obrigatório
Descrição
SourceKey
String
Sim
O nome do campo source.
Format
String
Sim
O formato de saída. Os valores válidos são
json,protojsonetrue.NoKeyError
Boolean
Não
Se
false, gera um erro se o campo source estiver ausente no log. O padrão étrue.TraceIDNeedDecode
Boolean
Não
Se
TraceID, decodifica ofalseem Base64. O padrão éFormat.Ao definir
protojsoncomoTraceIDe otrueestiver codificado em Base64, defina este parâmetro comotruepara evitar falhas na conversão.SpanIDNeedDecode
Boolean
Não
Se
SpanID, decodifica ofalseem Base64. O padrão éFormat.Ao definir
protojsoncomoSpanIDe otrueestiver codificado em Base64, defina este parâmetro comotruepara evitar falhas na conversão.ParentSpanIDNeedDecode
Boolean
Não
Se
ParentSpanID, decodifica ofalseem Base64. O padrão éFormat.Ao definir
protojsoncomoParentSpanIDe otrueestiver codificado em Base64, defina este parâmetro comotruepara evitar falhas na conversão. -
Exemplo de configuração
-
Log bruto
INFO OtlpJsonLoggingSpanExporter - {"resource":{"attributes":[]},"scopeSpans":[{"scope":{"name":"io.opentelemetry.spring-webmvc-3.1","version":"1.26.0-alpha","attributes":[]},"spans":[{"traceId":"a7adbcb0921fa4a5b90615d0ad38ef95","spanId":"eecaa7e1b63c9f61","parentSpanId":"fa85fcee7fe0e0e8","name":"HelloWorldController.sayHello","kind":1,"startTimeUnixNano":"1696659118615748056","endTimeUnixNano":"1696659128701715998","attributes":[{"key":"thread.id","value":{"intValue":"48"}},{"key":"thread.name","value":{"stringValue":"http-nio-18080-exec-1"}}],"events":[],"links":[],"status":{}}]},{"scope":{"name":"io.opentelemetry.tomcat-7.0","version":"1.26.0-alpha","attributes":[]},"spans":[{"traceId":"a7adbcb0921fa4a5b90615d0ad38ef95","spanId":"fa85fcee7fe0e0e8","name":"GET /hello","kind":2,"startTimeUnixNano":"1696659118479360000","endTimeUnixNano":"1696659128703706165","attributes":[{"key":"http.status_code","value":{"intValue":"200"}},{"key":"user_agent.original","value":{"stringValue":"curl/7.84.0"}},{"key":"net.host.name","value":{"stringValue":"localhost"}},{"key":"http.response_content_length","value":{"intValue":"12"}},{"key":"http.target","value":{"stringValue":"/hello"}},{"key":"net.sock.peer.addr","value":{"stringValue":"127.0.0.1"}},{"key":"net.host.port","value":{"intValue":"18080"}},{"key":"net.sock.peer.port","value":{"intValue":"53649"}},{"key":"thread.id","value":{"intValue":"48"}},{"key":"thread.name","value":{"stringValue":"http-nio-18080-exec-1"}},{"key":"http.route","value":{"stringValue":"/hello"}},{"key":"net.sock.host.addr","value":{"stringValue":"127.0.0.1"}},{"key":"net.protocol.name","value":{"stringValue":"http"}},{"key":"net.protocol.version","value":{"stringValue":"1.1"}},{"key":"http.scheme","value":{"stringValue":"http"}},{"key":"http.method","value":{"stringValue":"GET"}}],"events":[],"links":[],"status":{}}]}],"schemaUrl":"https://opentelemetry.io/schemas/1.19.0"} -
Configuração do processador do Logtail
{ "processors": [ { "type": "processor_split_log_regex", "detail": { "PreserveOthers": true, "SplitKey": "content", "SplitRegex": "INFO\\sOtlpJsonLoggingSpanExporter\\s.+" } }, { "type": "processor_regex", "detail": { "SourceKey": "content", "Regex": "INFO\\sOtlpJsonLoggingSpanExporter\\s-(\\s.+)", "Keys": [ "trace_data" ] } }, { "detail": { "SourceKey": "trace_data", "Format": "protojson", "NoKeyError": true }, "type": "processor_otel_trace" } ] } -
Resultado do processamento
O código a seguir mostra um exemplo de resultado do processamento.1 10-07 14:12:08 attribute: {"http.method":"GET","http.response_content_length":"","http.route":"/hello","http.scheme":"http","http.status_code":"","http.target":"/hello","net.host.name":"localhost","net.host.port":"","net.protocol.name":"http","net.protocol.version":"1.1","net.sock.host.addr":"127.0.0.1","net.sock.peer.addr":"127.0.0.1","net.sock.peer.port":"","thread.id":"","thread.name":"http-nio-18080-exec-1","user_agent.original":"curl/7.84.0"} duration: 10224346 end: 1696659128703706 host: B-7xxx xxx.local kind: server links: [] logs: [] name: GET /hello otlp.name: io.opentelemetry.tomcat-7.0 otlp.version: 1.26.0-alpha parentSpanID: resource: {"host.arch":"x86_64","os.description":"Mac OS X 13.0.1","os.type":"darwin","process.command_args":"","process.executable.path":"/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/bin/java","process.pid":"","process.runtime.description":"Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 20.0.1+9-29","process.runtime.name":"Java(TM) SE Runtime Environment","process.runtime.version":"20.0.1+9-29","telemetry.auto.version":"1.26.0","telemetry.sdk.language":"java","telemetry.sdk.name":"opentelemetry","telemetry.sdk.version":"1.26.0"} service: unknown_service:java spanID: 7dexxx xxxb47bc start: 1696659118479360 statusCode: UNSET statusMessage: traceID: 6bb690xxx xxxff79 traceState:
-
Tópicos relacionados
-
configure pipelines do Logtail por meio da API:
-
configure plugins de processamento por meio do console:
Collect container logs (standard output and files) from a cluster by using a Kubernetes CRD