---
title: Otel Collectorから学ぶPluginシステムの実装
tags: 
author: [TKD](https://docswell.com/user/7328957)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/G78DPY247D.jpg?width=480
description: golang.tokyo #44 登壇資料 https://golangtokyo.connpass.com/event/399472/
published: August 05, 26
canonical: https://docswell.com/s/7328957/ZWRGJ8-2026-08-05-194628
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/G78DPY247D.jpg)

Otel Collectorから学ぶPlugin
システムの実装
golang.tokyo #44


# Page. 2

![Page Image](https://bcdn.docswell.com/page/L7LM142VJR.jpg)

自己紹介
氏名：竹田 舜 （TKDDDDDS）
所属：株式会社ラクス AIエージェント課
2023年新卒入社〜
普段の仕事：アプリ〜インフラまで幅広く
プラットフォームあたりがメイン
直近は、組織横断的にLLM関連のエコシステム系関与が多
い
趣味：音楽のライブ見に行くこと
（年間70回くらい）
プラットフォーム〜インフラメインで携わる
https://www.rakus.co.jp/news/2026/0615-2.html


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4EMYWK8NEW.jpg)

今日話すこと
●
●
●
Go製のOSS、Otel Collector
Pluginシステムについて
Otel CollectorのPluginシステムから学べること


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PER9YX54J9.jpg)

Otel Collectorとは？
-
Go製のOSS
テレメトリーデータを受信、処理、エクスポート
コアコードに触れることなくカスタマイズ可能な拡張性が特徴の一つ
receiver・processor・exporterなどを組み合わせ可能
よくみるやつ
※GithubよりOtel Collectorのアイコン


# Page. 5

![Page Image](https://bcdn.docswell.com/page/P7XQG6KZEX.jpg)

なぜ調べようと思ったのか？
Pluginの実現方法は前から気になってた
会社の業務で、カスタムコレクターが必要になった
OCBを使ってみて、どうやってPluginの適用をしてるのか気になった
調べて
みよう！！


# Page. 6

![Page Image](https://bcdn.docswell.com/page/37K9415V7D.jpg)

拡張性・それを実現する方法が主題


# Page. 7

![Page Image](https://bcdn.docswell.com/page/LJ3WLQ1QJ5.jpg)

Otel Collectorの拡張性
●
設定ファイルでコンポーネントを
組み合わせることが可能
→カスタムコレクター
●
後述する方法でカスタムコンポーネン
トをいれたりも可能
高い拡張性を持つ


# Page. 8

![Page Image](https://bcdn.docswell.com/page/8JDKN9XWEG.jpg)

どのように拡張性を実現しているか？


# Page. 9

![Page Image](https://bcdn.docswell.com/page/VEPK5ZPX78.jpg)

GoでよくあるPluginシステムの実現方法
-
標準のPluginパッケージ
-
-
https://golang.org/pkg/plugin/
hashicorp/go-plugin
-
https://github.com/hashicorp/go-plugin
これらの方法は使ってない
※参考：https://zenn.dev/izumin/articles/4369181aa84f7b


# Page. 10

![Page Image](https://bcdn.docswell.com/page/27VVPW237Q.jpg)

OCB(OpenTelemetry Collector Builder)+go build


# Page. 11

![Page Image](https://bcdn.docswell.com/page/5JGLPDRY7L.jpg)

OCB(OpenTelemetry Collector Builder)とは？
独自のコレクターをビルドするツール
これを使って生成したコード類をgo buildするとカスタムコレクターを作れる
https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder


# Page. 12

![Page Image](https://bcdn.docswell.com/page/47QY21V6EP.jpg)

カスタムコレクターができるまでの仕組み
1.
2.
3.
4.
yamlファイルにOCB用の設定を書く
OCBを実行。main.goやgo.modなどGo関連の成果物ができる
go buildを実行する
カスタムコレクターが完成


# Page. 13

![Page Image](https://bcdn.docswell.com/page/KE4WLRMMJ1.jpg)

Pluginの実現部分
main.goとcomponents.goができる
moduleを格納するmapとそれをインスタン
ス化するコード
複雑なPluginの仕組みはない
dist以下が生成成果物


# Page. 14

![Page Image](https://bcdn.docswell.com/page/L71YLQ8YJG.jpg)

インスタンス化
moduleとしてimportして、インスタンス
化用の関数をmap化して保持


# Page. 15

![Page Image](https://bcdn.docswell.com/page/G7WGVMZ1E2.jpg)

つまり...


# Page. 16

![Page Image](https://bcdn.docswell.com/page/4JZL4Q1XE3.jpg)

コード生成とGo Modulesを中核に構成


# Page. 17

![Page Image](https://bcdn.docswell.com/page/YE6W36LPEV.jpg)

コード生成+事前ビルド
仕組み的には超シンプル！！


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GE5ML61PE4.jpg)

ではどうやって拡張するのか？


# Page. 19

![Page Image](https://bcdn.docswell.com/page/9729LM1ZJR.jpg)

カスタムコンポーネント
moduleを作って設定ファイルで指定してビル
ドするだけ
必要な要素
●
●
●
●
●
パスを指定
yaml設定を受け取る構造体
Factory方式用の関数
インスタンス化用関数
対応予定シグナルごとの関数
Componentインターフェイスの実装
など...
設定ファイル


# Page. 20

![Page Image](https://bcdn.docswell.com/page/DJY4QXZN7M.jpg)

コンポーネントの条件を満たして
OCB実行 + go buildするだけで
完成！！！


# Page. 21

![Page Image](https://bcdn.docswell.com/page/V7NYK13VE8.jpg)

Plugin構造から学べるのは？


# Page. 22

![Page Image](https://bcdn.docswell.com/page/YJ9PV59V73.jpg)

事前ビルド＆配布による安全性
カスタマイズ性を保ちつつ、セキュリティスキャンなどは必ず通せる
● コンポーネントを含んで選択する方式→高い選択自由度
● コアに触らず拡張可能→高い汎用性
● ビルドパイプラインはプラットフォームチームで管理(セキュリティスキャ
ンの強制など)→安全性を担保
● go.modを検査すれば依存する脆弱性検査も可能


# Page. 23

![Page Image](https://bcdn.docswell.com/page/GJ8DPY94JD.jpg)

コア部分のシンプルさ
コンポーネントを importして利用するのでコア部分がシンプル
●
●
●
●
動的な読み込みを考えなくていいのでコア部分をシンプルなコードにできる
OCBの生成するエントリーポイントのコードは60行程度
コンポーネント読み込み・マッピングのコードも90行程度
非常にシンプルなPluginロード・実行コードで起動可能


# Page. 24

![Page Image](https://bcdn.docswell.com/page/LJLM14WVER.jpg)

まとめ
●
Otel Collectorの話
○
○
○
●
OCB(OpenTelemetry Collector Builder)が超重要
○
○
●
O11yのOSS
事前ビルド式の Plugin方式
拡張性が高い
コード生成
成果物をgo buildするだけで、自分のカスタムコンポーネントや好きなコンポーネントだけいれたカ
スタムコレクターがつくれる
Plugin機構のここを真似よう！
○
○
コンポーネントを importする外部ライブラリとして扱う
コード生成事前ビルド式の採用による超シンプルなコア部分
コード生成とかは
いまだと
素早くつくれるかも？


