mcpField
O
otel-ottl

otel-ottl

github.com/dash0hqクラウド・DevOps98608 回インストール1 週間前に更新
リポジトリ

otel-ottl について

OpenTelemetry 利用者向けの OTTL 式リファレンスです。構文、関数、エラー処理、性能面の指針を扱い、テレメトリーの変換やフィルタリング規則の作成に役立ちます。

主な機能

  1. 01パス式によるテレメトリーの参照
  2. 02条件付き変換・フィルター式の記述
  3. 03コンバーターとエディター関数の利用
  4. 04エラー処理モードの設定
  5. 05式の実行効率の改善

活用シーン

  1. 01機微なテレメトリー属性のマスキングや削除
  2. 02条件に基づくテレメトリーの破棄
  3. 03高カーディナリティ属性の正規化
  4. 04静的属性によるテレメトリーの補完

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dash0hq/agent-skills --skill otel-ottl

インストール後、Claude Code で/otel-ottlを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

rules/
cardinality.md
components.md
enrichment.md
function-reference.md
patterns.md
redaction.md

詳細

OpenTelemetry Transformation Language(OTTL)

OTTL を使用するコンポーネント

OTTL は transform プロセッサーと filter プロセッサーに限定されません。 プロセッサー(transform、filter、tailsampling、logdedup)とコネクター(routing、count、sum、signaltometrics)は、OTTL 式を受け付けます。 ユースケースを含む全リストについては、コンポーネントを参照してください。

OTTL の構文

パス式

ドット記法を使ってテレメトリーデータをたどります。

span.name
span.attributes["http.method"]
resource.attributes["service.name"]

コンテキスト(パスの最初のセグメント):resource、scope、span、spanevent、metric、datapoint、log。

列挙型

列挙型フィールドには int64 定数を使用します。

span.status.code == STATUS_CODE_ERROR
span.kind == SPAN_KIND_SERVER
演算子

代入:= — 比較:==、!=、>、<、>=、<= — 論理:and、or、not

関数

コンバーター(大文字、値を返します):

ToUpperCase(span.attributes["http.request.method"])
Substring(log.body.string, 0, 1024)
Concat(["prefix", span.attributes["request.id"]], "-")
IsMatch(metric.name, "^k8s\\..*$")

エディター(小文字、データをその場で変更します):

set(span.attributes["region"], "us-east-1")
delete_key(resource.attributes, "internal.key")
limit(log.attributes, 10, [])

エディターとコンバーターの全リストについては、関数リファレンスを参照してください。

条件文

where を使って、条件に応じて変換を適用します。

span.attributes["db.statement"] = "REDACTED" where resource.attributes["service.name"] == "accounting"
nil チェック

不在の確認には null ではなく nil を使用します。

resource.attributes["service.name"] != nil

検証ワークフロー

  1. 設定構文を検証する — otelcol validate --config=config.yaml を実行して、Collector の起動前にコンパイルエラーを検出します。
  2. デバッグエクスポーターでテストする — 変換したテレメトリーを debug エクスポーターにルーティングし、出力を確認します。
exporters:
  debug:
    verbosity: detailed

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [transform]
      exporters: [debug]   # swap in production exporter once validated
  1. 本番環境では error_mode: ignore を設定する — エラー処理を参照してください。
  2. 本番用エクスポーターに切り替える — debug を本番用エクスポーターに置き換えます。

一般的なパターン

エラー処理

コンパイルエラー

プロセッサーの初期化時に発生し、Collector の起動を妨げます。

  • 構文が無効(引用符の欠落)
  • 未知の関数
  • 無効なパス式
  • 型の不一致
実行時エラー

テレメトリーの処理中に発生します。

  • 存在しない属性へのアクセス
  • 型変換の失敗
  • 関数実行エラー
エラーモードの設定

error_mode は必ず明示的に設定してください。デフォルトはコンポーネントによって異なります。 transform プロセッサーと filter プロセッサーのデフォルトは、Collector Contrib v0.153.0 以降では ignore、それ以前は propagate です。 routing コネクターと signaltometrics コネクターのデフォルトは propagate です。 count コネクターと sum コネクターには error_mode キーがなく、常にエラーを伝播します。

モード動作使用する場面
ignoreエラーをログに記録し、次のステートメントに進みます本番環境および一般的な用途 — transform プロセッサーと filter プロセッサーのデフォルト
propagateエラーをパイプラインに返し、Collector からペイロードを破棄しますすべてのエラーを検出したい開発環境や厳格な環境
silentログに記録せずにエラーを無視します安全性が確認された変換を使う、高ボリュームのパイプラインで、エラーログがノイズとなる場合
processors:
  transform:
    error_mode: ignore
    trace_statements:
      - set(span.attributes["parsed"], ParseJSON(span.attributes["json_body"]))

ステートメントはフラットなリストです。Collector はパスのプレフィックスからコンテキスト(span、metric、datapoint、log など)を推測します。 単一のコンテキストを推測できないパスがステートメントグループに混在する場合、またはグループレベルの条件や error_mode が必要な場合にのみ、明示的な context: を指定したオブジェクト形式を使用してください。

パフォーマンス

where 句を使用して、早い段階で項目をスキップします。

# BAD — runs replace_pattern on every span
replace_pattern(span.attributes["url.path"], "/\\d+", "/{id}")

# GOOD — skips spans that lack the attribute
replace_pattern(span.attributes["url.path"], "/\\d+", "/{id}") where span.attributes["url.path"] != nil

参考資料

コメント