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

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

最終更新日:Aug 28, 2024

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

前提条件

Simple Log Service、Object Storage Service (OSS) 、Server Load Balancer (SLB) 、およびApsaraDB RDSのJavaエラーログが収集され、cloud_product_error_logという名前のLogstoreに保存されます。 詳細については、「Logtailを使用したログの収集」をご参照ください。

シナリオ

たとえば、OSSやSimple Log Serviceなどの複数のAlibaba Cloudサービスを使用して、application aという名前のJavaアプリケーションを開発したとします。 中国 (杭州) リージョンにcloud_product_erro_logという名前のLogstoreを作成し、Alibaba CloudサービスのAPI操作を呼び出したときに生成されるJavaエラーログを保存している必要があります。 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)

手順

アプリケーションAのエラーログは、Logtailを使用して収集され、cloud_product_error_log Logstoreに保存されます。 次に、エラーログが変換され、変換されたログがエラー分析のために各クラウドサービスのLogstoreに送信されます。 手順は次の手順で構成されています。

image
  1. データ変換ステートメントを設計する: このステップでは、変換ロジックを分析し、変換ステートメントを記述します。

  2. データ変換ジョブを作成する: このステップでは、エラー分析のためにクラウドサービスの異なるログストアにログを送信します。

  3. データの照会と分析: このステップでは、各クラウドサービスのLogstoreでエラーログを分析します。

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

変換プロシージャ

エラーログを簡単に分析するには、次の操作を完了する必要があります。

  1. ログ時間、エラーコード、ステータスコード、サービス名、エラーメッセージ、リクエストメソッド、およびエラー行番号をメッセージフィールドから抽出します。

  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_outputおよびe_coutput」をご参照ください。

  5. 詳細については、正規表現のグループセクションをご参照ください。

Transformationステートメントの構文

次の例は、データ変換ステートメントの特定の構文を示しています。

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. On theログストレージ > ログストアタブで、管理する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] をクリックします。 下表にパラメーターを示します。

      パラメーター

      説明

      ジョブ名

      データ変換ジョブの名前。 例: テスト

      権限付与方法

      [デフォルトロール] を選択して、ソースLogstoreからデータを読み取ります。

      ストレージターゲット

      ターゲット名

      保存先の名前。 例: sls-errorまたはoss-error。

      対象リージョン

      ターゲットプロジェクトが存在するリージョン。 例: 中国 (杭州) 。

      対象プロジェクト

      ターゲットLogstoreが属するプロジェクトの名前。

      ターゲットストア

      宛先Logstoreの名前。 例: sls-errorまたはoss-error。

      権限付与方法

      [デフォルトロール] を選択して、変換結果を宛先Logstoreに書き込みます。

      処理範囲

      時間範囲

      [すべて] を選択します。

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

    [例外の詳細] グラフで、解析に失敗したログを表示し、正規表現を変更できます。

    • ログの解析に失敗した場合は、ログの重大度を警告として指定してログを報告できます。 データ変換ジョブは引き続き実行されます。

    • ログの重大度をERRORに指定してログをレポートすると、データ変換ジョブの実行が停止します。 この場合、データ変換ジョブが必要なすべてのタイプのエラーログを解析できるようになるまで、エラーの原因を特定し、正規表現を変更する必要があります。

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

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

  1. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  2. 左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。

    image

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

    • 各リクエストメソッドのエラー数を計算するには、次のクエリステートメントを実行します。

      * | SELECT COUNT(method) as m_ct, method GROUP BY method
    • PutLogs API操作の各エラーメッセージの発生回数を計算するには、次のクエリ文を実行します。

      * | 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
    • 各リクエストメソッドのエラー情報をログ時間で照会するには、次のクエリステートメントを実行します。

      * | 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. 検索&分析クエリと分析の結果を表示します。