第4章 OpenTelemetry インストルメンテーション注入の設定とデプロイ
OpenTelemetry インストルメンテーション注入はテクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではない場合があります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Red Hat build of OpenTelemetry Operatorは、インストルメンテーションの設定を定義するカスタムリソース定義 (CRD) ファイルを使用します。
4.1. OpenTelemetry インストルメンテーション設定オプション
Red Hat build of OpenTelemetry では、OpenTelemetry 自動インストルメンテーションライブラリーをワークロードに注入して設定できます。現在、プロジェクトは、Go、Java、Node.js、Python、.NET、および Apache HTTP Server (httpd
) からのインストルメンテーションライブラリーの注入をサポートしています。
OpenTelemetry の自動インストルメンテーションとは、コードを手動で変更することなく、フレームワークがアプリケーションを自動的にインストルメンテーションする機能を指します。これにより、開発者と管理者は、最小限の労力と既存のコードベースへの変更で、アプリケーションに可観測性を導入できるようになります。
Red Hat build of OpenTelemetry Operatorは、インストルメンテーションライブラリーの注入メカニズムのみをサポートしますが、インストルメンテーションライブラリーやアップストリームイメージはサポートしません。お客様は独自のインストルメンテーションイメージをビルドすることも、コミュニティーイメージを使用することもできます。
4.1.1. インストルメンテーションオプション
インストルメンテーションオプションは、OpenTelemetryCollector
カスタムリソースで指定されます。
OpenTelemetryCollector
カスタムリソースファイルのサンプル
apiVersion: opentelemetry.io/v1alpha1 kind: Instrumentation metadata: name: java-instrumentation spec: env: - name: OTEL_EXPORTER_OTLP_TIMEOUT value: "20" exporter: endpoint: http://production-collector.observability.svc.cluster.local:4317 propagators: - w3c sampler: type: parentbased_traceidratio argument: "0.25" java: env: - name: OTEL_JAVAAGENT_DEBUG value: "true"
パラメーター | 説明 | 値 |
---|---|---|
env | すべてのインストルメンテーションにわたって定義する共通の環境変数。 | |
exporter | エクスポーターの設定。 | |
propagators | プロパゲーターは、プロセス間のコンテキスト伝播設定を定義します。 |
|
resource | リソース属性の設定。 | |
sampler | サンプリング設定。 | |
apacheHttpd | Apache HTTP Server インストルメンテーションの設定。 | |
dotnet | .NET インストルメンテーションの設定。 | |
go | Go インストルメンテーションの設定。 | |
java | Java インストルメンテーションの設定。 | |
nodejs | Node.js インストルメンテーションの設定。 | |
python | Python インストルメンテーションの設定。 |
4.1.2. Service Mesh でのインストルメンテーション CR の使用
Red Hat OpenShift Service Mesh でインストルメンテーションカスタムリソース (CR) を使用する場合は、b3multi
プロパゲーターを使用する必要があります。
4.1.2.1. Apache HTTP Server の自動インストルメンテーションの設定
名前 | 説明 | デフォルト |
---|---|---|
attrs | Apache HTTP Server に固有の属性。 | |
configPath | Apache HTTP Server 設定の場所。 | /usr/local/apache2/conf |
env | Apache HTTP Server に固有の環境変数。 | |
image | Apache SDK と自動インストルメンテーションを備えたコンテナーイメージ。 | |
resourceRequirements | コンピュートリソースの要件。 | |
version | Apache HTTP Server のバージョン。 | 2.4 |
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-apache-httpd: "true"
4.1.2.2. .NET 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
env | .NET に固有の環境変数。 |
image | .NET SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
resourceRequirements | コンピュートリソースの要件。 |
.NET 自動インストルメンテーションの場合、エクスポータのエンドポイントが 4317
に設定されている場合は、必須の OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を設定する必要があります。.NET 自動インストルメンテーションはデフォルトで http/proto
を使用し、テレメトリーデータは 4318
ポートに設定する必要があります。
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-dotnet: "true"
4.1.2.3. Go 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
env | Go に固有の環境変数。 |
image | Go SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
resourceRequirements | コンピュートリソースの要件。 |
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-go: "true"
OpenShift クラスターの Go 自動インストルメンテーションに必要な追加の権限
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: otel-go-instrumentation-scc allowHostDirVolumePlugin: true allowPrivilegeEscalation: true allowPrivilegedContainer: true allowedCapabilities: - "SYS_PTRACE" fsGroup: type: RunAsAny runAsUser: type: RunAsAny seLinuxContext: type: RunAsAny seccompProfiles: - '*' supplementalGroups: type: RunAsAny
OpenShift クラスターで Go 自動インストルメンテーションの権限を適用するための CLI コマンドは次のとおりです。
$ oc adm policy add-scc-to-user otel-go-instrumentation-scc -z <service_account>
4.1.2.4. Java 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
env | Java に固有の環境変数。 |
image | Java SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
resourceRequirements | コンピュートリソースの要件。 |
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-java: "true"
4.1.2.5. Node.js 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
env | Node.js に固有の環境変数。 |
image | Node.js SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
resourceRequirements | コンピュートリソースの要件。 |
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-nodejs: "true" instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/path/to/container/executable"
instrumentation.opentelemetry.io/otel-go-auto-target-exe
アノテーションは、必要な OTEL_GO_AUTO_TARGET_EXE
環境変数の値を設定します。
4.1.2.6. Python 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
env | Python に固有の環境変数。 |
image | Python SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
resourceRequirements | コンピュートリソースの要件。 |
Python 自動インストルメンテーションの場合、エクスポーターのエンドポイントが 4317
に設定されている場合は、OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を設定する必要があります。Python 自動インストルメンテーションはデフォルトで http/proto
を使用し、テレメトリーデータは 4318
ポートに設定する必要があります。
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-python: "true"
4.1.2.7. OpenTelemetry SDK 変数の設定
Pod 内の OpenTelemetry SDK 変数は、次のアノテーションを使用して設定できます。
instrumentation.opentelemetry.io/inject-sdk: "true"
すべてのアノテーションは、以下の値を受け入れることに注意してください。
true
-
namespace からインストル
Instrumentation
リソースを注入します。 false
- インストルメンテーションはいっさい注入しません。
instrumentation-name
- 現在の namespace から注入するインストルメンテーションリソースの名前。
other-namespace/instrumentation-name
- 別の namespace から注入するインストルメンテーションリソースの名前。
4.1.2.8. マルチコンテナー Pod
インストルメンテーションは、Pod の仕様に従ってデフォルトで利用可能な最初のコンテナー上で実行されます。場合によっては、注入のターゲットコンテナーを指定することもできます。
Pod のアノテーション
instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>"
Go 自動インストルメンテーションは、複数コンテナーの自動インストルメンテーション注入をサポートしていません。