第4章 インストルメンテーションの設定


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"

表4.1 Operator が計装を定義するために使用するパラメーター
パラメーター説明

env

すべての計装にわたって定義する共通の環境変数。

 

exporter

エクスポーターの設定。

 

propagators

プロパゲーターは、プロセス間のコンテキスト伝播設定を定義します。

tracecontextbaggageb3b3multijaegerottracenone

resource

リソース属性の設定。

 

sampler

サンプリング設定。

 

apacheHttpd

Apache HTTP Server 計装の設定。

 

dotnet

.NET 計装の設定。

 

Go

Go 計装の設定。

 

java

Java 計装の設定。

 

nodejs

Node.js 計装の設定。

 

python

Python 計装の設定。

 
表4.2 自動計装のデフォルトプロトコル
自動計装デフォルトプロトコル

Java 1.x

otlp/grpc

Java 2.x

otlp/http

Python

otlp/http

.NET

otlp/http

Go

otlp/http

Apache HTTP サーバー

otlp/grpc

4.1.2. OpenTelemetry SDK 変数の設定

OpenTelemetry Collector カスタムリソースの instrumentation.opentelemetry.io/inject-sdk アノテーションを使用すると、Instrumentation CR に応じて、次の OpenTelemetry SDK 環境変数を Pod に注入するように Red Hat build of OpenTelemetry に指示できます。

  • OTEL_SERVICE_NAME
  • OTEL_TRACES_SAMPLER
  • OTEL_TRACES_SAMPLER_ARG
  • OTEL_PROPAGATORS
  • OTEL_RESOURCE_ATTRIBUTES
  • OTEL_EXPORTER_OTLP_ENDPOINT
  • OTEL_EXPORTER_OTLP_CERTIFICATE
  • OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE
  • OTEL_EXPORTER_OTLP_CLIENT_KEY
表4.3 instrumentation.opentelemetry.io/inject-sdk アノテーションの値
説明

"true"

現在の namespace からデフォルト名を使用して Instrumentation リソースを注入します。

"false"

Instrumentation リソースは注入されません。

"<instrumentation_name>"

現在の namespace から注入する Instrumentation リソースの名前。

"<namespace>/<instrumentation_name>"

別の namespace から注入する Instrumentation リソースの名前。

4.1.3. エクスポーターの設定

Instrumentation カスタムリソースは、シグナルごとに 1 つ以上のエクスポーターの設定をサポートしていますが、自動計装によって設定されるのは OTLP Exporter だけです。したがって、Collector 上の OTLP Receiver を参照するようにエンドポイントを設定する必要があります。

config map を使用したサンプルエクスポーターの TLS CA の設定

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
# ...
spec
# ...
  exporter:
    endpoint: https://production-collector.observability.svc.cluster.local:4317  1
    tls:
      configMapName: ca-bundle  2
      ca_file: service-ca.crt 3
# ...

1
HTTPS スキームと TLS を使用して OTLP エンドポイントを指定します。
2
config map の名前を指定します。自動計装を注入する Pod の namespace に、config map がすでに存在している必要があります。
3
config map 内の CA 証明書を参照します。証明書がワークロードファイルシステムにすでに存在する場合は、証明書への絶対パスを参照します。

シークレットを使用したサンプルエクスポーターの mTLS の設定

apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
# ...
spec
# ...
  exporter:
    endpoint: https://production-collector.observability.svc.cluster.local:4317  1
    tls:
      secretName: serving-certs 2
      ca_file: service-ca.crt 3
      cert_file: tls.crt 4
      key_file: tls.key 5
# ...

