OpenTelemetryコレクターチャート
はじめに
OpenTelemetryコレクターは、Kubernetesクラスタとその中のすべてのサービスを監視するための重要なツールです。 Kubernetesへのコレクターのデプロイメントを容易にし、管理するために、OpenTelemetryコミュニティはOpenTelemetryコレクターHelmチャートを作成しました。 このHelmチャートは、コレクターをデプロイメント、DaemonSet、またはStatefulSetとしてインストールするために使用できます。
チャートのインストール
リリース名 my-opentelemetry-collector
のチャートをインストールするには、以下のコマンドを実行します。
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install my-opentelemetry-collector open-telemetry/opentelemetry-collector \
--set image.repository="otel/opentelemetry-collector-k8s" \
--set mode=<daemonset|deployment|statefulset> \
設定
OpenTelemetryコレクターチャートでは mode
が設定されている必要があります。
mode
には、ユースケースに応じたKubernetesデプロイメントに依存して daemonset
、 deployment
、 statefulset
のいずれかを指定します。
インストールされると、チャートはいくつかのデフォルトのコレクターコンポーネントを提供します。 デフォルトでは、コレクターの設定は以下のようになります。
exporters:
# 注意: v0.86.0 より前のバージョンでは、`debug` のかわりに `logging` を使用すること
debug: {}
extensions:
health_check: {}
processors:
batch: {}
memory_limiter:
check_interval: 5s
limit_percentage: 80
spike_limit_percentage: 25
receivers:
jaeger:
protocols:
grpc:
endpoint: ${env:MY_POD_IP}:14250
thrift_compact:
endpoint: ${env:MY_POD_IP}:6831
thrift_http:
endpoint: ${env:MY_POD_IP}:14268
otlp:
protocols:
grpc:
endpoint: ${env:MY_POD_IP}:4317
http:
endpoint: ${env:MY_POD_IP}:4318
prometheus:
config:
scrape_configs:
- job_name: opentelemetry-collector
scrape_interval: 10s
static_configs:
- targets:
- ${env:MY_POD_IP}:8888
zipkin:
endpoint: ${env:MY_POD_IP}:9411
service:
extensions:
- health_check
pipelines:
logs:
exporters:
- debug
processors:
- memory_limiter
- batch
receivers:
- otlp
metrics:
exporters:
- debug
processors:
- memory_limiter
- batch
receivers:
- otlp
- prometheus
traces:
exporters:
- debug
processors:
- memory_limiter
- batch
receivers:
- otlp
- jaeger
- zipkin
telemetry:
metrics:
address: ${env:MY_POD_IP}:8888
また、このチャートはデフォルトのレシーバーに基づいてポートを有効にします。
デフォルトの設定は values.yaml
で null
に設定することで削除できます。
ポートも values.yaml
で無効にできます。
values.yaml
の config
セクションを使用して、設定の任意の部分を追加/変更できます。
パイプラインを変更する場合は、デフォルトのコンポーネントを含め、パイプラインに含まれるすべてのコンポーネントを明示的にリストアップする必要があります。
たとえば、メトリクスとロギングパイプラインと非OTLPレシーバーを無効にするには次のように設定します。
config:
receivers:
jaeger: null
prometheus: null
zipkin: null
service:
pipelines:
traces:
receivers:
- otlp
metrics: null
logs: null
ports:
jaeger-compact:
enabled: false
jaeger-thrift:
enabled: false
jaeger-grpc:
enabled: false
zipkin:
enabled: false
チャートで利用可能なすべての設定オプション(コメント付き)は、そのvalues.yamlファイルで確認できます。
プリセット
OpenTelemetryコレクターがKubernetesを監視するために使用する重要なコンポーネントの多くは、コレクター自身のKubernetesデプロイメントで特別なセットアップを必要とします。 これらのコンポーネントをより簡単に使用するために、OpenTelemetryコレクターチャートには、有効にするとこれらの重要なコンポーネントの複雑なセットアップを処理するいくつかのプリセットが付属しています。
プリセットは出発点として使用されるべきです。 プリセットは、関連するコンポーネントの基本的な、しかし豊富な機能を設定します。 これらのコンポーネントの追加設定が必要な場合は、プリセットは使用せず、コンポーネントとそれに必要なもの(ボリューム、RBACなど)を手動で設定することをおすすめします。
ログコレクションプリセット
OpenTelemetryコレクターは、Kubernetesコンテナによって標準出力に送られるログを収集するために使用できます。
この機能はデフォルトでは無効になっています。 安全に有効にするためには以下の条件があります。
- ファイルログレシーバーがコレクターのContribディストリビューションなどのコレクターイメージに含まれている必要があります。
- 厳密な要件ではありませんが、このプリセットは
mode=daemonset
と共に使用することを推奨します。filelogreceiver
はコレクターが動作しているノード上のログのみを収集することができ、同じノード上に設定された複数のコレクターは重複したデータを生成します。
この機能を有効にするには、presets.logsCollection.enabled
プロパティを true
に設定します。
有効にすると、チャートは logs
パイプラインに filelogreceiver
を追加します。
このレシーバーは、Kubernetes コンテナランタイムがすべてのコンテナのコンソール出力を書き込むファイル(/var/log/pods/*/*.log
)を読み込むように設定されます。
以下に values.yaml
の例を示します。
mode: daemonset
presets:
logsCollection:
enabled: true
チャートのデフォルトのログパイプラインは debugexporter
を使用します。
logsCollection
プリセットの filelogreceiver
と組み合わせると、エクスポートしたログを誤ってコレクターに戻してしまい、「ログの爆発」を引き起こす可能性があります。
ループを防止するために、レシーバーのデフォルト設定ではコレクター自身のログを除外しています。
コレクターのログを含めたい場合は、 debug
エクスポーターをコレクターの標準出力にログを送信しないエクスポーターに置き換えてください。
以下は values.yaml
の例で、logs
パイプラインのデフォルトの debug
エクスポーターを、コンテナのログを https://example.com:55681
エンドポイントに送信する otlphttp
エクスポーターに置き換えたものです。
また、presets.logsCollection.includeCollectorLogs
を使用して、コレクターのログの収集を有効にするようにプリセットに指示します。
mode: daemonset
presets:
logsCollection:
enabled: true
includeCollectorLogs: true
config:
exporters:
otlphttp:
endpoint: https://example.com:55681
service:
pipelines:
logs:
exporters:
- otlphttp
Kubernetes属性プリセット
OpenTelemetryコレクター は k8s.pod.name
、k8s.namespace.name
、k8s.node.name
などの Kubernetes メタデータをログ、メトリクス、トレースに追加するように設定できます。
プリセットを使用するか、手動で k8sattributesprocessor
を有効にすることを強く推奨します。
RBACを考慮し、この機能はデフォルトでは無効になっています。 この機能には以下の要件があります。
- Kubernetes属性プロセッサーがコレクターのContribディストリビューションなどのコレクターイメージに含まれている必要があります。
この機能を有効にするには、presets.kubernetesAttributes.enabled
プロパティを true
に設定します。
有効にすると、チャートはClusterRoleに必要なRBACロールを追加し、有効にした各パイプラインに k8sattributesprocessor
を追加します。
以下に values.yaml
の例を示します。
mode: daemonset
presets:
kubernetesAttributes:
enabled: true
Kubeletメトリクスプリセット
OpenTelemetryコレクター は、kubelet 上の API サーバーからノード、ポッド、コンテナのメトリクスを収集するように設定できます。
この機能はデフォルトでは無効になっています。 この機能には以下の条件があります。
- KubeletstatsレシーバーがコレクターのContribディストリビューションなどのコレクターイメージに含まれている必要があります。
- 厳密な要件ではありませんが、このプリセットは
mode=daemonset
と共に使用することを推奨します。kubeletstatsreceiver
はコレクターが動作しているノードでのみメトリクスを収集することができ、同じノードに複数の設定されたコレクターがあると重複したデータが生成されます。
この機能を有効にするには、presets.kubeletMetrics.enabled
プロパティを true
に設定します。
有効にすると、チャートはClusterRoleに必要なRBACロールを追加し、メトリクスパイプラインに kubeletstatsreceiver
を追加します。
以下にvalues.yaml
の例を示します。
mode: daemonset
presets:
kubeletMetrics:
enabled: true
クラスターメトリクスプリセット
OpenTelemetryコレクターは、Kubernetes APIサーバーからクラスタレベルのメトリクスを収集するように設定できます。 これらのメトリクスには、Kube State Metricsで収集されるメトリクスの多くが含まれます。
この機能はデフォルトでは無効になっています。 この機能には以下の条件があります。
- KubernetesクラスターレシーバーがコレクターのContribディストリビューションなどのコレクターイメージに含まれている必要があります。
- 厳密な要件ではありませんが、このプリセットは
mode=deployment
またはmode=statefulset
と共に単一のレプリカで使用することを推奨します。 複数のコレクターでk8sclusterreceiver
を実行すると、重複したデータが生成されます。
この機能を有効にするには、 presets.clusterMetrics.enabled
プロパティを true
に設定します。
有効にすると、チャートは必要なRBACロールをClusterRoleに追加し、 k8sclusterreceiver
をメトリクスパイプラインに追加します。
以下に values.yaml
の例を示します。
mode: deployment
replicaCount: 1
presets:
clusterMetrics:
enabled: true
Kubernetesイベントプリセット
OpenTelemetryコレクターはKubernetesイベントを収集するように設定できます。
この機能はデフォルトでは無効になっています。 この機能には以下の条件があります。
- KubernetesオブジェクトレシーバーがコレクターのContribディストリビューションなどのコレクターイメージに含まれている必要があります。
- 厳密な要件ではありませんが、このプリセットは
mode=deployment
またはmode=statefulset
と共に単一のレプリカで使用することを推奨します。 複数のコレクターでk8sclusterreceiver
を実行すると、重複したデータが生成されます。
この機能を有効にするには、presets.kubernetesEvents.enabled
プロパティを true
に設定します。
有効にすると、チャートは ClusterRole に必要な RBAC ロールを追加し、ログパイプラインに k8sobjectsreceiver
を追加してコレクターイベントのみに設定します。
以下に values.yaml
の例を示します。
mode: deployment
replicaCount: 1
presets:
kubernetesEvents:
enabled: true
ホストメトリクスプリセット
OpenTelemetryコレクターは、Kubernetesノードからホストメトリクスを収集するように設定できます。
この機能はデフォルトでは無効になっています。 この機能には以下の条件があります。
- コレクターのContribディストリビューションなどのコレクターイメージにホストメトリクスレシーバーが含まれている必要があります。
- 厳密な要件ではありませんが、このプリセットは
mode=daemonset
と共に使用することを推奨します。hostmetricsreceiver
は、コレクターが動作しているノード上のメトリクスのみを収集することができ、同じノード上に複数の設定されたコレクターがあると、重複したデータが生成されます。
この機能を有効にするには、presets.hostMetrics.enabled
プロパティを true
に設定します。
有効にすると、チャートは必要なボリュームとボリュームマウントを追加し、 hostmetricsreceiver
をメトリクスパイプラインに追加します。
デフォルトでは、メトリクスは10秒ごとにスクレイプされ、以下のスクレイパーが有効になります。
- cpu
- load
- memory
- disk
- filesystem[^1]
- network
以下にvalues.yaml
の例を示します。
mode: daemonset
presets:
hostMetrics:
enabled: true
[^1] kubeletMetrics
プリセットと重複する部分があるため、デフォルトでは一部のファイルシステムタイプとマウントポイントは除外されています。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!