Simple Log Service recopila registros de errores de Java de los servicios de Alibaba Cloud y los analiza mediante la transformación de datos, lo que le permite analizar errores de forma eficiente en escenarios de big data y alta concurrencia.
Requisitos previos
Los registros de errores de Java de SLS, OSS, SLB y ApsaraDB RDS se recopilan y almacenan en un logstore llamado cloud_product_error_log. Para obtener más información, consulte Use Logtail to collect logs.
Casos de uso
Por ejemplo, suponga que ha desarrollado una aplicación Java llamada Aplicación A que utiliza varios servicios de Alibaba Cloud, como OSS y SLS. Los registros de errores de Java generados por las llamadas a la API de estos servicios se almacenan en un logstore llamado cloud_product_error_log en la región China (Hangzhou). Para resolver los errores de Java de manera eficiente, analice los registros de errores a intervalos regulares mediante Simple Log Service.
Analice la hora del registro, el código de error, el código de estado, la información del servicio, el mensaje de error, el método de solicitud y el número de línea del error a partir de los registros recopilados; después, almacene los registros analizados en el logstore de cada servicio para su análisis.
A continuación se muestra un ejemplo de registro sin procesar:
__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)
Flujo de trabajo
Logtail recopila los registros de errores de la Aplicación A y los envía a un logstore llamado cloud_product_error_log. Posteriormente, los registros se procesan mediante la transformación de datos y se entregan a los logstores correspondientes para su análisis.
Diseñe una instrucción de transformación de datos: analice los datos y escriba la instrucción de transformación.
Cree un trabajo de transformación de datos: distribuya los registros en los logstores según el servicio para realizar el análisis de errores.
Consulte y analice los datos: examine los registros de errores en el logstore de cada servicio.
Paso 1: Diseñar una instrucción de transformación de datos
Transformation process
Para analizar los registros de errores:
Extraiga la marca de tiempo, el código de error, el código de estado, la información del servicio, el mensaje de error, el método de solicitud y el número de línea del error del campo
message.Almacene los registros de errores en el logstore de cada servicio.

Transformation logic
Analice la marca de tiempo, el código de error, el código de estado, la información del servicio, el mensaje de error, el método de solicitud y el número de línea del error en los registros sin procesar; luego, diseñe una expresión regular para extraer estos campos.
Syntax reference
Utilice la función
regex_matchpara comprobar si una entrada de registro contieneLogException. Para obtener más información, consulte regex_match.Si un registro coincide con
LogException, se procesa según las reglas de análisis para registros de errores de SLS. Si coincide conOSSException, se procesa según las reglas para registros de errores de OSS. Para obtener más información, consulte e_switch.Utilice la función
e_regexpara analizar los registros de errores correspondientes con una expresión regular. Para obtener más información, consulte e_regex.Elimine el campo
messageoriginal y entregue los datos analizados al logstore del servicio correspondiente. Para obtener más información, consulte e_drop_fields y e_output.Para obtener más información, consulte Groups in regular expressions.
Syntax analysis
El siguiente ejemplo muestra cómo analizar un registro de errores de SLS mediante una expresión regular:
La sintaxis completa de transformación es la siguiente:
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"),
),
)
Paso 2: Crear un trabajo de transformación de datos
-
Vaya a la página de transformación de datos.
En la sección Projects, haga clic en el proyecto deseado.
En la pestaña , haga clic en el logstore deseado.
En la página de consulta y análisis, haga clic en Data Transformation.
-
En la esquina superior derecha de la página, seleccione un intervalo de tiempo para los datos de registro.
Asegúrese de que haya registros disponibles en la pestaña Raw Logs.
-
En el editor, introduzca la instrucción de transformación de datos.
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"), ), ) -
Haga clic en 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 -
Cree el trabajo de transformación de datos.
Haga clic en Save as Transformation Job.
-
En el panel Create Data Transformation Job, configure los siguientes parámetros y haga clic en OK.
Parámetro
Descripción
Job name
Nombre del trabajo de transformación de datos. Por ejemplo, introduzca test.
Authorization method
Seleccione Default Role para otorgar permisos de lectura de datos del logstore de origen.
Storage target
Target name
Nombre del destino de almacenamiento. Por ejemplo, introduzca sls-error y oss-error.
Target region
Seleccione la región del proyecto de destino. Por ejemplo, seleccione China (Hangzhou).
Target project
Proyecto de destino para los datos transformados.
Target store
Logstore de destino para los datos transformados. Por ejemplo, introduzca sls-error y oss-error.
Authorization method
Seleccione default role para otorgar permisos de escritura de los resultados de la transformación de datos en el logstore de destino.
Processing range
Time range
Seleccione All para el intervalo de tiempo.
Una vez creado el trabajo de transformación de datos, Simple Log Service genera un panel para el trabajo de forma predeterminada. Puede consultar las métricas del trabajo en dicho panel.
El gráfico Exception Detail muestra qué entradas de registro no se pudieron analizar, lo que le ayuda a ajustar su expresión regular.
Un registro de nivel WARNING indica un fallo de análisis que no interrumpe el trabajo.
Un registro de nivel ERROR interrumpe el trabajo. Identifique y resuelva el problema; luego, modifique la expresión regular hasta que el trabajo pueda analizar todos los tipos de registros de errores.
Paso 3: Analizar datos de registros de errores
Después de transformar los registros de errores sin procesar, puede analizar los datos estructurados. El siguiente ejemplo utiliza registros de errores de Java de Simple Log Service.
-
En la sección Projects, haga clic en el proyecto deseado.

-
En la pestaña , haga clic en el logstore deseado.

-
En el cuadro de búsqueda, introduzca una instrucción de consulta.
-
Cuente el número de errores por cada método.
* | SELECT COUNT(method) as m_ct, method GROUP BY method -
Encuentre el mensaje de error más común para el método
PutLogs.* | SELECT error_message,COUNT(error_message) as ct_msg, method WHERE method LIKE 'PutLogs' GROUP BY error_message,method -
Cuente las apariciones de cada código de error.
* | SELECT error_code,COUNT(error_code) as count_code GROUP BY error_code -
Cree una línea temporal de errores para ver la información de errores de llamadas a la API en tiempo 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
-
-
Haga clic en 15Minutes(Relative) para establecer el intervalo de tiempo de la consulta.
Puede especificar una hora relativa, un marco de tiempo o un intervalo de tiempo personalizado.
NotaEl resultado de la consulta puede tener un margen de error de hasta un minuto.
Haga clic en Search & Analyze para ver los resultados de la consulta y el análisis.