作ってみよう OpenTelemetry Collector Processor
tosuke @ICTSC2024合宿
https://opentelemetry.io/img/logos/opentelemetry-horizontal-color.svg#.png
テレメトリ(メトリック・ログ・トレース)を統一的に扱おうという取り組み
猫も杓子も状態
テレメトリを送受信するプロトコル(OTLP),各種言語で計装するための SDK をもつ
https://opentelemetry.io/docs/collector/img/otel-collector.svg#.png
トレースはともかくとして,既に計装されているアプリケーションは他の方法でテレメトリを出しているだろう
メトリックは Prometheus だったり
ログは journal に出したり
これらを OTLP に変換して送ったりしたい
(バッファリングのような横断的関心事をアプリケーションから剥がしたいみたいな気持ちもある)
OTelCol Components
OTelCol は色々やることがあり,コンポーネントに分割されている
外部からテレメトリを収集する receiver
テレメトリを編集する processor
テレメトリを送信する exporter
使いたいコンポーネントを選び,builderで合成できる
コンポーネント集
これで OTelCol の使い方はわかりましたね(????)
作ってみよう Processor
Component の実体は Go Module
builder は気合でコード生成してバイナリを作っている
雛形は mdatagen というコマンドで作れる
後は雛形を参考に頑張る
Processor は processorhelperというパッケージを使えば簡単なものなら関数1つでできて便利
(未)完成品
一定時間内に送出される同じラベル集合をもつデータポイントを削りたい
eg. ローカルの Prometheus には 15s 単位で欲しいがリモートは(高いから) 1m 単位でしか送りたくない
つらい
mdatagen が go installできない
go.modにreplace句がある
tools.goと Makefile を使った気合 workaround がある
ギー