ログを収集する場合、ログは同じタイプである必要があります。 ログの種類が異なる場合は、Schema-On-Write
およびSchema-On-Read
アプローチを使用してログを処理および収集できます。
背景情報
Javaログは、通常の情報とスタック例外などのエラーを含むプログラムログです。 Javaログには次のタイプがあります。
複数行の警告ログ
単一行のINFOログ
キー値 DEBUG ログ
[2018-10-01T10:30:31,000] [WARNING] java.lang.Exception: another exception happened
at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
[2018-10-01T10:30:32,000] [INFO] info something
[2018-10-01T10:30:33,000] [DEBUG] key:value key2:value2
ソリューション
スキーマオン書き込み
シナリオ: 収集するログの種類に精通しており、ログを収集するときにログをフォーマットする場合は、この方法を使用できます。
説明: 収集するログに複数のLogtail設定を適用し、Logtail設定に異なる正規表現を指定する必要があります。 これにより、さまざまな種類のログを収集できます。 デフォルトでは、ログファイルからログを収集するために使用できるLogtail設定は1つだけです。 複数のLogtail設定を使用して、ログファイルからログを収集することもできます。 詳細については、「」をご参照ください。ファイル内のログの複数のコピーを収集するにはどうすればよいですか?
スキーマオン読み取り
シナリオ: さまざまな種類の最大数千万のログを分析し、ログを照会および分析するときにログをフォーマットする場合は、この方法を使用できます。
説明: 必要なログの共通フィールドと一致する正規表現を使用する必要があります。
たとえば、複数行のログを収集する場合、ログのタイムスタンプとレベルがログの最初の行の先頭と一致するように指定され、残りのログがメッセージフィールドに含まれる正規表現を指定できます。 この例では、正規表現として
[2018-10-01T10:30:32,000] [INFO]
を指定でき、メッセージフィールドの値はinfo something
です。メッセージフィールドのコンテンツを分析する場合は、メッセージフィールドのインデックスを作成し、正規表現を使用してメッセージフィールドから分析するコンテンツを抽出する必要があります。 インデックスの作成方法の詳細については、「インデックスの作成」をご参照ください。 正規表現に基づく抽出の詳細については、「e_regex」をご参照ください。