すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Java エラーログの解析

最終更新日:Jun 17, 2026

ビッグデータや高同時実行のシナリオで Java エラーログを分析することは、O&M コストの削減に役立ちます。Simple Log Service (SLS) は、Alibaba Cloud サービスから Java エラーログを収集し、データ変換を使用して解析します。

前提条件

SLS、OSS、SLB、および ApsaraDB RDS からの Java エラーログが収集され、`cloud_product_error_log` という名前の Logstore に保存されていること。詳細については、「Logtail を使用したログの収集」をご参照ください。

利用シーン

例えば、OSS や SLS などの複数の Alibaba Cloud サービスを使用して、アプリケーション A という名前の Java アプリケーションを開発したとします。これらのサービスへの API 呼び出しによって生成された Java エラーログを保存するために、中国 (杭州) リージョンに `cloud_product_error_log` という名前の Logstore を作成しました。Java のエラーを効率的に修正するには、SLS を使用して定期的にエラーログを分析する必要があります。

これらの要件を満たすために、収集されたログからログ時刻、エラーコード、ステータスコード、サービス情報、エラーメッセージ、リクエストメソッド、およびエラー行番号を解析します。その後、解析されたログを各サービスの Logstore に保存してエラー分析を行います。

以下は生ログのサンプルです:

__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 からエラーログを収集し、`cloud_product_error_log` という名前の Logstore に送信します。その後、ログはデータ変換を使用して処理され、分析のためにそれぞれの Logstore に配信されます。全体的なワークフローは次のとおりです:

  1. データ変換文の設計:データを分析し、変換文を作成します。

  2. データ変換ジョブの作成:エラー分析のために、サービスに基づいて Logstore にログを配信します。

  3. データのクエリと分析:各サービスの Logstore でエラーログを分析します。

ステップ 1:データ変換文の設計

変換プロセス

エラーログを分析するには:

  1. `message` フィールドからタイムスタンプ、エラーコード、ステータスコード、サービス情報、エラーメッセージ、リクエストメソッド、およびエラー行番号を抽出します。

  2. エラーログを各サービスの Logstore に保存します。

etl-needs

変換ロジック

生ログ内のタイムスタンプ、エラーコード、ステータスコード、サービス情報、エラーメッセージ、リクエストメソッド、およびエラー行番号を分析します。次に、これらのフィールドを抽出するための正規表現を設計します。etl_logic

構文リファレンス

  1. `regex_match` 関数を使用して、ログエントリに `LogException` が含まれているかどうかを確認します。詳細については、「regex_match」をご参照ください。

  2. ログが `LogException` に一致する場合、SLS エラーログの解析ルールに従って処理されます。`OSSException` に一致する場合、OSS エラーログのルールに従って処理されます。詳細については、「e_switch」をご参照ください。

  3. `e_regex` 関数を使用して、対応するエラーログを正規表現で解析します。詳細については、「e_regex」をご参照ください。

  4. 元の `message` フィールドを削除し、解析されたデータを適切なサービスの Logstore に配信します。詳細については、「e_drop_fields」および「e_output」をご参照ください。

  5. 詳細については、「正規表現のグループ」をご参照ください。

構文分析

次の例は、正規表現を使用して SLS エラーログを解析する方法を示しています:

完全な変換構文は次のとおりです:

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"),
    ),
)

ステップ 2:データ変換ジョブの作成

  1. データ変換ページに移動します。

    1. プロジェクトセクションで、目的のプロジェクトをクリックします。

    2. [ログストレージ > Logstores] タブで、目的の Logstore をクリックします。

    3. クエリと分析ページで、[データ処理] をクリックします。

  2. ページの右上隅で、ログデータの時間範囲を選択します。

    [Rawデータ] タブでログが利用可能であることを確認してください。

  3. エディターに、データ変換文を入力します。

    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"),
        ),
    )
  4. [データのプレビュー] をクリックします。

    __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
  5. データ変換ジョブを作成します。

    1. [データ処理の保存] をクリックします。

    2. [データ処理タスクの作成] パネルで、次のパラメーターを設定し、[OK] をクリックします。

      パラメーター

      説明

      ジョブ名

      データ変換ジョブの名前。例えば、`test` と入力します。

      認証方式

      [Default Role] を選択して、ソース Logstore からデータを読み取る権限を付与します。

      ストレージターゲット

      ターゲット名

      ストレージターゲットの名前。例えば、`sls-error` と `oss-error` を入力します。

      ターゲットリージョン

      送信先プロジェクトのリージョンを選択します。例えば、中国 (杭州) を選択します。

      ターゲットプロジェクト

      変換されたデータの送信先プロジェクト。

      ターゲットストア

      変換されたデータの送信先 Logstore。例えば、`sls-error` と `oss-error` を入力します。

      認証方式

      [デフォルトロール] を選択して、データ変換結果を送信先 Logstore に書き込む権限を付与します。

      処理範囲

      時間範囲

      時間範囲として [すべて] を選択します。

    データ変換ジョブを作成すると、SLS はデフォルトでジョブのダッシュボードを作成します。ダッシュボードでジョブのメトリックを表示できます。

    [例外詳細] チャートには、解析に失敗したログエントリが表示され、正規表現の改良に役立ちます。

    • WARNING レベルのログは、ジョブを中断しない解析の失敗を示します。

    • ERROR レベルのログはジョブを中断します。問題を特定して解決し、ジョブがすべての種類のエラーログを解析できるようになるまで正規表現を修正してください。

ステップ 3:エラーログデータの分析

生のエラーログが変換された後、構造化データを分析できます。このセクションでは、SLS の Java エラーログを例として使用します。

  1. プロジェクトセクションで、目的のプロジェクトをクリックします。

    image

  2. [ログストレージ > Logstores] タブで、目的の Logstore をクリックします。

    image

  3. 検索ボックスに、クエリ文を入力します。

    • 各メソッドのエラー数をカウントします。

      * | SELECT COUNT(method) as m_ct, method GROUP BY method
    • `PutLogs` メソッドで最も一般的なエラーメッセージを検索します。

      * | SELECT error_message,COUNT(error_message) as ct_msg, method WHERE method LIKE 'PutLogs' GROUP BY error_message,method
    • 各エラーコードの発生回数をカウントします。

      * | SELECT error_code,COUNT(error_code) as count_code GROUP BY error_code
    • エラーのタイムラインを作成して、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
  4. [15分 (相対)] をクリックして、クエリの時間範囲を設定します。

    相対時間、時間枠、またはカスタム時間範囲を指定できます。

    説明

    クエリ結果には最大 1 分の誤差が生じる場合があります。

  5. [検索と分析] をクリックして、クエリと分析の結果を表示します。