第4章 インストルメンテーションの設定
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. インストルメンテーションオプション
計装オプションは、Instrumentation
カスタムリソース (CR) で指定されます。
サンプル Instrumentation
CR
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"
パラメーター | 説明 | 値 |
---|---|---|
| すべてのインストルメンテーションにわたって定義する共通の環境変数。 | |
| エクスポーターの設定。 | |
| プロパゲーターは、プロセス間のコンテキスト伝播設定を定義します。 |
|
| リソース属性の設定。 | |
| サンプリング設定。 | |
| Apache HTTP Server インストルメンテーションの設定。 | |
| .NET インストルメンテーションの設定。 | |
| Go インストルメンテーションの設定。 | |
| Java インストルメンテーションの設定。 | |
| Node.js インストルメンテーションの設定。 | |
| Python インストルメンテーションの設定。 |
4.1.2. Apache HTTP Server の自動インストルメンテーションの設定
名前 | 説明 | デフォルト |
---|---|---|
| Apache HTTP Server に固有の属性。 | |
| Apache HTTP Server 設定の場所。 | /usr/local/apache2/conf |
| Apache HTTP Server に固有の環境変数。 | |
| Apache SDK と自動インストルメンテーションを備えたコンテナーイメージ。 | |
| コンピュートリソースの要件。 | |
| Apache HTTP Server のバージョン。 | 2.4 |
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-apache-httpd: "true"
4.1.3. .NET 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
| .NET に固有の環境変数。 |
| .NET SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
.NET 自動インストルメンテーションの場合、エクスポータのエンドポイントが 4317
に設定されている場合は、必須の OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を設定する必要があります。.NET 自動インストルメンテーションはデフォルトで http/proto
を使用し、テレメトリーデータは 4318
ポートに設定する必要があります。
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-dotnet: "true"
4.1.4. Go 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
| Go に固有の環境変数。 |
| Go SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
注入を有効化するための 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.5. Java 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
| Java に固有の環境変数。 |
| Java SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-java: "true"
4.1.6. Node.js 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
| Node.js に固有の環境変数。 |
| Node.js SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
注入を有効化するための 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.7. Python 自動インストルメンテーションの設定
名前 | 説明 |
---|---|
| Python に固有の環境変数。 |
| Python SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
Python 自動インストルメンテーションの場合、エクスポーターのエンドポイントが 4317
に設定されている場合は、OTEL_EXPORTER_OTLP_ENDPOINT
環境変数を設定する必要があります。Python 自動インストルメンテーションはデフォルトで http/proto
を使用し、テレメトリーデータは 4318
ポートに設定する必要があります。
注入を有効化するための PodSpec
アノテーション
instrumentation.opentelemetry.io/inject-python: "true"
4.1.8. 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.9. マルチコンテナー Pod
インストルメンテーションは、Pod の仕様に従ってデフォルトで利用可能な最初のコンテナー上で実行されます。場合によっては、注入のターゲットコンテナーを指定することもできます。
Pod のアノテーション
instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>"
Go 自動インストルメンテーションは、複数コンテナーの自動インストルメンテーション注入をサポートしていません。
4.1.10. Service Mesh でのインストルメンテーション CR の使用
Red Hat OpenShift Service Mesh でインストルメンテーションカスタムリソース (CR) を使用する場合は、b3multi
プロパゲーターを使用する必要があります。