459 Views
August 05, 26
スライド概要
golang.tokyo #44 登壇資料
https://golangtokyo.connpass.com/event/399472/
Otel Collectorから学ぶPlugin システムの実装 golang.tokyo #44
自己紹介 氏名:竹田 舜 (TKDDDDDS) 所属:株式会社ラクス AIエージェント課 2023年新卒入社〜 普段の仕事:アプリ〜インフラまで幅広く プラットフォームあたりがメイン 直近は、組織横断的にLLM関連のエコシステム系関与が多 い 趣味:音楽のライブ見に行くこと (年間70回くらい) プラットフォーム〜インフラメインで携わる https://www.rakus.co.jp/news/2026/0615-2.html
今日話すこと ● ● ● Go製のOSS、Otel Collector Pluginシステムについて Otel CollectorのPluginシステムから学べること
Otel Collectorとは? - Go製のOSS テレメトリーデータを受信、処理、エクスポート コアコードに触れることなくカスタマイズ可能な拡張性が特徴の一つ receiver・processor・exporterなどを組み合わせ可能 よくみるやつ ※GithubよりOtel Collectorのアイコン
なぜ調べようと思ったのか? Pluginの実現方法は前から気になってた 会社の業務で、カスタムコレクターが必要になった OCBを使ってみて、どうやってPluginの適用をしてるのか気になった 調べて みよう!!
拡張性・それを実現する方法が主題
Otel Collectorの拡張性 ● 設定ファイルでコンポーネントを 組み合わせることが可能 →カスタムコレクター ● 後述する方法でカスタムコンポーネン トをいれたりも可能 高い拡張性を持つ
どのように拡張性を実現しているか?
GoでよくあるPluginシステムの実現方法 - 標準のPluginパッケージ - - https://golang.org/pkg/plugin/ hashicorp/go-plugin - https://github.com/hashicorp/go-plugin これらの方法は使ってない ※参考:https://zenn.dev/izumin/articles/4369181aa84f7b
OCB(OpenTelemetry Collector Builder)+go build
OCB(OpenTelemetry Collector Builder)とは? 独自のコレクターをビルドするツール これを使って生成したコード類をgo buildするとカスタムコレクターを作れる https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder
カスタムコレクターができるまでの仕組み 1. 2. 3. 4. yamlファイルにOCB用の設定を書く OCBを実行。main.goやgo.modなどGo関連の成果物ができる go buildを実行する カスタムコレクターが完成
Pluginの実現部分 main.goとcomponents.goができる moduleを格納するmapとそれをインスタン ス化するコード 複雑なPluginの仕組みはない dist以下が生成成果物
インスタンス化 moduleとしてimportして、インスタンス 化用の関数をmap化して保持
つまり...
コード生成とGo Modulesを中核に構成
コード生成+事前ビルド 仕組み的には超シンプル!!
ではどうやって拡張するのか?
カスタムコンポーネント moduleを作って設定ファイルで指定してビル ドするだけ 必要な要素 ● ● ● ● ● パスを指定 yaml設定を受け取る構造体 Factory方式用の関数 インスタンス化用関数 対応予定シグナルごとの関数 Componentインターフェイスの実装 など... 設定ファイル
コンポーネントの条件を満たして OCB実行 + go buildするだけで 完成!!!
Plugin構造から学べるのは?
事前ビルド&配布による安全性 カスタマイズ性を保ちつつ、セキュリティスキャンなどは必ず通せる ● コンポーネントを含んで選択する方式→高い選択自由度 ● コアに触らず拡張可能→高い汎用性 ● ビルドパイプラインはプラットフォームチームで管理(セキュリティスキャ ンの強制など)→安全性を担保 ● go.modを検査すれば依存する脆弱性検査も可能
コア部分のシンプルさ コンポーネントを importして利用するのでコア部分がシンプル ● ● ● ● 動的な読み込みを考えなくていいのでコア部分をシンプルなコードにできる OCBの生成するエントリーポイントのコードは60行程度 コンポーネント読み込み・マッピングのコードも90行程度 非常にシンプルなPluginロード・実行コードで起動可能
まとめ ● Otel Collectorの話 ○ ○ ○ ● OCB(OpenTelemetry Collector Builder)が超重要 ○ ○ ● O11yのOSS 事前ビルド式の Plugin方式 拡張性が高い コード生成 成果物をgo buildするだけで、自分のカスタムコンポーネントや好きなコンポーネントだけいれたカ スタムコレクターがつくれる Plugin機構のここを真似よう! ○ ○ コンポーネントを importする外部ライブラリとして扱う コード生成事前ビルド式の採用による超シンプルなコア部分 コード生成とかは いまだと 素早くつくれるかも?