Logtail クライアントがサーバーからログを収集する処理には、ファイルのモニタリング、ファイルの読み取り、ログの処理、ファイルのフィルタリング、ログの集約、およびログの転送の 6 つのステップがあります。

サーバーに Logtail クライアントをインストールして Logtail 構成を設定すると、Logtail は Log Service へのログの収集を開始します。 ログ収集は次の処理を行います。
  1. ファイルのモニタリング
  2. ファイルの読取り
  3. ログの処理
  4. ログのフィルタリング
  5. ログの集約
  6. ログの送信
  • 詳細は、 Alibaba Cloud Community をご参照ください。
  • マシングループに Logtail 構成を設定すると、そのマシングループ内のサーバーのログに変更のなかったものは、過去のファイルとみなされます。過去のファイルは収集されません。過去のログを収集するには、過去ログのインポートをご参照ください。

ファイルのモニタリング

サーバーに Logtail クライアントをインストールし、データソースに合わせて Logtail 構成を設定すると、その Logtail 構成は Logtail にすぐに送信されます。Logtail 構成に基づいてファイルのモニタリングが開始します。

  1. 具体的には、設定されたログパスと最大モニタリングディレクトリの階層に合わせて、ファイル命名規則に準拠した指定ログディレクトリとファイルが階層ごとにスキャンされます。

    ログ収集の効率と安定性を確保するために、Logtail は収集ディレクトリ (つまり、Linux の inotify ディレクトリまたは Windows の ReadDirectoryChangesW ディレクトリ) のイベントモニタリングを登録し、定期的にポーリングします。

  2. モニタリング結果に、ファイル命名規則に準拠した指定されたディレクトリに変更のなかったログファイルがあった場合、そのファイルは収集されません。変更のあったログファイルがあれば、収集プロセスが起動し、そのファイルは読み取られます。

ファイルの読み取り

変更のあったファイルを読み取ります。
  1. 初めて読み取るファイルの場合、ファイルサイズがチェックされます。
    • ファイルサイズが 1 MB より小さい場合、ファイルは先頭から読み取られます。
    • ファイルサイズが 1 MB より大きい場合、ファイルの最後の 1 MB が読み取られます。
  2. 以前に読み込まれたことのあるファイルの場合、最後のチェックポイントからファイルが読み込まれます。
  3. 一度に 512 KB のみが読み取り可能です。したがって、ログは 512 KB 以下にします。
サーバー時間を変更した場合は、手動で Logtail を再起動する必要があります。再起動しないと、ログ生成時間が正確なものではなくなり、誤ってログが削除される可能性があります。

ログの処理

ログは行に分割また解析され、時間フィールド設定が適正が確認されます。
  1. 行に分割

    Logtail 構成で改行正規表現を指定すると、改行設定に従ってログは複数の行に分割されます。各行は 1 つのログとして処理されます。改行の正規表現を指定しない場合、データブロックが 1 つのログとして処理されます。

  2. 解析
    Logtail 構成に設定された正規表現、区切り文字、JSON 配列に基づいてログコンテンツが解析されます。
    正規表現を複雑にし過ぎると、CPU 使用率が異常に高くなる可能性があります。したがって、正規表現を効率のよいものにされることを推奨します。
  3. 解析失敗処理

    Logtail 構成で解析失敗ログの破棄機能の有効/無効によって、解析失敗ログは次のように処理されます。

    • 有効化の場合、ログは破棄され、エラーが報告されます。
    • 無効化の場合、元のログと併せて raw_log のキーとログ内容の値をアップロードする必要があります。
  4. 時間フィールド設定
    • 本フィールドを設定しない場合、現在の解析時間がログ生成時間に適用されます。
    • 本フィールドを設定した場合、ログ生成時間は、次のとおりとなります。
      • 現在時刻から 12 時間経過していない場合、解析済み時刻フィールドから時間が抽出されます。
      • 現在時刻から 12 時間以上経過した場合、ログは破棄されエラーが報告されます。

ログのフィルタリング

Logtail 構成のフィルター設定に従ってログがフィルタリングされます。

  • フィルターを設定した場合、ログはフィルタリングされず、直接ログを統計します。
  • フィルターを設定しない場合、各ログのすべてのフィールドがスキャンおよび検証されます。
    • フィルター設定に適合するログが収集されます。フィルター設定のすべてのフィールドがログに含まれ、すべてのフィールドが設定条件を満たしている。
    • フィルター設定に適合しないログは収集されません。

ログの集約

ログデータは Log Service に送信されます。その前にログは一旦キャッシュされます。ネットワークリクエストの数を減らすために、必要なログは集約、パッケージ化されてから Log Service に送信されます。

キャッシュされたログが次のいずれかに適合する場合、そのログはパッケージ化されてから送信されます。
  • ログの集約に 3 秒を超える
  • 集約するログが 4,096 を超える
  • ログが 512 KB を超える

ログの送信

Log Service に集約ログが送信されます。起動パラメータの構成の手順に従って、起動パラメータの max_bytes_per_sec (ログ送信速度) およびsend_request_concurrency (同時送信できるログの最大数) を調整します。調整した値を超えて送信されることがなくなります。

ログの送信に失敗した場合、エラーメッセージのとおり、タスクは自動的に再試行または終了します。
エラーメッセージ 説明 処理方法
エラーコード:401 Logtail クライアントにはデータを収集する権限がありません。 Logtail はログパッケージを削除
エラーコード:404 Logtail Config で指定されたプロジェクトまたは Logstore が存在しません。 Logtail はログパッケージを削除
エラーコード:403 シャードクォータが上限を超えています。 3 秒後に再試行
エラーコード:500 サーバーでエラーが発生しました。 3 秒後に再試行
ネットワークタイムアウト ネットワーク接続エラーが発生しました。 3 秒後に再試行