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

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

最終更新日:Mar 14, 2026

高同時実行数・ビッグデータを扱うシナリオにおいて、Java エラーログを効果的に解析することで、Java アプリケーションの運用・保守(O&M)コストを削減できます。Simple Log Service は、Alibaba Cloud サービスから Java エラーログを収集し、データ変換機能を用いて収集されたログを解析します。

前提条件

SLS、OSS、SLB、RDS の Java エラーログを収集し、Logstore 名 `cloud_product_error_log` に格納済みである必要があります。詳細については、「Logtail を使用したログの収集」をご参照ください。

シナリオ

たとえば、OSS や Simple Log Service などの複数の Alibaba Cloud サービスを利用する Java アプリケーション「Application A」を開発したとします。このアプリケーションが Alibaba Cloud サービスの API オペレーションを呼び出した際に生成される Java エラーログを、中国 (杭州) リージョンの Logstore `cloud_product_error_log` に格納しています。Java エラーを効率的に修正するため、Simple Log Service を用いて Java エラーログを定期的に分析できます。

これらの要件を満たすには、収集されたログからログ時刻、エラーコード、状態コード、サービス名、エラーメッセージ、リクエストメソッド、エラー発生行番号を抽出します。その後、抽出したログを各クラウドサービスに対応する 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 が Application A のエラーログを収集し、Logstore `cloud_product_error_log` に格納します。その後、エラーログをデータ変換し、変換後のログを各クラウドサービスに対応する Logstore へ送信してエラー分析を行います。全体の手順は以下のとおりです:

image
  1. データ変換ステートメントの設計:変換ロジックを分析し、変換ステートメントを作成します。

  2. データ変換ジョブの作成:ログを各クラウドサービスの Logstore へ送信し、エラー分析を行います。

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

ステップ 1:データ変換ステートメントの設計

変換手順

エラーログを容易に分析するため、以下の操作を行います:

  1. `message` フィールドからログ時刻、エラーコード、状態コード、サービス名、エラーメッセージ、リクエストメソッド、エラー発生行番号を抽出します。

  2. エラーログを各クラウドサービスに対応する Logstore へ送信します。

etl-needs

変換ロジックの分析

生ログフィールドからログ時刻、エラーコード、状態コード、サービス名、エラーメッセージ、リクエストメソッド、エラー発生行番号を分析できます。その後、各抽出対象フィールドに対して正規表現を設計します。etl_logic

構文の詳細

  1. `regex_match` 関数を使用して、`LogException` を含むログをマッチさせます。詳細については、「regex_match」をご参照ください。

  2. ログが `LogException` にマッチした場合は、Simple Log Service のエラーログ解析ルールで処理します。ログが `OSSException` にマッチした場合は、OSS のエラーログ解析ルールで処理します。詳細については、「e_switch」をご参照ください。

  3. `e_regex` 関数を使用して、各クラウドサービスのエラーログを解析します。詳細については、「e_regex」をご参照ください。

  4. メッセージフィールドを削除し、対応するプロダクトの Logstore にログを配信します。詳細については、「e_drop_fields」と「e_outputLogStoreut」をご参照ください。

  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. ログストレージ > Logstore タブで、対象の Logstore をクリックします。

    3. クエリと分析ページで、データ変換 をクリックします。

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

    [生ログ] タブにログデータが存在することを確認してください。

  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. プレビュー データ をクリックします。

    预览

  5. データ変換ジョブを作成します。

    1. 変換ジョブとして保存 をクリックします。

    2. データ変換ジョブの作成 パネルで、パラメーターを設定し、OK をクリックします。パラメーターの説明は以下の表をご覧ください。

      パラメーター

      説明

      ジョブ名

      データ変換ジョブの名前です。例:`test`。

      認証方法

      ソース Logstore からデータを読み取るには、デフォルトロール を選択します。

      ストレージターゲット

      ターゲット名

      ストレージ送信先の名前です。例:`sls-error` または `oss-error`。

      送信先リージョン

      送信先プロジェクトが存在するリージョンです。例:中国 (杭州)。

      対象プロジェクト

      データ変換結果を格納する対象プロジェクトの名前です。

      対象 Logstore

      データ変換結果を格納する送信先 Logstore の名前です。例:`sls-error` または `oss-error`。

      認証方法

      送信先 Logstore へ変換結果を書き込むには、デフォルトロール を選択します。

      処理範囲

      時間範囲

      すべて を選択します。

    データ変換ジョブを作成すると、Simple Log Service はデフォルトでそのジョブ専用のダッシュボードを作成します。ダッシュボード上でジョブのメトリックを確認できます。

    [例外詳細] チャートで、解析に失敗したログを表示できます。その後、正規表現を修正できます。

    • ログの解析に失敗した場合、ログの重大度を `WARNING` に設定してレポートできます。この場合、データ変換ジョブは継続して実行されます。

    • ログの重大度を `ERROR` に設定してレポートした場合、データ変換ジョブは停止します。この場合、エラーの原因を特定し、正規表現を修正して、すべての種類のエラーログを解析できるようにする必要があります。

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

生のエラーログが変換された後、分析を行うことができます。本例では、Simple Log Service の Java エラーログのみを分析します。

  1. [プロジェクト] セクションで、対象のプロジェクトをクリックします。

    image

  2. ログストレージ > Logstore タブで、対象の 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. クエリ/分析 をクリックして、クエリおよび分析結果を表示します。