この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

Kubernetes上でのOpenTelemetryの始め方

このガイドでは、アプリケーションの監視に関する手順を提供します。

  • クラスターAで実行されている監視対象のアプリケーション/ワークロード。

  • クラスターA内の監視対象アプリケーションの近くで実行されるOpenTelemetryコレクターが、データをSUSE® Observabilityに送信します。

  • クラスターBで実行されているSUSE® Observability、またはSUSE Cloud Observability。

Kubernetesデプロイメントとして実行されるコレクターを介したOpenTelemetryによるコンテナの計測

OpenTelemetryコレクター

本番環境のセットアップでは、コレクターをインストールすることを強く推奨します。これにより、サービスがデータを迅速にオフロードでき、コレクターが再試行、バッチ処理、暗号化、さらには機密データのフィルタリングなどの追加処理を行うことができます。

クラスターAにOTel(OpenTelemetry)コレクターをインストールし、次のように設定します:

  • 多くの計測されたアプリケーションからデータを受信します。

  • 収集したデータにKubernetesの属性を付加します。

  • トレースのメトリクスを生成します。

  • APIキーを使用して認証を含むデータをSUSE® Observabilityに転送します。

SUSE® Observabilityは接続に問題がある場合、データの送信を再試行します。

サービストークンを作成する

サービストークンを作成するには、次の2つの方法があります:

  • SUSE® Observability UI - 画面の左上をクリックしてメインメニューを開き、StackPacks > `Open Telemetry`に移動します。 まだ行っていない場合は、`INSTALL`ボタンをクリックします。`CREATE NEW SERVICE TOKEN`ボタンをクリックし、値をクリップボードにコピーします。

  • SUSE® Observability CLI - サービストークンの管理を参照してください。

サービストークンの値は、以下の指示で <SERVICE_TOKEN> に言及されている場所で使用する必要があります。

サービストークンのためのネームスペースとシークレットを作成します。

`open-telemetry`ネームスペースにインストールし、サービストークンを使用します:

kubectl create namespace open-telemetry
kubectl create secret generic open-telemetry-collector \
    --namespace open-telemetry \
    --from-literal=API_KEY='<SERVICE_TOKEN>'

コレクターを設定してインストールします。

私たちは、Open Telemetry プロジェクトが提供する Helm チャートを使用してコレクターをインストールします。Open Telemetry Helm チャートリポジトリが設定されていることを確認してください:

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts

Helm チャート用の otel-collector.yaml 値ファイルを作成します。SUSE® Observability での使用に適した良い出発点はここです。<otlp-suse-observability-endpoint:port> をあなたの OTLP エンドポイントに置き換え(エンドポイントについては OTLP API を参照)、<your-cluster-name> の代わりに Kubernetes クラスターの名前を挿入してください:

otel-collector.yaml
# Set the API key from the secret as an env var:
extraEnvsFrom:
  - secretRef:
      name: open-telemetry-collector
mode: deployment
image:
  # Use the collector container image that has all components important for k8s. In case of missing components the ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib image can be used which
  # has all components in the contrib repository: https://github.com/open-telemetry/opentelemetry-collector-contrib
  repository: "ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s"
ports:
  metrics:
    enabled: true
presets:
  kubernetesAttributes:
    enabled: true
    extractAllPodLabels: true
