Vector を使用して複数の Agent を集計する

概要

Datadog Agent は Vector と組み合わせて使用することができます。このシナリオでは、Agent が Vector に データを送信し、そこで複数のアップストリーム Agent からのデータ集計を行います。

Agents -> Vector -> Datadog

Vector はデータを Datadog および他の宛先に送信する前に処理することができるため、このシナリオは プロキシを使用する場合とは異なります。Vector の機能は次の通りです。

:

  • サポート対象となるのはログとメトリクスの集計のみです。
  • Vector は他のソースから直接ログとメトリクスを収集することができます。その際、サードパーティのログには適切なタグ付けがされていない場合があります。タグ、ソース、またはサービスの値を追加するには、Vector Remap Language を使用すると便利です。

コンフィギュレーション

Agent の構成

この構成には、Datadog Agent のバージョン 6.35 または 7.35 が必要です。

Vector にログを送信するには、Agent のコンフィギュレーションファイルである datadog.yaml を更新してください。

vector:
  logs.enabled: true
  # Vector 側で TLS/SSL が有効になっている場合、プロトコルを https に調整します
  logs.url: "http://<VECTOR_HOST>:<VECTOR_PORT>"
# Vector の v0.17.0 以前のバージョンを使用している場合は、以下の行をコメント解除します
# logs_config.use_v2_api: false

メトリクスについては、datadog.yamlファイル内の以下の値を更新します。

vector:
  metrics.enabled: true
  # Vector 側で TLS/SSL が有効になっている場合、プロトコルを https に調整します
  metrics.url: "http://<VECTOR_HOST>:<VECTOR_PORT>"

VECTOR_HOST は Vector を実行しているシステムのホスト名で、VECTOR_PORT は Vector datadog_agent ソースをリッスンしている TCP ポートです。

Docker コンフィギュレーション

Docker を使用している場合は、Agent のコンフィギュレーションファイルに以下を追加します。

-e DD_VECTOR_METRICS_URL=http://<VECTOR_HOST>:<VECTOR_PORT>
-e DD_VECTOR_METRICS_ENABLED=true
-e DD_VECTOR_LOGS_URL=http://<VECTOR_HOST>:<VECTOR_PORT>
-e DD_VECTOR_LOGS_ENABLED=true

Vector のコンフィギュレーション

Datadog Agent からログやメトリクスを受信するには、Vector に datadog_agent source を構成します。Datadog にログを送信するには、Vector に少なくとも 1 つの datadog_logs sink を構成する必要があります。同様に、Datadog にメトリクスを送信するには、Vector に少なくとも 1 つの datadog_metrics シンクが構成されている必要があります。

Vector での処理中にログに適用できるコンフィギュレーションパラメーターや変換の一覧については、公式の Vector ドキュメントを参照してください。

ここでは、Vector Remap Language を使ってすべてのログとメトリクスにタグを追加するコンフィギュレーションの例をご紹介します。

sources:
  datadog_agents:
    type: datadog_agent
    # ここで使用するポート値には、上記の <VECTOR_PORT> を設定する必要があります
    address: "[::]:8080"
   multiple_outputs: true # メトリクスとログを自動的に分離するために

transforms:
  tag_logs:
    type: remap
    inputs:
      - datadog_agents.logs
    source: |
      # ここで `!` の省略形は `string` 関数で使用され、
      # .ddtags が "string" でない場合はエラーになります。
      # .ddtags フィールドは、常に文字列であることが期待されます。
      .ddtags = string!(.ddtags) + ",sender:vector"      
  tag_metrics:
    type: remap
    inputs:
      - datadog_agents.metrics
    source: |
            .tags.sender = "vector"

sinks:
  log_to_datadog:
    type: datadog_logs
    inputs:
       - tag_logs
    default_api_key: "${DATADOG_API_KEY_ENV_VAR}"
    encoding:
      codec: json
  metrics_to_datadog:
    type: datadog_metrics
    inputs:
       - tag_metrics
    default_api_key: "${DATADOG_API_KEY_ENV_VAR}"

Kubernetes を使用する

公式の Datadog チャートを使用して、上記の Agent コンフィギュレーションagents.customAgentConfig 値に追加します。: agents.customAgentConfig を考慮するために、agent.useConfigMaptrue に設定する必要があります。

Datadog Helm チャートの詳細については、Kubernetes ドキュメントを参照してください。

Vector では、Datadog のログソースがあらかじめ設定されたデータ集計用公式チャートを提供しています。Helm を使用した Vector のインストールについては公式の Vector ドキュメントを参照してください。

Datadog にログを送信するには、Vector の構成に datadog_logs シンクを追加する必要があります。同様に、Datadog にメトリクスを送信するには、datadog_metrics シンクを Vector の構成に追加する必要があります。Vector のチャートには、values.yaml ファイルの customConfig フィールドを使用して、任意の有効な Vector の構成を保持することができます。datadog_logs を有効にするには、Vector の構成で説明したのと同じ種類の構成を、そのまま Vector のチャートの構成に含めることができます。

Vector で Datadog のログとメトリクスを操作する

Vector に送信されたログやメトリクスは、変換のための Vector Remap Language を含むベクターの全機能の恩恵を受けることができます。

Datadog Agent から送信されたログは、Vector が受信すると、期待されるスキーマを使用して構造化されます。Datadog API を使用してログを送信する場合、完全なスキーマの説明については、API ドキュメントを参照してください。

Vector が他のソースから収集したログとメトリクスは高度な機能を使用して強化することができます。VRL でログとメトリクスを調整し、期待されるスキーマに従って関連するフィールドにデータを入力します。

その他の参考資料