このトピックでは、Logtailがログを収集する方法について説明します。 ログ収集プロセスは、ログファイルの監視、ログファイルの読み取り、ログの処理、ログのフィルタリング、ログの集計、およびログの送信の手順で構成されます。

手順

Logtailは次の手順を実行してログデータを収集します。

  1. ログファイルの監視
  2. ログファイルの読み取り
  3. ログの処理
  4. ログのフィルター処理
  5. ログの集約
  6. ログの転送

ログファイルの監視

サーバーにLogtailをインストールし、Log ServiceコンソールでLogtail設定を作成すると、設定はリアルタイムでサーバーに同期されます。 Logtailは、設定に基づいてサーバーのログファイルを監視します。 Logtailは、構成で監視するために指定したログファイルパスと最大ディレクトリ深さに基づいて、ログディレクトリとファイルをスキャンします。

マシングループにLogtail設定が適用された後、マシングループ内のサーバーのログファイルが更新されない場合、ログファイルは履歴ログファイルと見なされます。 Logtailは履歴ログファイルを収集しません。 ログファイルが更新されると、Logtailはファイルを読み取って収集し、ログファイルをlog Serviceに送信します。 履歴ログファイルを収集する方法の詳細については、「履歴ログのインポート」をご参照ください。

Logtailは、ログファイルが収集されるディレクトリを監視するためにイベントリスナーを登録します。 イベントリスナーは、ディレクトリ内のログファイルを定期的にポーリングします。 これにより、ログが最も早い機会に安定して収集されます。 Linuxサーバーの場合、Inotifyはディレクトリの監視とログファイルのポーリングに使用されます。

ログファイルの読み取り

Logtailが更新されたログファイルを検出すると、Logtailはログファイルを読み取ります。
  • Logtailが初めてログファイルを読み取るとき、Logtailはデフォルトでログファイル内の最大1,024 KBのデータを読み取ることができます。
    • ファイルサイズが1,024 KB未満の場合、Logtailはファイルの先頭からデータを読み取ります。
    • ファイルサイズが1,024 KBを超える場合、Logtailはファイル内の最後の1,024 KBのデータを読み取ります。
    説明 Log Serviceでは、Logtailが初めてファイルを読み取るときに、Logtailがログファイルから読み取ることができるデータサイズを指定できます。
    • コンソールモード: Logtail設定ページの [詳細オプション] セクションの [最初のコレクションサイズ] パラメーターを変更します。 詳細については、「詳細オプション」をご参照ください。
    • APIモード: Logtail設定のtail_size_kbパラメーターを変更します。 詳細については、「advanced」をご参照ください。
  • ログファイルが以前に読み取られた場合、Logtailは前のチェックポイントからファイルを読み取ります。
  • Logtailは一度に最大512 KBのデータを読み取ることができます。 ログファイル内の各ログのサイズが512 KBを超えないようにしてください。
説明 サーバーのシステム時刻を変更する場合は、Logtailを再起動する必要があります。 そうしないと、ログ時間が正しくなくなり、ログがドロップされます。

ログの処理

Logtailがログファイルを読み取ると、Logtailはファイル内の各ログを複数の行に分割し、ログを解析してから、ログの時間フィールドを設定します。
  • ログを複数の行に分割する

    ログの最初の行と一致する正規表現を指定した場合、Logtailは正規表現に基づいてログを複数の行に分割します。 正規表現を指定しない場合、1つのログ行がログとして処理されます。

  • Parseログ
    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はログを集約し、ログをLog Serviceに送信します。 データがキャッシュされたときに次のいずれかの条件が満たされると、Logtailは集計されたログをLog Serviceに送信します。

  • 集計期間が3秒を超えています。
  • 集計されたログの数が4,096を超えています。
  • 集計されたログの合計サイズが512 KBを超えています。

ログの転送

Logtailは集計されたログをLog Serviceに送信します。 ログの送信に失敗した場合、LogtailはHTTPステータスコードに基づいてログを再試行するか、送信しなくなります。

HTTP ステータスコード説明処理方法
401現在のアカウントには、データを収集する権限がありません。 データにアクセスする権限をアカウントに付与する必要があります。 詳細については、「t1867452.html#task_2426841」をご参照ください。 Logtailはログパケットをドロップします。
404Logtail設定で指定されたプロジェクトまたはLogstoreは存在しません。 Logtailはログパケットをドロップします。
403シャードクォータが使い果たされました。 Logtailは3秒後に再試行します。
500サーバー例外が発生します。 Logtailは3秒後に再試行します。
説明 データ転送速度と最大同時接続数を変更する場合は、Logtailスタートアップ設定ファイルのmax_bytes_per_secパラメーターとsend_request_concurrencyパラメーターを変更できます。 詳細については、「起動パラメータの設定」をご参照ください。