Simple Log Service collecte les journaux d'erreurs Java provenant des services Alibaba Cloud et les traite par transformation de données. Cette approche vous aide à diagnostiquer efficacement les erreurs dans des contextes de big data et de forte concurrence.
Prérequis
Les journaux d'erreurs Java issus de SLS, OSS, SLB et ApsaraDB RDS sont collectés et stockés dans un Logstore nommé cloud_product_error_log. Pour plus d'informations, consultez la rubrique Utiliser Logtail pour collecter les journaux.
Cas d'utilisation
Imaginons que vous ayez développé une application Java nommée Application A, qui s'appuie sur plusieurs services Alibaba Cloud tels qu'OSS et SLS. Vous stockez les journaux d'erreurs Java générés par les appels API vers ces services dans un Logstore appelé cloud_product_error_log, situé dans la région Chine (Hangzhou). Afin de corriger rapidement les dysfonctionnements, vous analysez régulièrement ces journaux d'erreurs via Simple Log Service.
L'objectif est d'extraire l'horodatage, le code d'erreur, le code de statut, les informations sur le service, le message d'erreur, la méthode de requête et le numéro de ligne de l'erreur à partir des journaux collectés, puis de stocker ces données structurées dans le Logstore dédié à chaque service pour faciliter l'analyse.
Voici un exemple de journal brut :
__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)
Flux de travail
Logtail collecte les journaux d'erreurs de l'Application A et les envoie vers un Logstore nommé cloud_product_error_log. Ces journaux sont ensuite traités par transformation de données avant d'être acheminés vers les Logstores respectifs pour analyse.
Concevez une instruction de transformation de données : analysez la structure des données et rédigez l'instruction de transformation appropriée.
Créez une tâche de transformation de données : distribuez les journaux vers les Logstores en fonction du service concerné pour permettre l'analyse des erreurs.
Interrogez et analysez les données : examinez les journaux d'erreurs présents dans le Logstore de chaque service.
Étape 1 : Concevoir une instruction de transformation de données
Processus de transformation
Pour analyser les journaux d'erreurs :
Extrayez l'horodatage, le code d'erreur, le code de statut, les informations sur le service, le message d'erreur, la méthode de requête et le numéro de ligne de l'erreur depuis le champ
message.Stockez les journaux d'erreurs dans le Logstore dédié à chaque service.

Logique de transformation
Analysez l'horodatage, le code d'erreur, le code de statut, les informations sur le service, le message d'erreur, la méthode de requête et le numéro de ligne de l'erreur présents dans les journaux bruts, puis concevez une expression régulière capable d'extraire ces champs.
Référence syntaxique
Utilisez la fonction
regex_matchpour vérifier si une entrée de journal contientLogException. Pour plus de détails, consultez la rubrique regex_match.Si un journal correspond à
LogException, il est traité selon les règles d'analyse des journaux d'erreurs SLS. S'il correspond àOSSException, il suit les règles dédiées aux journaux d'erreurs OSS. Pour plus d'informations, voir e_switch.Servez-vous de la fonction
e_regexpour analyser les journaux d'erreurs correspondants à l'aide d'une expression régulière. Consultez la rubrique e_regex pour plus de détails.Supprimez le champ
messaged'origine et acheminez les données analysées vers le Logstore du service approprié. Reportez-vous aux rubriques e_drop_fields et e_output.Pour approfondir le sujet, consultez la section Groupes dans les expressions régulières.
Analyse syntaxique
L'exemple suivant illustre l'analyse d'un journal d'erreurs SLS à l'aide d'une expression régulière :
La syntaxe complète de transformation se présente comme suit :
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"),
),
)
Étape 2 : Créer une tâche de transformation de données
-
Accédez à la page de transformation de données.
Dans la section Projects, cliquez sur le projet souhaité.
Sous l'onglet , cliquez sur le Logstore concerné.
Sur la page d'interrogation et d'analyse, cliquez sur Data Transformation.
-
Dans le coin supérieur droit de la page, sélectionnez une plage horaire pour les données de journal.
Assurez-vous que des journaux sont disponibles sous l'onglet Raw Logs.
-
Dans l'éditeur, saisissez l'instruction de transformation de données.
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"), ), ) -
Cliquez sur 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 -
Créez la tâche de transformation de données.
Cliquez sur Save as Transformation Job.
-
Dans le panneau Create Data Transformation Job, configurez les paramètres suivants, puis cliquez sur OK.
Parameter
Description
Job name
Le nom de la tâche de transformation de données. Par exemple, saisissez test.
Authorization method
Sélectionnez Default Role pour accorder les autorisations nécessaires à la lecture des données depuis le Logstore source.
Storage target
Target name
Le nom de la cible de stockage. Par exemple, saisissez sls-error et oss-error.
Target region
Sélectionnez la région du projet de destination. Par exemple, choisissez China (Hangzhou).
Target project
Le projet de destination pour les données transformées.
Target store
Le Logstore de destination pour les données transformées. Par exemple, saisissez sls-error et oss-error.
Authorization method
Sélectionnez default role pour accorder les autorisations nécessaires à l'écriture des résultats de la transformation dans le Logstore de destination.
Processing range
Time range
Sélectionnez All pour la plage horaire.
Une fois la tâche de transformation créée, Simple Log Service génère automatiquement un tableau de bord associé. Vous pouvez y consulter les métriques relatives à la tâche.
Le graphique Exception Detail identifie les entrées de journal dont l'analyse a échoué, ce qui vous permet d'affiner votre expression régulière.
Un journal de niveau WARNING signale un échec d'analyse qui n'interrompt pas l'exécution de la tâche.
Un journal de niveau ERROR interrompt la tâche. Identifiez et résolvez le problème, puis ajustez l'expression régulière jusqu'à ce que la tâche puisse analyser tous les types de journaux d'erreurs.
Étape 3 : Analyser les données des journaux d'erreurs
Une fois les journaux d'erreurs bruts transformés, vous pouvez exploiter les données structurées. L'exemple ci-dessous s'appuie sur des journaux d'erreurs Java issus de Simple Log Service.
-
Dans la section Projects, cliquez sur le projet souhaité.

-
Sous l'onglet , cliquez sur le Logstore concerné.

-
Dans la zone de recherche, saisissez une instruction d'interrogation.
-
Comptez le nombre d'erreurs pour chaque méthode.
* | SELECT COUNT(method) as m_ct, method GROUP BY method -
Recherchez le message d'erreur le plus fréquent pour la méthode
PutLogs.* | SELECT error_message,COUNT(error_message) as ct_msg, method WHERE method LIKE 'PutLogs' GROUP BY error_message,method -
Comptez les occurrences de chaque code d'erreur.
* | SELECT error_code,COUNT(error_code) as count_code GROUP BY error_code -
Créez une chronologie des erreurs afin de visualiser en temps réel les informations relatives aux erreurs d'appels API.
* | 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
-
-
Cliquez sur 15Minutes(Relative) pour définir la plage horaire de l'interrogation.
Vous pouvez spécifier une heure relative, un créneau horaire ou une plage personnalisée.
RemarqueLe résultat de l'interrogation peut présenter une marge d'erreur allant jusqu'à une minute.
Cliquez sur Search & Analyze pour afficher les résultats de l'interrogation et de l'analyse.