Observability Pipelines は US1-FED Datadog サイトでは利用できません。

概要

Observability Pipelines を使用すると、可観測性データを形成および変換できます。Logging without Limits™ パイプラインと同様に、一連の変換コンポーネントで構成される Observability Pipelines のパイプラインを構成できます。これらの変換により、型安全性が保証された状態で、データをパース、構造化、拡充することができます。

データをリマップする

remap 変換は、イベントを変更したり、イベントのルーティングやフィルタリングの条件を指定できます。remap 変換では、Datadog Processing Language (DPL) または Vector Remap Language (VRL) を使用して、配列や文字列の操作、値のエンコードおよびデコード、値の暗号化および復号化などが可能です。詳細は Datadog Processing Language を参照し、DPL の組み込み関数の完全なリストについては DPL 関数リファレンスを参照してください。

基本的な remap 構成例

まずは、source フィールドに DPL/VRL プログラムが含まれる基本的な remap 変換の YAML 構成例を見てみましょう。

transforms:
  modify:
    type: remap
    inputs:
      - previous_component_id
    source: |2
        del(.user_info)
        .timestamp = now()

この例では、type フィールドが remap 変換に設定されています。inputs フィールドは、以前に定義された previous_component_id ソースからイベントを受け取る場所を定義します。source フィールドの最初の行は、.user_info フィールドを削除します。大規模な環境では、フィールドを削除することはイベントのペイロードを削減し、下流のサービスへのコスト削減に特に有用です。

2 行目は .timestamp フィールドとその値をイベントに追加し、この変換を通過するすべてのイベントのコンテンツを変更します。

データのパース

パースは、DPL/VRL のより高度なユースケースを提供します。

パースの例

ログイベントの例

以下のスニペットは、JSON 形式の HTTP ログイベントです。

"{\"status\":200,\"timestamp\":\"2021-03-01T19:19:24.646170Z\",\"message\":\"SUCCESS\",\"username\":\"ub40fan4life\"}"

構成例

以下の YAML 構成例では、DPL/VRL を使用してログイベントを次のように変更します。

  • 生の文字列を JSON にパースする。
  • 時刻を UNIX タイムスタンプに再フォーマットする。
  • ユーザー名フィールドを削除する。
  • message を小文字に変換する。
transforms:
  parse_syslog_id:
    type: remap
    inputs:
      - previous_component_id
    source: |2
         . = parse_json!(string!(.message))
         .timestamp = to_unix_timestamp(to_timestamp!(.timestamp))
         del(.username)
         .message = downcase(string!(.message))

構成の出力

この構成は以下を返します。

{
  "message": "success",
  "status": 200,
  "timestamp": 1614626364
}

データのサンプリング、削減、フィルター、集計

下流のサービスに配信される観測可能性データの量を減らすために、サンプリング、削減、フィルター、集計などの変換が一般的に行われています。観測可能性パイプラインは、データ量をコントロールするための様々な方法を提供します。

これらの変換の使用方法の例については、ログのボリュームとサイズの制御を参照してください。

データのルーティング

もう一つのよく使われる変換は route で、指定された条件に基づいてイベントのストリームを複数のサブストリームに分割できます。これは、可観測性データを異なる宛先に送信する必要がある場合や、ユースケースに基づいてデータのストリームを異なる方法で操作する必要がある場合に有用です。

異なる宛先へのルーティングの例

ログの例

以下のスニペットは、level フィールドの値に基づいて異なる宛先にルーティングしたいログの例です。

{
  "logs": {
    "kind": "absolute",
    "level": "info,
    "name": "memory_available_bytes",
    "namespace": "host",
    "tags": {}
  }
}

構成例

以下の YAML 構成例は、level の値に基づいてデータをルーティングします。

transforms:
  splitting_logs_id:
    type: route
    inputs:
      - my-source-or-transform-id
    route:
      debug: .level == "debug"
      info: .level == "info"
      warn: .level == "warn"
      error: .level == "error"

route フィールドの各行は、ルート識別子の後に、その route のフィルターを表す論理条件を定義します。この route の最終結果は、他のコンポーネントが <transform_name>.<route_id> という名前で入力として参照できます。

例えば、level フィールドの値が warnerror のログを Datadog にルーティングしたい場合、以下の例を参照してください。

sinks:
  my_sink_id:
    type: datadog_logs
    inputs:
      - splitting_logs_id.warn
      - splitting_logs_id.error
    default_api_key: '${DATADOG_API_KEY_ENV_VAR}'
    compression: gzip

詳細については、route 変換リファレンスを参照してください。

データのスロットル

下流のサービスは、ボリュームの急増時に過負荷になることがあり、データがドロップされる可能性があります。throttle 変換を使用して、このシナリオから保護し、ユーザーの使用量クォータを強制できます。throttle 変換は、トポロジーを通過するログのレートを制限します。

スロットルの構成例

以下の YAML 構成例は、throttle 変換のものです。

transforms:
  my_transform_id:
    type: throttle
    inputs:
      - my-source-or-transform-id
    exclude: null
    threshold: 100
    window_secs: 1

threshold フィールドは、特定のバケットに許可されるイベントの数を定義します。window_secs は、構成されたしきい値が適用される時間枠を定義します。この構成例では、コンポーネントが 1 秒間に 100 を超えるイベントを受信すると、それ以降の追加イベントはドロップされます。

その他の参考資料

PREVIEWING: brett0000FF/node-compatibility