高い同時実行性を必要とするビッグデータシナリオでは、Java エラーログの分析と O&M ガイダンスにより、Java アプリケーションの O&M コストを削減できます。Simple Log Service を使用して、Alibaba Cloud サービスから Java エラーログを収集できます。このトピックでは、データ変換機能の新バージョンを使用して Java エラーログを解析する方法について説明します。
前提条件
Simple Log Service、Object Storage Service (OSS)、Server Load Balancer (SLB)、および ApsaraDB RDS の Java エラーログが収集され、cloud_product_error_log という名前のログストアに保存されます。詳細については、「Logtail を使用してログを収集する」をご参照ください。
シナリオ
たとえば、OSS や Simple Log Service など、複数の Alibaba Cloud サービスを使用して、アプリケーション A という名前の Java アプリケーションを開発したとします。中国 (杭州) リージョンに cloud_product_erro_log という名前のログストアを作成して、Alibaba Cloud サービスの API 操作を呼び出したときに生成される Java エラーログを保存します。Java エラーを効率的に修正するには、Simple Log Service を使用して、一定の間隔で Java エラーログを分析する必要があります。
上記の要件を満たすには、収集されたログからログ時間、エラーコード、状態コード、サービス名、エラーメッセージ、リクエストメソッド、およびエラー行番号を解析し、解析されたログを各クラウドサービスのログストアに送信してエラー分析を行う必要があります。
生のログの例を次に示します。
__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)手順
Logtail を使用してアプリケーション A からエラーログを収集し、収集したログを特定のログストアに保存できます。次に、Simple Log Service Processing Language (SPL) を使用して、収集されたログを処理し、Alibaba Cloud サービスのログストアに出荷できます。最後に、各 Alibaba Cloud サービスのエラーログを分析できます。手順は次のとおりです。
SPL 文を設計する: 変換ロジックを分析し、SPL 文を作成します。
データ変換ジョブを作成する: 各 Alibaba Cloud サービスのエラー分析ログストアにログを配信します。
データをクエリおよび分析する: 各 Alibaba Cloud サービスのエラー分析ログストア内のログを分析します。
ステップ 1: SPL 文を設計する
SPL プロセス
エラーログを簡単に分析するには、次の操作を実行する必要があります。
message フィールドからログ時間、エラーコード、状態コード、サービス名、エラーメッセージ、リクエストメソッド、およびエラー行番号を抽出します。
各クラウドサービスのログストアにエラーログを送信します。

SPL ロジック分析
この場合、生のログフィールドのログ時間、エラーコード、状態コード、サービス名、エラーメッセージ、リクエストメソッド、およびエラー行番号を分析し、抽出する各フィールドに正規表現を設計する必要があります。
構文 の説明
regexp_like 関数を使用して、LogException を含むログを照合します。ログに LogException が含まれている場合、ログは Simple Log Service エラーログの変換ルールに基づいて変換されます。ログに OSSException が含まれている場合、ログは OSS エラーログの変換ルールに基づいて変換されます。詳細については、「where」をご参照ください。
parse-regexp 関数を使用して、各 Alibaba Cloud サービスのエラーログを解析します。
project-away 関数を使用して、元の message フィールドを削除します。次のコードは、SPL 構文に基づいて正規表現を使用して Simple Log Service エラーログを解析する方法を示しています。
.let a = * | where regexp_like(message, '.*LogException.*') | parse-regexp message,'(\S+\s\S+)\s([a-zA-Z]+)\s([0-9]+)\scom\.aliyun\.openservices\.log\.exception\.([a-zA-Z]+)\:([a-zA-Z0-9:,\-\s]+)\.\s+(\S+\s+\S+\s+){6}\S+\s+com\.aliyun\.openservices\.log\.Client\.([a-zA-Z]+)\S+\s+\S+\s+transformEvent\.main\(transformEvent\.java\:([0-9]+)\)' as data_time,error_code,status,product_exception,error_message,temp,method,error_line | project-away message,temp; .let b = * | where regexp_like(message, '.*OSSException.*') | parse-regexp message,'(\S+\s\S+)\s+com\.aliyun\.oss\.([a-zA-Z]+)\:([a-zA-Z0-9,\s]+)\.\s+\[ErrorCode\]\:\s+([a-zA-Z]+)\s+\[RequestId\]\:\s([a-zA-Z0-9]+)\s+\[HostId\]\:\s+(\S+)\s+com\.aliyun\.oss\.OSSClient\.([a-zA-Z]+)\s+transformEvent\.main\(transformEvent\.java:([0-9]+)\)' as data_time,product_exception,error_message,error_code,request_id,host_id,method,error_line| project-away message; $a; $b;結果セット a の例:
__source__:192.*.*.* __tag__:__client_ip__:203.*.*.* __tag__:__receive_time__:1591957901 __topic__: data_time:2021-05-15 16:43:35 error_code:ParameterInvalid error_line:2559 error_message:The body is not valid json string method:ErrorCheck product_exception:LogException status:400結果セット b の例:
__source__:192.*.*.* __tag__:__client_ip__:203.*.*.* __tag__:__receive_time__:1591957988 __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:wwduhdw-cn-hangzhou.aliyuncs.com method:getBucket product_exception:OSSException request_id:YGYLQJLSLNUS2US1131DSQKW
ステップ 2: データ変換ジョブを作成する
Simple Log Service コンソール にログインします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。