1
HTTPS スキームと TLS を使用して OTLP エンドポイントを指定します。
2
ca_filecert_file、および key_file 値のシークレットの名前を指定します。自動計装を注入する Pod の namespace に、シークレットがすでに存在している必要があります。
3
シークレット内の CA 証明書を参照します。証明書がワークロードファイルシステムにすでに存在する場合は、証明書への絶対パスを参照します。
4
シークレット内の CA 証明書を参照します。証明書がワークロードファイルシステムにすでに存在する場合は、証明書への絶対パスを参照します。
5
シークレット内のクライアント鍵を参照します。鍵がワークロードファイルシステムにすでに存在する場合は、鍵への絶対パスを参照します。
注記

CA 証明書は config map またはシークレットで提供できます。両方で指定した場合、config map がシークレットよりも優先されます。

config map と Instrumentation CR を使用した CA バンドル注入の設定例

apiVersion: v1
kind: ConfigMap
metadata:
  name: otelcol-cabundle
  namespace: tutorial-application
  annotations:
    service.beta.openshift.io/inject-cabundle: "true"
# ...
---
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: my-instrumentation
spec:
  exporter:
    endpoint: https://simplest-collector.tracing-system.svc.cluster.local:4317
    tls:
      configMapName: otelcol-cabundle
      ca: service-ca.crt
# ...

4.1.4. Apache HTTP Server の自動計装の設定

重要

Apache HTTP Server の自動計装はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

表4.4 .spec.apacheHttpd フィールドのパラメーター
名前説明デフォルト

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.5. .NET 自動計装の設定

重要

.NET 自動計装はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

重要

デフォルトでは、この機能はサポート対象外のアップストリームの計装ライブラリーを注入します。

名前説明

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.6. Go 自動計装の設定

重要

Go 自動計装はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

重要

デフォルトでは、この機能はサポート対象外のアップストリームの計装ライブラリーを注入します。

名前説明

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.7. Java 自動計装の設定

重要

Java 自動計装はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

重要

デフォルトでは、この機能はサポート対象外のアップストリームの計装ライブラリーを注入します。

名前説明

env

Java に固有の環境変数。

image

Java SDK と自動インストルメンテーションを備えたコンテナーイメージ。

resourceRequirements

コンピュートリソースの要件。

注入を有効化するための PodSpec アノテーション

instrumentation.opentelemetry.io/inject-java: "true"

4.1.8. Node.js 自動計装の設定

重要

Node.js 自動計装はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

重要

デフォルトでは、この機能はサポート対象外のアップストリームの計装ライブラリーを注入します。

名前説明

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.9. Python 自動計装の設定

重要

Python 自動計装はテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

重要

デフォルトでは、この機能はサポート対象外のアップストリームの計装ライブラリーを注入します。

名前説明

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.10. マルチコンテナー Pod

インストルメンテーションは、Pod の仕様に従ってデフォルトで利用可能な最初のコンテナー上で実行されます。場合によっては、注入のターゲットコンテナーを指定することもできます。

Pod のアノテーション

instrumentation.opentelemetry.io/container-names: "<container_1>,<container_2>"

注記

Go 自動インストルメンテーションは、複数コンテナーの自動インストルメンテーション注入をサポートしていません。

4.1.11. 複数の計装を使用するマルチコンテナー Pod

マルチコンテナー Pod 内の 1 つ以上のコンテナーにアプリケーション言語の計装を注入するには、次のアノテーションが必要です。

instrumentation.opentelemetry.io/<application_language>-container-names: "<container_1>,<container_2>" 1
1
注入できる計装は、コンテナーごとに 1 つの言語の計装だけです。サポートされている <application_language> 値のリストについては、次の表を参照してください。
表4.5 <application_language> でサポートされている値
言語<application_language> の値

ApacheHTTPD

apache

DotNet

dotnet

Java

java

NGINX

inject-nginx

NodeJS

nodejs

Python

python

SDK

sdk

4.1.12. Service Mesh でのインストルメンテーション CR の使用

Red Hat OpenShift Service Mesh でインストルメンテーションカスタムリソース (CR) を使用する場合は、b3multi プロパゲーターを使用する必要があります。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.