# OpenTelemetry Collector Builderを使用してカスタムコレクターをビルドする

> OpenTelemetry Collectorの独自のディストリビューションを組み立てる

---

LLMS index: [llms.txt](/llms.txt)

---

OpenTelemetry Collectorには、特定のコンポーネントが事前に構成された5つの公式[ディストリビューション](/docs/collector/distributions/)があります。
より柔軟性が必要な場合は、[OpenTelemetry Collector Builder][ocb]（または`ocb`）を使用して、カスタムコンポーネント、アップストリームコンポーネント、およびほかの公開されている利用可能なコンポーネントを含む独自のディストリビューションのカスタムバイナリを生成できます。

次のガイドでは、`ocb`を使用して独自のコレクターをビルドする方法を説明します。
この例では、カスタムコンポーネントの開発とテストをサポートするコレクターディストリビューションを作成します。
任意のGolang統合開発環境（IDE）でコレクターコンポーネントを直接起動およびデバッグできます。
IDEのすべてのデバッグ機能（スタックトレースは素晴らしい教師です！）を使用して、コレクターがコンポーネントコードとどのように対話するかを理解します。

## 前提条件 {#prerequisites}

`ocb`ツールは、コレクターのディストリビューションをビルドするためにGoを必要とします。
開始する前に、マシンに[互換性のあるバージョン](https://github.com/open-telemetry/opentelemetry-collector/blob/main/README.md#compatibility)のGoが[インストール](https://go.dev/doc/install)されていることを確認してください。

## OpenTelemetry Collector Builderのインストール {#install-the-opentelemetry-collector-builder}

`ocb`バイナリは、OpenTelemetry Collectorの[`cmd/builder`タグが付いたリリース][tags]からダウンロード可能なアセットとして入手できます。
オペレーティングシステムとチップセットに適したアセットを見つけてダウンロードしてください。



      <ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          data-td-tp-persist="linux (amd 64)" aria-controls="tabs-00-00" aria-selected="true">
        Linux (AMD 64)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="linux (arm 64)" aria-controls="tabs-00-01" aria-selected="false">
        Linux (ARM 64)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
          data-td-tp-persist="linux (ppc64le) " aria-controls="tabs-00-02" aria-selected="false">
        Linux (ppc64le)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-03" role="tab"
          data-td-tp-persist="macos (amd 64)" aria-controls="tabs-00-03" aria-selected="false">
        macOS (AMD 64)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-04-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-04" role="tab"
          data-td-tp-persist="macos (arm 64)" aria-controls="tabs-00-04" aria-selected="false">
        macOS (ARM 64)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-05-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-05" role="tab"
          data-td-tp-persist="windows (amd 64)" aria-controls="tabs-00-05" aria-selected="false">
        Windows (AMD 64)
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">curl --proto <span class="s1">&#39;=https&#39;</span> --tlsv1.2 -fL -o ocb <span class="se">\
</span></span></span><span class="line"><span class="cl">https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.149.0/ocb_0.149.0_linux_amd64
</span></span><span class="line"><span class="cl">chmod +x ocb
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">curl --proto <span class="s1">&#39;=https&#39;</span> --tlsv1.2 -fL -o ocb <span class="se">\
</span></span></span><span class="line"><span class="cl">https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.149.0/ocb_0.149.0_linux_arm64
</span></span><span class="line"><span class="cl">chmod +x ocb
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">curl --proto <span class="s1">&#39;=https&#39;</span> --tlsv1.2 -fL -o ocb <span class="se">\
</span></span></span><span class="line"><span class="cl">https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.149.0/ocb_0.149.0_linux_ppc64le
</span></span><span class="line"><span class="cl">chmod +x ocb
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-03" role="tabpanel" aria-labelled-by="tabs-00-03-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">curl --proto <span class="s1">&#39;=https&#39;</span> --tlsv1.2 -fL -o ocb <span class="se">\
</span></span></span><span class="line"><span class="cl">https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.149.0/ocb_0.149.0_darwin_amd64
</span></span><span class="line"><span class="cl">chmod +x ocb
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-04" role="tabpanel" aria-labelled-by="tabs-00-04-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">curl --proto <span class="s1">&#39;=https&#39;</span> --tlsv1.2 -fL -o ocb <span class="se">\
</span></span></span><span class="line"><span class="cl">https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.149.0/ocb_0.149.0_darwin_arm64
</span></span><span class="line"><span class="cl">chmod +x ocb
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-05" role="tabpanel" aria-labelled-by="tabs-00-05-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">Invoke-WebRequest -Uri <span class="s2">&#34;https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2Fv0.149.0/ocb_0.149.0_windows_amd64.exe&#34;</span> -OutFile <span class="s2">&#34;ocb.exe&#34;</span>
</span></span><span class="line"><span class="cl">Unblock-File -Path <span class="s2">&#34;ocb.exe&#34;</span>
</span></span></code></pre></div>
    </div>
</div>


`ocb`が正しくインストールされたことを確認するには、ターミナルで`./ocb help`と入力します。
コマンドの`help`出力がコンソールに表示されるはずです。

## OpenTelemetry Collector Builderの構成 {#configure-the-opentelemetry-collector-builder}

YAMLマニフェストファイルで、`ocb`を構成します。
マニフェストには2つの主要なセクションがあります。
1つ目のセクションである`dist`には、コード生成とコンパイルプロセスの構成オプションが含まれています。
2つ目のセクションには、`extensions`、`exporters`、`receivers`、`processors`などのトップレベルのモジュールタイプが含まれています。
それぞれのモジュールタイプは、コンポーネントのリストを受け付けます。

マニフェストの`dist`セクションには、`ocb`コマンドラインの`flags`に相当するタグが含まれています。
次の表は、`dist`セクションの構成オプションを示しています。

| Tag                | Description                                                    | Optional         | Default Value                                                                     |
| ------------------ | -------------------------------------------------------------- | ---------------- | --------------------------------------------------------------------------------- |
| module:            | Go modの規約に従った新しいディストリビューションのモジュール名 | はい、ただし推奨 | `go.opentelemetry.io/collector/cmd/builder`                                       |
| name:              | ディストリビューションのバイナリ名                             | はい             | `otelcol-custom`                                                                  |
| description:       | 長いアプリケーション名                                         | はい             | `Custom OpenTelemetry Collector distribution`                                     |
| output_path:       | 出力（ソースとバイナリ）を書き込むパス                         | はい             | `/var/folders/86/s7l1czb16g124tng0d7wyrtw0000gn/T/otelcol-distribution3618633831` |
| version:           | カスタムOpenTelemetry Collectorのバージョン                    | はい             | `1.0.0`                                                                           |
| go:                | 生成されたソースのコンパイルに使用するGoバイナリ               | はい             | PATHから取得されるgo                                                              |
| debug_compilation: | 成果物のバイナリにデバッグを保存する                           | はい             | False                                                                             |

すべての`dist`タグはオプションです。
カスタムコレクターディストリビューションを他のユーザーが利用できるようにするか、または`ocb`を使用してコンポーネント開発およびテスト環境をブートストラップするかに応じて、それらのカスタム値を追加できます。

`ocb`を構成するには、次の手順に従います。

1. 次の内容で`builder-config.yaml`という名前のマニフェストファイルを作成します。

   ```yaml
   dist:
     name: otelcol-dev
     description: 開発者向けの基本的なOTelコレクターのディストリビューション
     output_path: ./otelcol-dev
   ```

1. カスタムコレクターディストリビューションに含めるコンポーネントのモジュールを追加します。
   さまざまなモジュールとコンポーネントの追加方法については、[`ocb`構成ドキュメント](https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder#configuration)を参照してください。

   この例のディストリビューションには、次のコンポーネントを追加します。
   - エクスポーター: OTLPとDebug
   - レシーバー: OTLP
   - プロセッサー: Batch

   `builder-config.yaml`マニフェストファイルは次のようになります。

   ```yaml
   dist:
     name: otelcol-dev
     description: 開発者向けの基本的なOTelコレクターのディストリビューション
     output_path: ./otelcol-dev

   exporters:
     - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.149.0
     - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.149.0

   processors:
     - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.149.0

   receivers:
     - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.149.0

   providers:
     - gomod:
         go.opentelemetry.io/collector/confmap/provider/envprovider v1.48.0
     - gomod:
         go.opentelemetry.io/collector/confmap/provider/fileprovider v1.48.0
     - gomod:
         go.opentelemetry.io/collector/confmap/provider/httpprovider v1.48.0
     - gomod:
         go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.48.0
     - gomod:
         go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.48.0
   ```

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">Tip</div>



カスタムコレクターに追加できるコンポーネントのリストについては、[OpenTelemetry Registry](/ecosystem/registry/?language=collector)をご覧ください。
それぞれのレジストリのエントリには、`builder-config.yaml`に追加するために必要な完全な名前とバージョンが記載されていることに注意してください。

</div>


## コードを生成し、コレクターディストリビューションをビルドする {#generate-the-code-and-build-your-collector-distribution}

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">Note</div>



このセクションでは、`ocb`バイナリを使用してカスタムコレクターディストリビューションをビルドする方法を説明します。
Kubernetesなどのコンテナオーケスとレーターにカスタムコレクターディストリビューションをビルドしてデプロイしたい場合は、このセクションはスキップして、[コレクターディストリビューションのコンテナ化](#containerize-your-collector-distribution)を参照してください。

</div>


`ocb`がインストールおよび構成されたので、ディストリビューションをビルドする準備ができました。

ターミナルで次のコマンドを入力して、`ocb`を起動します。

```sh
./ocb --config builder-config.yaml
```

コマンドの出力は次のようになります。

```text
2025-06-13T14:25:03.037-0500	INFO	internal/command.go:85	OpenTelemetry Collector distribution builder	{"version": "0.149.0", "date": "2025-06-03T15:05:37Z"}
2025-06-13T14:25:03.039-0500	INFO	internal/command.go:108	Using config file	{"path": "builder-config.yaml"}
2025-06-13T14:25:03.040-0500	INFO	builder/config.go:99	Using go	{"go-executable": "/usr/local/go/bin/go"}
2025-06-13T14:25:03.041-0500	INFO	builder/main.go:76	Sources created	{"path": "./otelcol-dev"}
2025-06-13T14:25:03.445-0500	INFO	builder/main.go:108	Getting go modules
2025-06-13T14:25:04.675-0500	INFO	builder/main.go:87	Compiling
2025-06-13T14:25:17.259-0500	INFO	builder/main.go:94	Compiled	{"binary": "./otelcol-dev/otelcol-dev"}
```

マニフェストの`dist`セクションで定義されているように、現在、コレクターディストリビューションのすべてのソースコードとバイナリを含む`otelcol-dev`という名前のフォルダーがあります。

フォルダ構成は次のようになります。

```text
.
├── builder-config.yaml
├── ocb
└── otelcol-dev
    ├── components.go
    ├── components_test.go
    ├── go.mod
    ├── go.sum
    ├── main.go
    ├── main_others.go
    ├── main_windows.go
    └── otelcol-dev
```

生成されたコードを使用して、コンポーネント開発プロジェクトをブートストラップし、これらのコンポーネントを使用して独自のコレクターディストリビューションをビルドおよび配布できます。

## コレクターディストリビューションのコンテナ化 {#containerize-your-collector-distribution}

<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">Note</div>



このステップでは、`Dockerfile`内でコレクターのディストリビューションをビルドします。
Kubernetesのようなコンテナオーケストレーターにコレクターディストリビューションをデプロイする必要がある場合は、次の手順に従ってください。
コンテナ化せずにコレクターディストリビューションをビルドしたい場合は、[コードを生成し、コレクターディストリビューションをビルドする](#generate-the-code-and-build-your-collector-distribution)を参照してください。

</div>


カスタムコレクターをコンテナ化するには、次のステップに従います。

1. プロジェクトに2つの新しいファイルを追加します。
   - `Dockerfile` - コレクターのディストリビューションのコンテナイメージ定義
   - `collector-config.yaml` - ディストリビューションをテストするための最小限のコレクター構成YAML

   これらのファイルを追加した後、ファイルは次のようになります。

   ```text
   .
   ├── builder-config.yaml
   ├── collector-config.yaml
   └── Dockerfile
   ```

1. 次の内容を`Dockerfile`に追加します。
   この定義は、コレクターのディストリビューションをインプレースでビルドし、生成されたコレクターディストリビューションバイナリがターゲットコンテナアーキテクチャ（たとえば、`linux/arm64`、`linux/amd64`）と一致することを保証します。

   ```dockerfile
   FROM alpine:3.19 AS certs
   RUN apk --update add ca-certificates

   FROM golang:1.25.0 AS build-stage
   WORKDIR /build

   COPY ./builder-config.yaml builder-config.yaml

   RUN --mount=type=cache,target=/root/.cache/go-build GO111MODULE=on go install go.opentelemetry.io/collector/cmd/builder@v0.149.0
   RUN --mount=type=cache,target=/root/.cache/go-build builder --config builder-config.yaml

   FROM gcr.io/distroless/base:latest

   ARG USER_UID=10001
   USER ${USER_UID}

   COPY ./collector-config.yaml /otelcol/collector-config.yaml
   COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
   COPY --chmod=755 --from=build-stage /build/otelcol-dev /otelcol

   ENTRYPOINT ["/otelcol/otelcol-dev"]
   CMD ["--config", "/otelcol/collector-config.yaml"]

   EXPOSE 4317 4318 12001
   ```

1. `collector-config.yaml`ファイルに次の定義を追加します。

   ```yaml
   receivers:
     otlp:
       protocols:
         grpc:
           endpoint: 0.0.0.0:4317
         http:
           endpoint: 0.0.0.0:4318

   exporters:
     debug:
       verbosity: detailed

   service:
     pipelines:
       traces:
         receivers: [otlp]
         exporters: [debug]
       metrics:
         receivers: [otlp]
         exporters: [debug]
       logs:
         receivers: [otlp]
         exporters: [debug]
   ```

1. 次のコマンドを使用して、`linux/amd64`と`linux/arm64`をターゲットビルドアーキテクチャとして使用して、`ocb`のマルチアーキテクチャDockerイメージをビルドします。
   より詳しくは、マルチアーキテクチャビルドに関するこの[ブログ記事](https://blog.jaimyn.dev/how-to-build-multi-architecture-docker-images-on-an-m1-mac/)をご覧ください。

   ```sh
   # Dockerマルチアーキテクチャビルドを有効にする
   docker run --rm --privileged tonistiigi/binfmt --install all
   docker buildx create --name mybuilder --use

   # DockerイメージをLinux AMDおよびARMとしてビルドし、ビルド結果を「docker images」にロードします
   docker buildx build --load \
     -t <collector_distribution_image_name>:<version> \
     --platform=linux/amd64,linux/arm64 .

   # 新たにビルドされたイメージをテストします
   docker run -it --rm -p 4317:4317 -p 4318:4318 \
       --name otelcol <collector_distribution_image_name>:<version>
   ```

## さらなる学びのために {#further-reading}

- [レシーバーをビルドする](/docs/collector/extend/custom-component/receiver)
- [コネクターをビルドする](/docs/collector/extend/custom-component/connector)

[ocb]: https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder
[tags]: https://github.com/open-telemetry/opentelemetry-collector-releases/tags
