このトピックでは、Log4jログを分析する方法について説明します。 この例では、電子商取引会社のログが分析される。
前提条件
Log4jログが収集されます。 詳細については、「Log4jログの収集」をご参照ください。
インデックスが作成されます。 詳細については、「インデックスの作成」をご参照ください。
この例で使用されるインデックスを次の図に示します。
背景情報
Apache Log4jは、ログ出力先をコンソール、ファイル、GUIコンポーネント、ソケットサーバー、NTイベントレコーダー、またはUNIX Syslogデーモンに設定できるオープンソースプロジェクトです。 Apache Log4jでは、各ログの出力形式を設定し、各ログのレベルを定義して、ログ生成をより詳細に管理することもできます。 上記の機能を構成するには、構成ファイルのみを使用する必要があります。 アプリケーションコードを変更する必要はありません。 Log4jは、次の主要コンポーネントで構成されます。
レイアウト
レイアウトは、ログを特定の形式にフォーマットするために使用されます。 共通レイアウトを次の表に示します。
レイアウト
説明
HTMLLayout
ログをHTMLテーブルとしてフォーマットします。
SimpleLayout
INFOレベルのログなど、単純な形式でログをフォーマットします。
PatternLayout
ログをカスタム形式で出力します。 要素の配置や形式 (タイムスタンプ、ログレベル、スレッド名、クラス名、メソッド名、ログデータなど) を指定できます。
Appenders
ログの宛先を定义するために、アプレットが使用されます。 異なる宛先にログを送信するように複数のアプレットを設定できます。 次の表に、共通のアペンダーを示します。
Appender
説明
ConsoleAppender
ログをコンソールに出力します。
FileAppender
ログをファイルに出力します。
DailyRollingFileAppender
毎日新しいファイルにログを出力します。
RollingFileAppender
ログを特定のサイズのファイルに出力します。 ファイルが指定されたサイズに達すると、システムは自動的にファイルの名前を変更し、新しいファイルを生成します。
JDBCAppender
ログをデータベースに格納します。
ロガー
ロガーは、ログのエントリポイントを定義し、ログ情報をキャプチャするために使用されます。 各ロガーには、その重要度または重大度に基づいてログレベルが割り当てられます。 Log4jは、以下のログレベルを定義する: OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、およびALL (優先度の降順でリストされる) 。 ログレベルは継承できます。 子クラスは、親クラスのすべてのログレベルを記録します。 次の表に、ログレベルを示します。
ログレベル
説明
オフ
すべてのログを無効にします。
致命的
アプリケーションを終了させる可能性のあるエラーイベントを示します。
ERROR
システムの実行に影響を与えないエラーイベントを示します。
WARN
潜在的なエラーを示します。
INFO
アプリケーションの実行に焦点を当てています。 ほとんどの場合、このログレベルは、ログが粗い方法で管理されるシナリオで使用されます。
デバッグ
診断を容易にします。 ほとんどの場合、このログレベルはアプリケーションのデバッグシナリオで使用されます。
トレース
プログラムの実行中に変数を出力し、実行プロセスを表示します。 このログレベルはプログラムのトレースに使用されます。
すべて
すべてのログを印刷します。
ロガーは複数のアペンダに対応できます。 アペンダーは1つのレイアウトにのみ対応できます。
この例では、企業は、eコマースプラットフォームに最適なソリューションを取得したいと考えています。 同社は、プラットフォームの安定性、システムエラー、データセキュリティ、行動データなどの情報を分析する必要があります。 行動データは、ログオン方法、ログオン時間、ログオン持続時間、閲覧されたページ、ページの滞留時間、平均注文時間、および消費レベルを含む。 Simple Log Serviceは、ログの保存と分析に役立つログ収集およびログ分析機能を提供します。 次の例は、Simple Log Serviceによって収集されるサンプルログを示しています。
次のログには、ログイン情報が記録されます。
level: INFO location: com.aliyun.log4jappendertest.Log4jAppenderBizDemo.login(Log4jAppenderBizDemo.java:38) message: User login successfully. requestID=id4 userID=user8 thread: main time: 2022-01-26T15:31+0000
次のログは購入情報を記録します。
level: INFO location: com.aliyun.log4jappendertest.Log4jAppenderBizDemo.order(Log4jAppenderBizDemo.java:46) message: Place an order successfully. requestID=id44 userID=user8 itemID=item3 amount=9 thread: main time: 2022-01-26T15:31+0000
手順
にログインします。Simple Log Serviceコンソール.
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。
検索ボックスにクエリステートメントを入力し、[過去15分] をクリックしてクエリ時間範囲を指定します。
詳細については、「手順1: クエリステートメントの入力」をご参照ください。
前の1時間以内に最も多くのエラーが発生した3つの位置を照会します。
level: ERROR | select location ,count(*) as count GROUP BY location ORDER BY count DESC LIMIT 3
過去15分以内に生成された各ログレベルのログ数を照会します。
* | select level ,count(*) as count GROUP BY level ORDER BY count DESC
前の1時間以内に最も頻繁にプラットフォームにログオンする3人のユーザーを照会します。
login | SELECT regexp_extract(message, 'userID=(?<userID>[a-zA-Z\d]+)', 1) AS userID, count(*) as count GROUP BY userID ORDER BY count DESC LIMIT 3
過去15分以内の各ユーザーの支払い総額を照会します。
order | SELECT regexp_extract(message, 'userID=(?<userID>[a-zA-Z\d]+)', 1) AS userID, sum(cast(regexp_extract(message, 'amount=(?<amount>[a-zA-Z\d]+)', 1) AS double)) AS amount GROUP BY userID