このトピックでは、Logtailがログを収集する方法について説明します。 ログ収集プロセスは、ログの監視、ログの読み取り、ログの処理、ログのフィルタリング、ログの集計、およびログの送信の手順で構成されます。
手順
Logtailは次の手順を実行してログを収集します。
ログの監視
サーバーにLogtailをインストールし、Simple Log ServiceコンソールでLogtail設定を作成すると、設定はリアルタイムでサーバーに同期されます。 Logtailは、構成に基づいてサーバーのログファイル内のログを監視します。 Logtailは、構成で監視するために指定したログファイルパスと最大ディレクトリ深さに基づいて、ログディレクトリとファイルをスキャンします。
マシングループにLogtail設定が適用された後、マシングループ内のサーバーのログファイルが更新されない場合、ログファイルは履歴ログファイルと見なされます。 Logtailは履歴ログファイルからログを収集しません。 ログファイルが更新されると、Logtailはファイルからログを読み取って収集し、ログをSimple log Serviceに送信します。 履歴ログファイルからログを収集する方法の詳細については、「ログファイルから履歴ログをインポートする」をご参照ください。
Logtailは、ログが収集されるディレクトリを監視するためにイベントリスナーを登録します。 イベントリスナーは、ディレクトリ内のログファイルを定期的にポーリングします。 これにより、ログが最も早い機会に安定して収集されます。 Linuxサーバーの場合、Inotifyはディレクトリの監視とログファイルのポーリングに使用されます。
ログの読み取り
Logtailが更新されたログファイルを検出すると、Logtailはログファイルのデータを読み取ります。
Logtailがログファイル内のデータを初めて読み取るとき、Logtailはデフォルトでログファイル内の最大1,024 KBのデータを読み取ることができます。
ファイルサイズが1,024 KB未満の場合、Logtailはファイルの先頭からデータを読み取ります。
ファイルサイズが1,024 KBを超える場合、Logtailはファイル内の最後の1,024 KBのデータを読み取ります。
ログファイル内のデータが以前に読み取られている場合、Logtailは以前のチェックポイントからファイル内のデータを読み取ります。
Logtailは一度に最大512 KBのデータを読み取ることができます。 ログファイル内の各ログのサイズが512 KBを超えないようにしてください。 それ以外の場合、Logtailは期待どおりにデータを読み取ることができません。
サーバーのシステム時刻を変更する場合は、Logtailを再起動する必要があります。 そうしないと、ログ時間が正しくなくなり、ログがドロップされます。
ログの処理
Logtailがログファイル内のログを読み取るとき、Logtailはファイル内の各ログを複数の行に分割し、ログを解析してから、ログの時間フィールドを構成します。
ログを複数の行に分割する
ログの最初の行の先頭と一致する正規表現を指定した場合、Logtailは正規表現に基づいてログを複数の行に分割します。 正規表現を指定しない場合、1つのログ行がログとして処理されます。
ログの解析
Logtailは、Logtail設定で指定した収集モードに基づいて各ログを解析します。
説明複雑な正規表現を指定すると、Logtailは過剰な量のCPUリソースを消費する可能性があります。 Logtailが効率的にログを解析できるようにする正規表現を指定することを推奨します。
Logtailがログの解析に失敗した場合、LogtailはLogtail設定のDrop Failed to parse Logsパラメーターの設定に基づいて失敗を処理します。
Drop Failed to Parse Logsをオンにすると、Logtailはログをドロップし、エラーを報告します。
[Drop Failed to Parse Logs] をオフにすると、Logtailはログをアップロードします。 ログのキーはraw_logに設定され、値はログの内容に設定されます。
ログの時間フィールドを設定する
ログの時間フィールドを設定しない場合、ログ時間はログが解析される時間です。
ログの時間フィールドを設定する場合、ログの処理方法は次のシナリオで異なります。
ログが生成された時刻と現在の時刻の差が12時間以内の場合、解析されたログフィールドからログ時間が抽出されます。
ログが生成された時刻と現在の時刻の差が12時間を超える場合、ログはドロップされ、エラーが報告されます。
ログのフィルター処理
ログが処理された後、Logtailは指定されたフィルター条件に基づいてログをフィルターします。
[フィルター設定] フィールドでフィルター条件を指定しない場合、ログはフィルターされません。
[フィルター設定] フィールドでフィルター条件を指定すると、各ログのフィールドがトラバースされます。
Logtailは、フィルター条件を満たすログのみを収集します。
ログの集約
ネットワークリクエストの数を減らすために、Logtailは処理されたログとフィルタリングされたログを指定された期間キャッシュします。 次に、Logtailはログを集約し、ログをSimple Log Serviceに送信します。 データがキャッシュされたときに次のいずれかの条件が満たされると、Logtailは集計されたログをSimple Log Serviceに送信します。
集計期間が3秒を超えています。
集計されたログの数が4,000を超えています。
集計されたログの合計サイズが512 KBを超えています。
ログの転送
Logtailは集計されたログをSimple Log Serviceに送信します。 ログの送信に失敗した場合、LogtailはHTTPステータスコードに基づいてログを再試行するか、送信しなくなります。
HTTPステータスコード | 説明 | Logtailの処理方法 |
401 | 現在のアカウントには、データを収集する権限がありません。 データにアクセスする権限をアカウントに付与する必要があります。 詳細については、「権限アシスタント機能の設定」をご参照ください。 | Logtailはログパケットをドロップします。 |
404 | Logtail設定で指定されたプロジェクトまたはLogstoreは存在しません。 | Logtailはログパケットをドロップします。 |
403 | シャードクォータが使い果たされました。 | Logtailは3秒後に再試行します。 |
500 | サーバー例外が発生します。 | Logtailは3秒後に再試行します。 |
データ転送速度と最大同時接続数を変更する場合は、Logtailスタートアップ設定ファイルのmax_bytes_per_secパラメーターとsend_request_concurrencyパラメーターを変更できます。 詳細については、「Logtailの起動パラメーターの設定」をご参照ください。