タブで、管理するログストアをクリックし、 にポインターを移動し、
アイコンをクリックしてデータ変換ジョブを作成します。
[生のログ] タブにログが存在することを確認し、[テストデータの追加] をクリックします。

[テストデータ] タブで、追加したテストデータを表示します。

コードエディタに、次のデータ変換ステートメントを入力します。次に、[SPL のデバッグ] をクリックします。 [変換結果] タブで、解析後の結果をプレビューできます。結果セット a には解析された Simple Log Service エラーログが表示され、結果セット b には解析された OSS エラーログが表示されます。
.let a = * | where regexp_like(message, '.*LogException.*') | parse-regexp message,'(\S+\s\S+)\s([a-zA-Z]+)\s([0-9]+)\scom\.aliyun\.openservices\.log\.exception\.([a-zA-Z]+)\:([a-zA-Z0-9:,\-\s]+)\.\s+(\S+\s+\S+\s+){6}\S+\s+com\.aliyun\.openservices\.log\.Client\.([a-zA-Z]+)\S+\s+\S+\s+transformEvent\.main\(transformEvent\.java\:([0-9]+)\)' as data_time,error_code,status,product_exception,error_message,temp,method,error_line | project-away message,temp; .let b = * | where regexp_like(message, '.*OSSException.*') | parse-regexp message,'(\S+\s\S+)\s+com\.aliyun\.oss\.([a-zA-Z]+)\:([a-zA-Z0-9,\s]+)\.\s+\[ErrorCode\]\:\s+([a-zA-Z]+)\s+\[RequestId\]\:\s([a-zA-Z0-9]+)\s+\[HostId\]\:\s+(\S+)\s+com\.aliyun\.oss\.OSSClient\.([a-zA-Z]+)\s+transformEvent\.main\(transformEvent\.java:([0-9]+)\)' as data_time,product_exception,error_message,error_code,request_id,host_id,method,error_line| project-away message; $a; $b;
[変換ジョブとして保存 (新バージョン)] をクリックします。 [データ変換ジョブの作成 (新バージョン)] パネルで、Simple Log Service エラーログを保存する場合は [結果セットに書き込む] パラメーターを a に設定し、OSS エラーログを保存する場合は b に設定します。詳細については、「パラメーターの説明」をご参照ください。

ステップ 3: 変換結果を表示する
データ変換ジョブで結果セット a に指定したログストアに移動して、Simple Log Service エラーログを表示します。ログストアでは、クエリ構文 を使用してログを分析できます。
