O Simple Log Service coleta logs de erro Java de services da Alibaba Cloud e os analisa por meio de transformação de dados, facilitando a análise eficiente de erros em cenários de big data e alta concorrência.
Pré-requisitos
Os logs de erro Java do SLS, OSS, SLB e ApsaraDB RDS devem estar coletados e armazenados em um Logstore chamado cloud_product_error_log. Para mais informações, consulte {{XREF_0}}.
Casos de uso
Por exemplo, suponha que você tenha desenvolvido uma aplicação Java chamada Aplicação A, que utiliza diversos services da Alibaba Cloud, como OSS e SLS. Você armazena os logs de erro Java gerados por chamadas de API para esses services em um Logstore chamado cloud_product_error_log na região China (Hangzhou). Para corrigir erros Java com eficiência, analise periodicamente os logs de erro usando o Simple Log Service.
Extraia o horário do log, código de erro, código de status, informações do service, mensagem de erro, método de requisição e número da linha do erro dos logs coletados e armazene os logs analisados no Logstore de cada service para análise de erros.
Abaixo está um exemplo de log bruto:
__source__:192.0.2.10
__tag__:__client_ip__:203.0.113.10
__tag__:__receive_time__:1591957901
__topic__:
message: 2021-05-15 16:43:35 ParameterInvalid 400
com.aliyun.openservices.log.exception.LogException:The body is not valid json string.
at com.aliyun.openservice.log.Client.ErrorCheck(Client.java:2161)
at com.aliyun.openservice.log.Client.SendData(Client.java:2312)
at com.aliyun.openservice.log.Client.PullLogsk(Client.java:1397)
at com.aliyun.openservice.log.Client.SendData(Client.java:2265)
at com.aliyun.openservice.log.Client.GetCursor(Client.java:1123)
at com.aliyun.openservice.log.Client.PullLogs(Client.java:2161)
at com.aliyun.openservice.log.Client.ErrorCheck(Client.java:2426)
at transformEvent.main(transformEvent.java:2559)
Fluxo de trabalho
O Logtail coleta os logs de erro da Aplicação A e os envia para um Logstore chamado cloud_product_error_log. Em seguida, os logs são processados por transformação de dados e entregues aos respectivos Logstores para análise.
Elaborar uma instrução de transformação de dados: analise os dados e escreva a instrução de transformação.
Criar um job de transformação de dados: distribua os logs para os Logstores correspondentes a cada service para análise de erros.
Consultar e analisar dados: examine os logs de erro no Logstore de cada service.
Etapa 1: Elaborar uma instrução de transformação de dados
Transformation process
Para analisar os logs de erro:
Extraia o carimbo de data/hora, código de erro, código de status, informações do service, mensagem de erro, método de requisição e número da linha do erro do campo
message.Armazene os logs de erro no Logstore de cada service.