# This is the config file for the collector:
config:
  receivers:
    otlp:
      protocols:
        grpc:
          endpoint: 0.0.0.0:4317
        http:
          endpoint: 0.0.0.0:4318
    # Scrape the collectors own metrics
    prometheus:
      config:
        scrape_configs:
        - job_name: opentelemetry-collector
          scrape_interval: 10s
          static_configs:
          - targets:
            - ${env:MY_POD_IP}:8888
  extensions:
    # Use the API key from the env for authentication
    bearertokenauth:
      scheme: SUSEObservability
      token: "${env:API_KEY}"
  exporters:
    nop: {}
    otlp/suse-observability:
      auth:
        authenticator: bearertokenauth
      # Put in your own otlp endpoint, for example otlp-suse-observability.my.company.com:443
      endpoint: <otlp-suse-observability-endpoint:port>
      compression: snappy
  processors:
    memory_limiter:
      check_interval: 5s
      limit_percentage: 80
      spike_limit_percentage: 25
    batch: {}
    resource:
      attributes:
      - key: k8s.cluster.name
        action: upsert
        # Insert your own cluster name
        value: <your-cluster-name>
      - key: service.instance.id
        from_attribute: k8s.pod.uid
        action: insert
        # Use the k8s namespace also as the open telemetry namespace
      - key: service.namespace
        from_attribute: k8s.namespace.name
        action: insert
  connectors:
    # Generate metrics for spans
    spanmetrics:
      metrics_expiration: 5m
      namespace: otel_span
  service:
    extensions: [ health_check,  bearertokenauth ]
    pipelines:
      traces:
        receivers: [otlp]
        processors: [memory_limiter, resource, batch]
        exporters: [debug, spanmetrics, otlp/suse-observability]
      metrics:
        receivers: [otlp, spanmetrics, prometheus]
        processors: [memory_limiter, resource, batch]
        exporters: [debug, otlp/suse-observability]
      logs:
        receivers: [otlp]
        processors: []
        exporters: [nop]
    telemetry:
      metrics:
        address: ${env:MY_POD_IP}:8888

SUSE® Observability エージェントのインストール時に使用したものと同じクラスター名を、Kubernetes スタックパックと SUSE® Observability エージェントを併用する場合にも使用してください。異なるクラスター名を使用すると、Kubernetes コンポーネントのトレースの視点が空になり、SUSE® Observability とあなたのユーザーにとって情報を相関させることが非常に難しくなります。

設定ファイルを使ってコレクターをインストールします。

helm upgrade --install opentelemetry-collector open-telemetry/opentelemetry-collector \
  --values otel-collector.yaml \
  --namespace open-telemetry

コレクターは、さらに多くのレシーバー、プロセッサー、エクスポーターの設定が可能です。詳細については、コレクターページ を参照してください。本番使用では、しばしば大量のスパンが生成されます。したがって、サンプリング を設定します。

アプリケーションからテレメトリデータを収集します。

テレメトリデータを収集する一般的な方法は、Open Telemetry SDK を使用してアプリケーションを計測することです。

他の言語については、https://opentelemetry.io/docs/languages/[opentelemetry.io] のドキュメントに従い、これらの指示に従ってSDKエクスポーターを設定し、先ほどインストールしたコレクターにデータを送信するようにしてください。

結果を表示します。

SUSE® Observability に移動し、Open Telemetry スタックパックがインストールされていることを確認してください(メインメニュー -> スタックパック経由)。

ポッドにトラフィックがある場合は、Open Telemetry のサービスおよびサービスインスタンスの概要で、サービス名の下にそれらを見つけることができるはずです。トレースは、サービスおよびサービスインスタンスのコンポーネントの トレースエクスプローラー および トレースの視点 に表示されます。スパンメトリクスおよび言語特有のメトリクス(利用可能な場合)は、コンポーネントの メトリクスの視点 で利用可能になります。

Kubernetes スタックパックがインストールされている場合、計測されたポッドも トレースの視点 でトレースを利用できるようになります。

Rancher RBAC

Rancher RBACが機能するためには、テレメトリデータに以下のリソース属性が含まれている必要があります:

  • k8s.cluster.name - Kubernetesスタックパックで使用される*クラスター名*

  • k8s.namespace.name - Rancher の プロジェクト によって管理される ネームスペース

これは、上記のような設定によって達成できます。 ここで、kubernetesAttributesopentelemetry-collector Helm チャートのプリセットが各パイプラインに k8sattributes プロセッサを注入します。

次のステップ

アプリケーションのサービスやサービスインスタンスなどのコンポーネントに新しいチャートを追加するには、当社のガイドに従ってください。メトリクスを使用して新しいモニターを作成し、アプリケーションが利用できない場合やパフォーマンスの問題が発生した場合に通知を受け取るために通知をセットアップすることも可能です。