第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"
| パラメーター | 説明 | 値 |
|---|---|---|
| すべてのインストルメンテーションにわたって定義する共通の環境変数。 | |
| エクスポーターの設定。 | |
| プロパゲーターは、プロセス間のコンテキスト伝播設定を定義します。 |
|
| リソース属性の設定。 | |
| サンプリング設定。 | |
| Apache HTTP Server インストルメンテーションの設定。 | |
| .NET インストルメンテーションの設定。 | |
| Go インストルメンテーションの設定。 | |
| Java インストルメンテーションの設定。 | |
| Node.js インストルメンテーションの設定。 | |
| Python インストルメンテーションの設定。 |
4.1.2. Service Mesh でのインストルメンテーション CR の使用 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service Mesh でインストルメンテーションカスタムリソース (CR) を使用する場合は、b3multi プロパゲーターを使用する必要があります。
4.1.2.1. 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.2.2. .NET 自動インストルメンテーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | 説明 |
|---|---|
| .NET に固有の環境変数。 |
| .NET SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
.NET 自動インストルメンテーションの場合、エクスポータのエンドポイントが 4317 に設定されている場合は、必須の OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を設定する必要があります。.NET 自動インストルメンテーションはデフォルトで http/proto を使用し、テレメトリーデータは 4318 ポートに設定する必要があります。
注入を有効化するための PodSpec アノテーション
instrumentation.opentelemetry.io/inject-dotnet: "true"
4.1.2.3. 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.2.4. Java 自動インストルメンテーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | 説明 |
|---|---|
| Java に固有の環境変数。 |
| Java SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
注入を有効化するための PodSpec アノテーション
instrumentation.opentelemetry.io/inject-java: "true"
4.1.2.5. 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.2.6. Python 自動インストルメンテーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
| 名前 | 説明 |
|---|---|
| Python に固有の環境変数。 |
| Python SDK と自動インストルメンテーションを備えたコンテナーイメージ。 |
| コンピュートリソースの要件。 |
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 自動インストルメンテーションは、複数コンテナーの自動インストルメンテーション注入をサポートしていません。