Transformation logic
Analise o carimbo de data/hora, código de erro, código de status, informações do service, mensagem de erro, método de requisição e número da linha do erro nos logs brutos e crie uma expressão regular para extrair esses campos.
Syntax reference
Utilize a função
regex_matchpara verificar se uma entrada de log contémLogException. Para mais informações, consulte {{XREF_1}}.Caso o log corresponda a
LogException, ele será processado conforme as regras de análise para logs de erro do SLS. Se corresponder aOSSException, seguirá as regras para logs de erro do OSS. Para mais informações, consulte {{XREF_2}}.Empregue a função
e_regexpara analisar os logs de erro correspondentes com uma expressão regular. Para mais informações, consulte {{XREF_3}}.Exclua o campo
messageoriginal e entregue os dados analisados ao Logstore do service apropriado. Para mais informações, consulte {{XREF_4}} e {{XREF_5}}.Para mais informações, consulte {{XREF_6}}.
Syntax analysis
O exemplo a seguir demonstra como analisar um log de erro do SLS usando uma expressão regular:
A sintaxe completa de transformação é a seguinte:
e_switch(
regex_match(v("message"), r"LogException"),
e_compose(
e_regex(
"message",
"(?P<data_time>\S+\s\S+)\s(?P<error_code>[a-zA-Z]+)\s(?P<status>[0-9]+)\scom\.aliyun\.openservices\.log\.exception\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9:,\-\s]+)\.(\s+\S+\s\S+){5}\s+\S+\scom\.aliyun\.openservices\.log\.Client\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java\:(?P<error_line>[0-9]+)\)",
),
e_drop_fields("message"),
e_output("sls-error"),
),
regex_match(v("message"), r"OSSException"),
e_compose(
e_regex(
"message",
"(?P<data_time>\S+\s\S+)\scom\.aliyun\.oss\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9,\s]+)\.\n\[ErrorCode\]\:\s(?P<error_code>[a-zA-Z]+)\n\[RequestId\]\:\s(?P<request_id>[a-zA-Z0-9]+)\n\[HostId\]\:\s(?P<host_id>[a-zA-Z-.]+)\n\S+\n\S+(\s\S+){3}\n\s+\S+\s+(.+)(\s+\S+){24}\scom\.aliyun\.oss\.OSSClient\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java:(?P<error_line>[0-9]+)\)",
),
e_drop_fields("message"),
e_output("oss-error"),
),
)
Etapa 2: Criar um job de transformação de dados
-
Acesse a página de transformação de dados.
Na seção Projects, clique no projeto desejado.
Na aba , clique no Logstore desejado.
Na página de consulta e análise, clique em Data Transformation.
-
No canto superior direito da página, selecione um intervalo de tempo para os dados de log.
Certifique-se de que haja logs disponíveis na aba Raw Logs.
-
No editor, insira a instrução de transformação de dados.
e_switch( regex_match(v("message"), r"LogException"), e_compose( e_regex( "message", "(?P<data_time>\S+\s\S+)\s(?P<error_code>[a-zA-Z]+)\s(?P<status>[0-9]+)\scom\.aliyun\.openservices\.log\.exception\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9:,\-\s]+)\.(\s+\S+\s\S+){5}\s+\S+\scom\.aliyun\.openservices\.log\.Client\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java\:(?P<error_line>[0-9]+)\)", ), e_drop_fields("message"), e_output("sls-error"), ), regex_match(v("message"), r"OSSException"), e_compose( e_regex( "message", "(?P<data_time>\S+\s\S+)\scom\.aliyun\.oss\.(?P<product_exception>[a-zA-Z]+)\:(?P<error_message>[a-zA-Z0-9,\s]+)\.\n\[ErrorCode\]\:\s(?P<error_code>[a-zA-Z]+)\n\[RequestId\]\:\s(?P<request_id>[a-zA-Z0-9]+)\n\[HostId\]\:\s(?P<host_id>[a-zA-Z-.]+)\n\S+\n\S+(\s\S+){3}\n\s+\S+\s+(.+)(\s+\S+){24}\scom\.aliyun\.oss\.OSSClient\.(?P<method>[a-zA-Z]+)\S+\s+\S+\stransformEvent\.main\(transformEvent\.java:(?P<error_line>[0-9]+)\)", ), e_drop_fields("message"), e_output("oss-error"), ), ) -
Clique em Preview Data.
__source__: xxx __tag__:__client_ip__: xxx __tag__:__receive_time__: 1590978615 __topic__: data_time: 2020-05-16 18:30:06 error_code: AccessDenied error_line: 399 error_message: You are forbidden to list buckets host_id: xxx.oss-cn-hangzhou.aliyuncs.com method: getBucket product_exception: OSSException request_id: YGYLUM9LG2USA6M7HYUBT1L0 -
Crie o job de transformação de dados.
Clique em Save as Transformation Job.
-
No painel Create Data Transformation Job, configure os parâmetros a seguir e clique em OK.
Parâmetro
Descrição
Job name
Nome do job de transformação de dados. Por exemplo, insira test.
Authorization method
Selecione Default Role para conceder permissões de leitura de dados do Logstore de source.
Storage target
Target name
Nome do destino de armazenamento. Por exemplo, insira sls-error e oss-error.
Target region
Região do projeto de destino. Por exemplo, selecione China (Hangzhou).
Target project
Projeto de destino para os dados transformados.
Target store
Logstore de destino para os dados transformados. Por exemplo, insira sls-error e oss-error.
Authorization method
Selecione default role para conceder permissões de escrita dos resultados da transformação de dados no Logstore de destino.
Processing range
Time range
Selecione All para o intervalo de tempo.
Após a criação do job de transformação de dados, o Simple Log Service gera automaticamente um painel para o job. É possível visualizar as métricas do job nesse painel.
O gráfico Exception Detail exibe quais entradas de log falharam na análise, auxiliando no ajuste da expressão regular.
Um log de nível WARNING indica uma falha de análise que não interrompe o job.
Um log de nível ERROR interrompe o job. Identifique e resolva o problema e modifique a expressão regular até que o job consiga analisar todos os tipos de logs de erro.
Etapa 3: Analisar dados de logs de erro
Depois que os logs de erro brutos forem transformados, analise os dados estruturados. O exemplo a seguir utiliza logs de erro Java do Simple Log Service.
-
Na seção Projects, clique no projeto desejado.

-
Na aba , clique no Logstore desejado.

-
Na caixa de pesquisa, insira uma instrução de consulta.
-
Contar a quantidade de erros por método.
* | SELECT COUNT(method) as m_ct, method GROUP BY method -
Identificar a mensagem de erro mais comum para o método
PutLogs.* | SELECT error_message,COUNT(error_message) as ct_msg, method WHERE method LIKE 'PutLogs' GROUP BY error_message,method -
Contar as ocorrências de cada código de erro.
* | SELECT error_code,COUNT(error_code) as count_code GROUP BY error_code -
Criar uma linha do tempo de erros para visualizar informações de erros de chamadas de API em tempo real.
* | SELECT date_format(data_time, '%Y-%m-%d %H:%m:%s') as date_time,status,product_exception,error_line, error_message,method ORDER BY date_time desc
-
-
Clique em 15Minutes(Relative) para definir o intervalo de tempo da consulta.
É possível especificar um tempo relativo, um período fixo ou um intervalo de tempo personalizado.
NotaO resultado da consulta pode apresentar uma margem de erro de até um minuto.
Clique em Search & Analyze para visualizar os resultados da consulta e análise.