|
| 1 | +--- |
| 2 | +title: カスタムコレクターのビルド |
| 3 | +weight: 29 |
| 4 | +default_lang_commit: 52ef6272047483d1d4913a7e5ce8532196c58b30 |
| 5 | +# prettier-ignore |
| 6 | +cSpell:ignore: chipset darwin debugexporter gomod otlpexporter otlpreceiver wyrtw |
| 7 | +--- |
| 8 | + |
| 9 | +カスタムコレクターのレシーバー、プロセッサー、エクステンション、またはエクスポーターをビルドおよびデバッグする計画がある場合は、独自のコレクターインスタンスが必要になります。 |
| 10 | +これにより、任意のGolang IDE内でOpenTelemetry Collectorコンポーネントを直接起動およびデバッグできるようになります。 |
| 11 | + |
| 12 | +この方法でコンポーネント開発に取り組むもうひとつの興味深い側面は、IDEのすべてのデバッグ機能(スタックトレースは素晴らしい教師です!)を使用して、コレクター自体がコンポーネントのコードとどのように対話するかを理解できることです。 |
| 13 | + |
| 14 | +OpenTelemetryコミュニティは、独自のディストリビューションの組み立てを支援するために[OpenTelemetry Collector builder][ocb](略して`ocb`)と呼ばれるツールを開発しました。 |
| 15 | +これにより、公開されているコンポーネントとともにカスタムコンポーネントを含むディストリビューションを簡単にビルドできるようになります。 |
| 16 | + |
| 17 | +プロセスの一環として、`ocb`は独自のカスタムコンポーネントのビルドとデバッグに役立つコレクターのソースコードを生成します。 |
| 18 | +それでは始めましょう。 |
| 19 | + |
| 20 | +## ステップ 1 - ビルダーのインストール {#step-1---install-the-builder} |
| 21 | + |
| 22 | +{{% alert color="primary" title="注意" %}} |
| 23 | + |
| 24 | +`ocb`ツールは、コレクターのディストリビューションをビルドするためにGoを必要とします。 |
| 25 | +まだのインストールしていない場合は、マシンに[Goをインストール](https://go.dev/doc/install)してください。 |
| 26 | + |
| 27 | +{{% /alert %}} |
| 28 | + |
| 29 | +`ocb`バイナリは、OpenTelemetry Collectorの[`cmd/builder`タグが付いたリリース][tags]からダウンロード可能なアセットとして入手できます。 |
| 30 | +OSとチップセットに基づいて名前が付けられたアセットのリストがあるため、ご自身の構成に適したものをダウンロードしてください。 |
| 31 | + |
| 32 | +{{< tabpane text=true >}} |
| 33 | + |
| 34 | +{{% tab "Linux (AMD 64)" %}} |
| 35 | + |
| 36 | +```sh |
| 37 | +curl --proto '=https' --tlsv1.2 -fL -o ocb \ |
| 38 | +https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2F{{% version-from-registry collector-builder %}}/ocb_{{% version-from-registry collector-builder noPrefix %}}_linux_amd64 |
| 39 | +chmod +x ocb |
| 40 | +``` |
| 41 | + |
| 42 | +{{% /tab %}} {{% tab "Linux (ARM 64)" %}} |
| 43 | + |
| 44 | +```sh |
| 45 | +curl --proto '=https' --tlsv1.2 -fL -o ocb \ |
| 46 | +https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2F{{% version-from-registry collector-builder %}}/ocb_{{% version-from-registry collector-builder noPrefix %}}_linux_arm64 |
| 47 | +chmod +x ocb |
| 48 | +``` |
| 49 | + |
| 50 | +{{% /tab %}} {{% tab "Linux (ppc64le) "%}} |
| 51 | + |
| 52 | +```sh |
| 53 | +curl --proto '=https' --tlsv1.2 -fL -o ocb \ |
| 54 | +https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2F{{% version-from-registry collector-builder %}}/ocb_{{% version-from-registry collector-builder noPrefix %}}_linux_ppc64le |
| 55 | +chmod +x ocb |
| 56 | +``` |
| 57 | + |
| 58 | +{{% /tab %}} {{% tab "macOS (AMD 64)" %}} |
| 59 | + |
| 60 | +```sh |
| 61 | +curl --proto '=https' --tlsv1.2 -fL -o ocb \ |
| 62 | +https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2F{{% version-from-registry collector-builder %}}/ocb_{{% version-from-registry collector-builder noPrefix %}}_darwin_amd64 |
| 63 | +chmod +x ocb |
| 64 | +``` |
| 65 | + |
| 66 | +{{% /tab %}} {{% tab "macOS (ARM 64)" %}} |
| 67 | + |
| 68 | +```sh |
| 69 | +curl --proto '=https' --tlsv1.2 -fL -o ocb \ |
| 70 | +https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2F{{% version-from-registry collector-builder %}}/ocb_{{% version-from-registry collector-builder noPrefix %}}_darwin_arm64 |
| 71 | +chmod +x ocb |
| 72 | +``` |
| 73 | + |
| 74 | +{{% /tab %}} {{% tab "Windows (AMD 64)" %}} |
| 75 | + |
| 76 | +```sh |
| 77 | +Invoke-WebRequest -Uri "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/cmd%2Fbuilder%2F{{% version-from-registry collector-builder %}}/ocb_{{% version-from-registry collector-builder noPrefix %}}_windows_amd64.exe" -OutFile "ocb.exe" |
| 78 | +Unblock-File -Path "ocb.exe" |
| 79 | +``` |
| 80 | + |
| 81 | +{{% /tab %}} {{< /tabpane >}} |
| 82 | + |
| 83 | +`ocb`が使用可能であることを確認するには、ターミナルに移動して`./ocb help`と入力し、Enterキーを押すと`help`コマンドの出力がコンソールに表示されるはずです。 |
| 84 | + |
| 85 | +## ステップ 2 - ビルダーマニフェストファイルの作成 {#step-2---create-a-builder-manifest-file} |
| 86 | + |
| 87 | +ビルダーの`manifest`ファイルは`yaml`であり、コード生成とコンパイルプロセスに関する情報と、コレクターのディストリビューションに追加したいコンポーネントを組み合わせて渡します。 |
| 88 | + |
| 89 | +`manifest`は、コード生成とコンパイルプロセスの構成に役立つタグを含む`dist`という名前のマップで始まります。 |
| 90 | +実際に`dist`のすべてのタグは、`ocb`コマンドラインの`flags`に相当します。 |
| 91 | + |
| 92 | +`dist`マップのタグは次のとおりです。 |
| 93 | + |
| 94 | +| タグ | 説明 | 任意 | デフォルト値 | |
| 95 | +| ------------ | ------------------------------------------------------------------------------------------ | ---- | --------------------------------------------------------------------------------- | |
| 96 | +| module: | Go modの規約に従った、新しいディストリビューションのモジュール名。任意ですが推奨されます。 | はい | `go.opentelemetry.io/collector/cmd/builder` | |
| 97 | +| name: | ディストリビューションのバイナリ名。 | はい | `otelcol-custom` | |
| 98 | +| description: | 長いアプリケーション名。 | はい | `Custom OpenTelemetry Collector distribution` | |
| 99 | +| output_path: | 出力(ソースとバイナリ)を書き込むパス。 | はい | `/var/folders/86/s7l1czb16g124tng0d7wyrtw0000gn/T/otelcol-distribution3618633831` | |
| 100 | +| version: | カスタムOpenTelemetry Collectorのバージョン。 | はい | `1.0.0` | |
| 101 | +| go: | 生成されたソースのコンパイルに使用するGoバイナリ。 | はい | PATHから取得されるgo | |
| 102 | + |
| 103 | +上の表からわかるように、すべての`dist`タグはオプショナルであるため、カスタムコレクターディストリビューションの利用可能性を他のユーザーに提供する意図があるか、または単に`ocb`を使用してコンポーネントの開発およびテスト環境をブートストラップするだけかに応じて、それらのカスタム値を追加します。 |
| 104 | + |
| 105 | +このチュートリアルでは、コンポーネントの開発とテストをサポートするコレクターのディストリビューションを作成します。 |
| 106 | + |
| 107 | +次の内容で`builder-config.yaml`という名前のマニフェストファイルを作成します。 |
| 108 | + |
| 109 | +```yaml |
| 110 | +dist: |
| 111 | + name: otelcol-dev |
| 112 | + description: 開発者向けの基本的なOTelコレクターのディストリビューション |
| 113 | + output_path: ./otelcol-dev |
| 114 | +``` |
| 115 | +
|
| 116 | +次に、このカスタムコレクターディストリビューションに組み込みたいコンポーネントを表すモジュールを追加する必要があります。 |
| 117 | +それぞれのモジュールとコンポーネントの追加方法については、[ocb設定ドキュメント](https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder#configuration)をご覧ください。 |
| 118 | +
|
| 119 | +開発とテストのコレクターディストリビューションに次のコンポーネントを追加します。 |
| 120 | +
|
| 121 | +- エクスポーター: OTLPおよびDebug |
| 122 | +- レシーバー: OTLP |
| 123 | +- プロセッサー: Batch |
| 124 | +
|
| 125 | +`builder-config.yaml`マニフェストファイルは、コンポーネントの追加後、次のようになります。 |
| 126 | + |
| 127 | +<!-- prettier-ignore --> |
| 128 | +```yaml |
| 129 | +dist: |
| 130 | + name: otelcol-dev |
| 131 | + description: 開発者向けの基本的なOTelコレクターのディストリビューション |
| 132 | + output_path: ./otelcol-dev |
| 133 | +
|
| 134 | +exporters: |
| 135 | + - gomod: |
| 136 | + go.opentelemetry.io/collector/exporter/debugexporter {{% version-from-registry collector-exporter-debug %}} |
| 137 | + - gomod: |
| 138 | + go.opentelemetry.io/collector/exporter/otlpexporter {{% version-from-registry collector-exporter-otlp %}} |
| 139 | +
|
| 140 | +processors: |
| 141 | + - gomod: |
| 142 | + go.opentelemetry.io/collector/processor/batchprocessor {{% version-from-registry collector-processor-batch %}} |
| 143 | +
|
| 144 | +receivers: |
| 145 | + - gomod: |
| 146 | + go.opentelemetry.io/collector/receiver/otlpreceiver {{% version-from-registry collector-receiver-otlp %}} |
| 147 | +
|
| 148 | +providers: |
| 149 | + - gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.18.0 |
| 150 | + - gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.18.0 |
| 151 | + - gomod: go.opentelemetry.io/collector/confmap/provider/httpprovider v1.18.0 |
| 152 | + - gomod: go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.18.0 |
| 153 | + - gomod: go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.18.0 |
| 154 | +``` |
| 155 | + |
| 156 | +{{% alert color="primary" title="Tip" %}} |
| 157 | + |
| 158 | +カスタムコレクターに追加できるコンポーネントのリストについては、[OpenTelemetry Registry](/ecosystem/registry/?language=collector)をご覧ください。 |
| 159 | +レジストリのエントリには、`builder-config.yaml`に追加するために必要な完全な名前とバージョンが記載されていることに注意してください。 |
| 160 | + |
| 161 | +{{% /alert %}} |
| 162 | + |
| 163 | +## ステップ 3a - コードを生成し、コレクターのディストリビューションをビルドする {#step-3a---generate-the-code-and-build-your-collectors-distribution} |
| 164 | + |
| 165 | +{{% alert color="primary" title="Note" %}} |
| 166 | + |
| 167 | +このステップは、`ocb`バイナリを使用してカスタムコレクターのディストリビューションをビルドするために使用されます。 |
| 168 | +(たとえば、Kubernetesのような)コンテナオーケストレーターにカスタムコレクターのディストリビューションをビルドしてデプロイしたい場合は、このステップをスキップして[ステップ 3b](#step-3b---containerize-your-collectors-distribution)に進んでください。 |
| 169 | + |
| 170 | +{{% /alert %}} |
| 171 | + |
| 172 | +必要なのは`ocb`に仕事をさせることだけなので、ターミナルに移動して次のコマンドを入力します。 |
| 173 | + |
| 174 | +```cmd |
| 175 | +./ocb --config builder-config.yaml |
| 176 | +``` |
| 177 | + |
| 178 | +すべてが順調に進んだ場合、コマンドの出力は次のようになります。 |
| 179 | + |
| 180 | +```nocode |
| 181 | +2022-06-13T14:25:03.037-0500 INFO internal/command.go:85 OpenTelemetry Collector distribution builder {"version": "{{% version-from-registry collector-builder noPrefix %}}", "date": "2023-01-03T15:05:37Z"} |
| 182 | +2022-06-13T14:25:03.039-0500 INFO internal/command.go:108 Using config file {"path": "builder-config.yaml"} |
| 183 | +2022-06-13T14:25:03.040-0500 INFO builder/config.go:99 Using go {"go-executable": "/usr/local/go/bin/go"} |
| 184 | +2022-06-13T14:25:03.041-0500 INFO builder/main.go:76 Sources created {"path": "./otelcol-dev"} |
| 185 | +2022-06-13T14:25:03.445-0500 INFO builder/main.go:108 Getting go modules |
| 186 | +2022-06-13T14:25:04.675-0500 INFO builder/main.go:87 Compiling |
| 187 | +2022-06-13T14:25:17.259-0500 INFO builder/main.go:94 Compiled {"binary": "./otelcol-dev/otelcol-dev"} |
| 188 | +``` |
| 189 | + |
| 190 | +設定ファイルの`dist`セクションで定義されているように、現在コレクターのディストリビューションのソースコードとバイナリを含む`otelcol-dev`という名前のフォルダがあります。 |
| 191 | + |
| 192 | +フォルダ構成は次のようになります。 |
| 193 | + |
| 194 | +```console |
| 195 | +. |
| 196 | +├── builder-config.yaml |
| 197 | +├── ocb |
| 198 | +└── otelcol-dev |
| 199 | + ├── components.go |
| 200 | + ├── components_test.go |
| 201 | + ├── go.mod |
| 202 | + ├── go.sum |
| 203 | + ├── main.go |
| 204 | + ├── main_others.go |
| 205 | + ├── main_windows.go |
| 206 | + └── otelcol-dev |
| 207 | +``` |
| 208 | + |
| 209 | +生成されたコードを使用して、コンポーネント開発プロジェクトをブートストラップし、コンポーネントを使用してコレクターのディストリビューションを簡単にビルドおよび配布できるようになりました。 |
| 210 | + |
| 211 | +## ステップ 3b - コレクターのディストリビューションをコンテナ化する {#step-3b---containerize-your-collectors-distribution} |
| 212 | + |
| 213 | +{{% alert color="primary" title="注意" %}} |
| 214 | + |
| 215 | +このステップでは、`Dockerfile`内でコレクターのディストリビューションをビルドします。 |
| 216 | +(たとえば、Kubernetesのような)コンテナオーケストレーターにコレクターのディストリビューションをデプロイする必要がある場合は、このステップに従ってください。 |
| 217 | +コンテナ化せずにコレクターのディストリビューションのみをビルドしたい場合は、[ステップ 3a](#step-3a---generate-the-code-and-build-your-collectors-distribution)に進んでください。 |
| 218 | + |
| 219 | +{{% /alert %}} |
| 220 | + |
| 221 | +プロジェクトに次の2つの新しいファイルを追加する必要があります。 |
| 222 | + |
| 223 | +- `Dockerfile` - コレクターのディストリビューションのコンテナイメージ定義 |
| 224 | +- `collector-config.yaml` - ディストリビューションをテストするための最小限のコレクター構成YAML |
| 225 | + |
| 226 | +これらのファイルを追加した後、ファイルは次のようになります。 |
| 227 | + |
| 228 | +```console |
| 229 | +. |
| 230 | +├── builder-config.yaml |
| 231 | +├── collector-config.yaml |
| 232 | +└── Dockerfile |
| 233 | +``` |
| 234 | + |
| 235 | +次の`Dockerfile`は、コレクターのディストリビューションをインプレースでビルドし、結果として得られるコレクターのディストリビューションバイナリがターゲットのコンテナアーキテクチャ(たとえば、`linux/arm64`、`linux/amd64`)と一致することを保証します。 |
| 236 | + |
| 237 | +<!-- prettier-ignore-start --> |
| 238 | +```yaml |
| 239 | +FROM alpine:3.19 AS certs |
| 240 | +RUN apk --update add ca-certificates |
| 241 | +
|
| 242 | +FROM golang:1.25.0 AS build-stage |
| 243 | +WORKDIR /build |
| 244 | +
|
| 245 | +COPY ./builder-config.yaml builder-config.yaml |
| 246 | +
|
| 247 | +RUN --mount=type=cache,target=/root/.cache/go-build GO111MODULE=on go install go.opentelemetry.io/collector/cmd/builder@{{% version-from-registry collector-builder %}} |
| 248 | +RUN --mount=type=cache,target=/root/.cache/go-build builder --config builder-config.yaml |
| 249 | +
|
| 250 | +FROM gcr.io/distroless/base:latest |
| 251 | +
|
| 252 | +ARG USER_UID=10001 |
| 253 | +USER ${USER_UID} |
| 254 | +
|
| 255 | +COPY ./collector-config.yaml /otelcol/collector-config.yaml |
| 256 | +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt |
| 257 | +COPY --chmod=755 --from=build-stage /build/otelcol-dev /otelcol |
| 258 | +
|
| 259 | +ENTRYPOINT ["/otelcol/otelcol-dev"] |
| 260 | +CMD ["--config", "/otelcol/collector-config.yaml"] |
| 261 | +
|
| 262 | +EXPOSE 4317 4318 12001 |
| 263 | +``` |
| 264 | +<!-- prettier-ignore-end --> |
| 265 | + |
| 266 | +最小限の`collector-config.yaml`定義は次のとおりです。 |
| 267 | + |
| 268 | +```yaml |
| 269 | +receivers: |
| 270 | + otlp: |
| 271 | + protocols: |
| 272 | + grpc: |
| 273 | + endpoint: 0.0.0.0:4317 |
| 274 | + http: |
| 275 | + endpoint: 0.0.0.0:4318 |
| 276 | +
|
| 277 | +exporters: |
| 278 | + debug: |
| 279 | + verbosity: detailed |
| 280 | +
|
| 281 | +service: |
| 282 | + pipelines: |
| 283 | + traces: |
| 284 | + receivers: [otlp] |
| 285 | + exporters: [debug] |
| 286 | + metrics: |
| 287 | + receivers: [otlp] |
| 288 | + exporters: [debug] |
| 289 | + logs: |
| 290 | + receivers: [otlp] |
| 291 | + exporters: [debug] |
| 292 | +``` |
| 293 | + |
| 294 | +次のコマンドを使用して、`linux/amd64`と`linux/arm64`をターゲットビルドアーキテクチャとして使用して、OCBのマルチアーキテクチャDockerイメージをビルドします。 |
| 295 | +より詳しくは、マルチアーキテクチャビルドに関するこの[ブログ記事](https://blog.jaimyn.dev/how-to-build-multi-architecture-docker-images-on-an-m1-mac/)をご覧ください。 |
| 296 | + |
| 297 | +```bash |
| 298 | +# Dockerマルチアーキテクチャビルドを有効にする |
| 299 | +docker run --rm --privileged tonistiigi/binfmt --install all |
| 300 | +docker buildx create --name mybuilder --use |
| 301 | +
|
| 302 | +# DockerイメージをLinux AMDおよびARMとしてビルドし、ビルド結果を「docker images」にロードします |
| 303 | +docker buildx build --load \ |
| 304 | + -t <collector_distribution_image_name>:<version> \ |
| 305 | + --platform=linux/amd64,linux/arm64 . |
| 306 | +
|
| 307 | +# 新たにビルドされたイメージをテストします |
| 308 | +docker run -it --rm -p 4317:4317 -p 4318:4318 \ |
| 309 | + --name otelcol <collector_distribution_image_name>:<version> |
| 310 | +``` |
| 311 | + |
| 312 | +## さらなる学びのために {#further-reading} |
| 313 | + |
| 314 | +- [トレースレシーバーをビルドする](/docs/collector/building/receiver) |
| 315 | +- [コネクターをビルドする](/docs/collector/building/connector) |
| 316 | + |
| 317 | +[ocb]: https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder |
| 318 | +[tags]: https://github.com/open-telemetry/opentelemetry-collector-releases/tags |
0 commit comments