Filelog レシーバー

Filelog レシーバーは、ファイルからのログを追尾し、解析します。

Filelog レシーバーは、ファイルからのログを追尾し、解析します。サポートされているパイプラインのタイプは logs です。詳細については「パイプラインでデータを処理する」を参照してください。

はじめに

以下の手順に従って、コンポーネントの設定とアクティベーションを行ってください:

  1. Splunk Distribution of the OpenTelemetry Collector をホストまたはコンテナプラットフォームにデプロイします:

  2. 次のセクションで説明するように、Filelog レシーバーを設定します。

  3. Collector を再起動します。

サンプル構成

  1. Filelogレシーバーを有効にするには、設定ファイルの receivers セクションに filelog を追加します:
    receivers:
      filelog:
  2. 設定を完了するには、設定ファイルの service セクションの logs パイプラインに、レシーバーを含めます:
    service:
      pipelines:
        logs:
          receivers: [filelog]

設定例

この例では、単純なJSONファイルを追尾する方法を示します:

receivers:
  filelog:
    include: [ /var/log/myservice/*.json ]
    operators:
      - type: json_parser
        timestamp:
          parse_from: attributes.time
          layout: '%Y-%m-%d %H:%M:%S'

この例では、プレーンテキストファイルを追尾する方法を示します:

receivers:
  filelog:
    include: [ /simple.log ]
    operators:
      - type: regex_parser
        regex: '^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?P<sev>[A-Z]*) (?P<msg>.*)$'
        timestamp:
          parse_from: attributes.time
          layout: '%Y-%m-%d %H:%M:%S'
        severity:
          parse_from: attributes.sev

レシーバーは、simple.logファイルから以下のようなログを読み込みます:

2023-06-19 05:20:50 ERROR This is a test error message

2023-06-20 12:50:00 DEBUG This is a test debug message

演算子を使ってログをフォーマットする

Filelog レシーバは演算子を使用してログを目的の形式に解析します。各演算子は、ファイルからの行の読み取り、フィールドからの JSON の解析などの単一の責任を果たします。目的の結果を得るには、演算子をパイプラインでチェーン接続する必要があります。

たとえば、file_input 演算子を使用してファイルから行を読み取ることができます。そこから、この操作の結果を正規表現パターンに基づいてフィールドを作成する regex_parser 演算子に送信できます。次に、結果を file_output 演算子に送信して、各行をディスク上のファイルに書き込むことができます。

すべてのオペレーターは、エントリを作成、変更、または消費します。

  • エントリーは、パイプラインを通過するログデータの基本的な表現です。

  • フィールドは、エントリー内の値を参照するために使用されます。

  • 一般的な式のシンタックスは複数の演算子で使用されます。たとえば、式を使用してエントリーをフィルタリングまたはルートできます。

利用可能な演算子

利用可能な演算子の完全なリストについては、GitHub の「What operators are available?」を参照してください。

以下はオペレーターに適用されます:

  • 各オペレーターは type を持っています。

  • 各オペレーターに一意の ID を与えることができます。

    • パイプライン内で同じタイプの演算子を複数回使用する場合は、Idを指定する必要があります。

    • そうでない場合、Idのデフォルト値は type となります。

  • 演算子は、パイプラインの次の演算子に出力します。

    • パイプラインの最後の演算子は、レシーバーから放出されます。

    • オプションで、output パラメータを使って別のオペレーターの ID を指定し、そこに直接ログを渡すこともできます。

パーサー演算子

パーサー演算子を使用して文字列から値を分離します。パーサーには、シンプルと複雑の 2 つのクラスがあります。

ヘッダーのメタデータを解析する

ヘッダーメタデータの解析をオンにするには、filelog.allowHeaderMetadataParsing 機能を設定し、先頭に start_at を設定します。設定すると、ファイル入力オペレータは、ファイルの先頭からヘッダーを読み取ろうとします。

以下が該当します:

  • 各ヘッダー行は header.pattern パターンと一致しなければなりません。

  • 各行は header.metadata_operators で定義されたパイプラインに送られます。

  • 埋め込みパイプラインからの結果エントリの属性は、前の行の属性とマージされます。属性の衝突が発生した場合は、upsert 戦略で解決されます。属性の競合が発生した場合は、upsert 戦略で解決されます。

  • すべてのヘッダー行が読み込まれた後、最終的にマージされたヘッダー属性は、 ファイルに対して出力されるすべてのログ行に存在します。

レシーバーはヘッダーラインを発行しません。

操作を組み込んだパーサー

タイムスタンプや重要度の解析など、特定のフォローアップ操作を埋め込むために、多くの解析演算子を設定することができます。

複雑なパーサーについて詳しくは、GitHub の「Parsers」を参照してください。

マルチライン構成

設定されている場合、複数行設定ブロックは、file_input オペレーターに、改行以外のパターンでログエントリーを分割するように指示します。

マルチライン設定ブロックには、line_start_pattern または line_end_pattern を含める必要があります。これらは、新しいログエントリの開始またはログエントリの終了のいずれかにマッチする正規表現パターンです。

サポートされているエンコーディング

Filelog レシーバーは以下のエンコーディングをサポートしています:

キー

説明

nop

エンコーディングの検証は行いません。ファイルを生のバイトストリームとして扱います。

utf-8

UTF-8エンコーディング。

utf-16le

バイト順がリトルエンディアンのUTF-16エンコーディング。

utf-16be

バイト順がビッグエンディアンのUTF-16エンコーディング。

ascii

ASCIIエンコーディング。

big5

Big5中国語文字エンコーディング。

その他のあまり一般的でないエンコーディングは、ベストエフォートでサポートされています。https://www.iana.org/assignments/character-sets/character-sets.xhtml で利用可能なエンコーディングのリストを参照してください。

高度なユースケース

Filelog レシーバーの使用例については、以下のセクションを参照してください。

その他の例は GitHub リポジトリ splunk-otel-collextor/examples にあります。

ログを Splunk Cloud Platform に送信する

次に、ログを Splunk Cloud Platform に送信するように設定を編集します。

receivers:
  filelog:
    include: [ /output/file.log ]
    operators:
      - type: regex_parser
        regex: '(?P<before>.*)\d\d\d\d-\d\d\d-\d\d\d\d(?P<after>.*)'
        parse_to: body.parsed
        output: before_and_after
      - id: before_and_after
        type: add
        field: body
        value: EXPR(body.parsed.before + "XXX-XXX-XXXX" + body.parsed.after)

exporters:
  # Logs
  splunk_hec:
    token: "${SPLUNK_HEC_TOKEN}"
    endpoint: "${SPLUNK_HEC_URL}"
    source: "otel"
    sourcetype: "otel"

service:
  pipelines:
    logs:
      receivers: [filelog, otlp]
      processors:
      - memory_limiter
      - batch
      - resourcedetection
      #- resource/add_environment
      exporters: [splunk_hec]

切り捨てられたログを Splunk Enterprise に送信する

ログを切り捨てて Splunk Enterprise に送信するには、以下の設定を使用します:

https://raw.githubusercontent.com/signalfx/splunk-otel-collector/main/examples/otel-logs-truncate-splunk/otel-collector-config.yml

サニタイズされたログを Splunk Enterprise に送信する

ログをサニタイズして Splunk Enterprise に送信するには、以下の設定を使用します。

https://raw.githubusercontent.com/signalfx/splunk-otel-collector/main/examples/otel-logs-sanitization-splunk/otel-collector-config.yml

ログを異なるインデックスにルーティングする

以下の設定を使用して、ログを異なる Splunk プラットフォームインデックスにルーティングします。

https://raw.githubusercontent.com/signalfx/splunk-otel-collector/main/examples/otel-logs-processor-splunk/otel-collector-config.yml

ログ・ソースをソース・タイプと関連付ける

この例は、Collector がファイルからデータを収集して Splunk Enterprise に送信し、各ソースを異なるソースタイプに関連付ける方法を示しています。ソースタイプは、イベントの構造を識別するデフォルトフィールドで、インデックス作成プロセス中に Splunk Enterprise がデータをフォーマットする方法を決定します。

https://raw.githubusercontent.com/signalfx/splunk-otel-collector/main/examples/otel-logs-with-sourcetypes-splunk/otel-collector-config.yml

設定

注: デフォルトでは、start_atend に設定されているため、レシーバは、アクティブに書き込まれていないファイルからログを読み込むことはありません。

次の表に、Filelog レシーバーの設定オプションを示します:

同梱

https://raw.githubusercontent.com/splunk/collector-config-tools/main/cfg-metadata/receiver/filelog.yaml

トラブルシューティング

__ ___ ___ _ ______ _____________ _____ ________ ___ ___ ___ ____ __ ___ ____ ____ __ ______ _____________ ______ ___ ___ ___ ____ __ ___ _________ _____

_________ __ ______ _____________ _____ _________

_________ __ ___________ _________ ___ ____ _____ _____

  • ___ _ ________ ___ ___ _______ _______ _________ _______ __ ______ ________

  • ____ ___ ______ ______________ ____ _____ _____ _______ __ ___________ ____ __________ _________ ___ ______ _________ __________ __ _____ ___ ____ _______