• /
  • EnglishEspañolFrançais日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

OpenTelemetryを使用したKubernetesホスト型RabbitMQの監視

自動ポッド検出機能を備えたOpenTelemetry Collectorを使用して、 Kubernetesクラスタで実行されているRabbitMQ監視します。 このガイドでは、Kubernetes オブザーバーを活用した動的ブローカー検出を使用して、Helm 経由でコレクターをデプロイする方法について説明します。

ヒント

Linux ホストで RabbitMQ を実行していますか?仮想マシンまたはベア メタル デプロイメントのセルフホスト インストレーション ガイドを参照してください。

統合の仕組み

この Kubernetes ネイティブのデプロイメントでは、自動検出と監視が提供されます。

主なコンポーネント:

  • Kubernetes オブザーバー: ラベルセレクターに基づいて RabbitMQ ポッドを継続的に監視します

  • レシーバー作成者: 検出されたポッドごとにRabbitMQレシーバーを動的に作成します。

  • リソースの帰属: Kubernetesメタデータを使用してメトリクスを自動的に強化します:

    • k8s.cluster.name - クラスター識別子
    • k8s.namespace.name - ポッドネームスペース
    • k8s.pod.name - 個々のポッド名
    • rabbitmq.deployment.name - ポッド名に由来

デプロイメント モデル:コレクターは、ネームスペース全体でポッドをリストおよび監視するための RBAC 権限を持つKubernetesデプロイメント (単一レプリカ) として実行されます。 新しいRabbitMQが作成されるか、既存の RabbitMQpod が削除されると、オブザーバーはコレクターの設定を自動的に更新します。

重要

コレクターが RabbitMQ インスタンスを自動的に検出するには、ポッドに対するgetlist 、およびwatch権限が必要です。

インストレーション手順

RabbitMQ監視を使用してOpenTelemetry Collectorデプロイするには、次の手順に従います。

あなたが始める前に

環境が次の要件を満たしていることを確認してください。

管理エンドポイントを確認する

RabbitMQ ポッドで管理プラグインが有効になっていることを確認します。

bash
$
kubectl exec deploy/<your-rabbitmq-deployment> -n <rabbitmq-namespace> -- curl -I -u admin:password http://localhost:15672/api/overview

応答にHTTP/1.1 200 OKが表示されます。

Helm値ファイルを作成する

otel-collector-values.yamlという名前のファイルを作成します。この設定では、 receiver_creatork8s_observerを使用してRabbitMQ自動的に検出します。

次のプレースホルダーを更新します。

  • my-rabbitmq-cluster: Kubernetesクラスタ名

  • rabbitmq: RabbitMQのappラベルの値

  • admin/ password : RabbitMQ の認証情報

  • 15672: 管理APIポート

    opentelemetry-collector:
    mode: deployment
    image:
    repository: otel/opentelemetry-collector-contrib
    pullPolicy: IfNotPresent
    command:
    name: otelcol-contrib
    resources:
    limits:
    cpu: 500m
    memory: 300Mi
    requests:
    cpu: 100m
    memory: 100Mi
    extraEnvs:
    - name: NEWRELIC_LICENSE_KEY
    valueFrom:
    secretKeyRef:
    name: newrelic-licenses
    key: NEWRELIC_LICENSE_KEY
    - name: NEWRELIC_OTLP_ENDPOINT
    valueFrom:
    secretKeyRef:
    name: newrelic-licenses
    key: NEWRELIC_OTLP_ENDPOINT
    - name: K8S_NODE_NAME
    valueFrom:
    fieldRef:
    fieldPath: spec.nodeName
    - name: K8S_CLUSTER_NAME
    value: my-rabbitmq-cluster
    - name: RABBITMQ_USERNAME
    value: admin
    - name: RABBITMQ_PASSWORD
    value: password
    clusterRole:
    create: true
    rules:
    - apiGroups: [""]
    resources: ["pods", "nodes", "nodes/stats", "nodes/proxy"]
    verbs: ["get", "list", "watch"]
    - apiGroups: ["apps"]
    resources: ["replicasets", "deployments", "statefulsets"]
    verbs: ["get", "list", "watch"]
    clusterRoleBinding:
    name: ""
    config:
    extensions:
    health_check:
    endpoint: 0.0.0.0:13133
    k8s_observer:
    auth_type: serviceAccount
    observe_pods: true
    observe_nodes: false
    receivers:
    receiver_creator/rabbitmq:
    watch_observers: [k8s_observer]
    receivers:
    rabbitmq:
    # Discover pods with label "app=rabbitmq"
    # Adjust the label selector to match your RabbitMQ pods
    rule: type == "pod" && labels["app"] == "rabbitmq"
    config:
    endpoint: 'http://`endpoint`:15672'
    username: ${env:RABBITMQ_USERNAME}
    password: ${env:RABBITMQ_PASSWORD}
    collection_interval: 30s
    metrics:
    # Queue Metrics (essential for message flow and backlog)
    rabbitmq.consumer.count:
    enabled: true
    rabbitmq.message.delivered:
    enabled: true
    rabbitmq.message.published:
    enabled: true
    rabbitmq.message.acknowledged:
    enabled: true
    rabbitmq.message.dropped:
    enabled: true
    rabbitmq.message.current:
    enabled: true # Crucial for monitoring queue backlog, includes 'ready' and 'unacknowledged' states
    # Node Health Metrics (critical for server resource monitoring)
    rabbitmq.node.disk_free:
    enabled: true
    rabbitmq.node.disk_free_limit:
    enabled: true
    rabbitmq.node.disk_free_alarm:
    enabled: true
    rabbitmq.node.mem_used:
    enabled: true
    rabbitmq.node.mem_limit:
    enabled: true
    rabbitmq.node.mem_alarm:
    enabled: true
    rabbitmq.node.mem_used_details.rate:
    enabled: true
    rabbitmq.node.fd_used:
    enabled: true
    rabbitmq.node.fd_total:
    enabled: true
    rabbitmq.node.sockets_used:
    enabled: true
    rabbitmq.node.sockets_total:
    enabled: true
    rabbitmq.node.proc_used:
    enabled: true
    rabbitmq.node.proc_total:
    enabled: true
    rabbitmq.node.uptime:
    enabled: true
    rabbitmq.node.run_queue:
    enabled: true
    rabbitmq.node.processors:
    enabled: true
    rabbitmq.node.context_switches_details.rate:
    enabled: true
    rabbitmq.node.gc_num_details.rate:
    enabled: true
    rabbitmq.node.gc_bytes_reclaimed_details.rate:
    enabled: true
    # I/O Metrics (important for understanding disk and network activity)
    rabbitmq.node.io_read_count_details.rate:
    enabled: true
    rabbitmq.node.io_read_bytes_details.rate:
    enabled: true
    rabbitmq.node.io_read_avg_time_details.rate:
    enabled: true
    rabbitmq.node.io_write_count_details.rate:
    enabled: true
    rabbitmq.node.io_write_bytes_details.rate:
    enabled: true
    rabbitmq.node.io_write_avg_time_details.rate:
    enabled: true
    rabbitmq.node.io_sync_count_details.rate:
    enabled: true
    rabbitmq.node.io_sync_avg_time_details.rate:
    enabled: true
    rabbitmq.node.io_seek_count_details.rate:
    enabled: true
    rabbitmq.node.io_seek_avg_time_details.rate:
    enabled: true
    rabbitmq.node.io_reopen_count_details.rate:
    enabled: true
    # Mnesia and Store Metrics (for internal database and message storage)
    rabbitmq.node.mnesia_ram_tx_count_details.rate:
    enabled: true
    rabbitmq.node.mnesia_disk_tx_count_details.rate:
    enabled: true
    rabbitmq.node.msg_store_read_count_details.rate:
    enabled: true
    rabbitmq.node.msg_store_write_count_details.rate:
    enabled: true
    rabbitmq.node.queue_index_write_count_details.rate:
    enabled: true
    rabbitmq.node.queue_index_read_count_details.rate:
    enabled: true
    # Connection/Channel/Queue Lifecycle Metrics
    rabbitmq.node.connection_created_details.rate:
    enabled: true
    rabbitmq.node.connection_closed_details.rate:
    enabled: true
    rabbitmq.node.channel_created_details.rate:
    enabled: true
    rabbitmq.node.channel_closed_details.rate:
    enabled: true
    rabbitmq.node.queue_declared_details.rate:
    enabled: true
    rabbitmq.node.queue_created_details.rate:
    enabled: true
    rabbitmq.node.queue_deleted_details.rate:
    enabled: true
    resource_attributes:
    rabbitmq.server.endpoint: 'http://`endpoint`:15672'
    rabbitmq.port: '15672'
    processors:
    batch:
    send_batch_size: 1024
    timeout: 30s
    resource/cluster:
    attributes:
    - key: k8s.cluster.name
    value: ${env:K8S_CLUSTER_NAME}
    action: upsert
    transform/rabbitmq:
    metric_statements:
    - context: resource
    statements:
    # Create a display name combining Kubernetes metadata
    - set(attributes["rabbitmq.display.name"], Concat([
    "server",
    "k8s",
    attributes["k8s.cluster.name"],
    attributes["k8s.namespace.name"],
    "pod",
    attributes["k8s.pod.name"],
    "rabbitmq",
    attributes["rabbitmq.port"]
    ], ":"))
    # Use pod name as deployment name
    - set(attributes["rabbitmq.deployment.name"], attributes["k8s.pod.name"])
    exporters:
    otlphttp:
    endpoint: "${NEWRELIC_OTLP_ENDPOINT}"
    headers:
    api-key: "${NEWRELIC_LICENSE_KEY}"
    compression: gzip
    service:
    extensions: [health_check, k8s_observer]
    pipelines:
    metrics/rabbitmq:
    receivers: [receiver_creator/rabbitmq]
    processors: [batch, resource/cluster, transform/rabbitmq]
    exporters: [otlphttp]

    ヒント

    ラベルセレクターのカスタマイズ: RabbitMQ ポッドが異なるラベルを使用する場合は、 rule行を更新します。例えば:

    • StatefulSet ポッド: type == "pod" && labels["app.kubernetes.io/name"] == "rabbitmq"

    • オペレーターのデプロイメント: type == "pod" && labels["app.kubernetes.io/component"] == "rabbitmq"

      ポッドラベルを表示するには、 kubectl get pods --show-labels -n <namespace>を実行します。

Kubernetesシークレットを作成する

New Relic の認証情報を Kubernetes シークレットに保存します。

New Relic アカウントに一致するリージョンを選択します (New Relic にログインしたらブラウザの URL を確認してください)。

bash
$
kubectl create secret generic newrelic-licenses \
>
--from-literal=NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY \
>
--from-literal=NEWRELIC_OTLP_ENDPOINT=https://otlp.nr-data.net:4318 \
>
--namespace newrelic

YOUR_LICENSE_KEY New Relicライセンスキーに置き換えます。

bash
$
kubectl create secret generic newrelic-licenses \
>
--from-literal=NEWRELIC_LICENSE_KEY=YOUR_LICENSE_KEY \
>
--from-literal=NEWRELIC_OTLP_ENDPOINT=https://otlp.eu01.nr-data.net:4318 \
>
--namespace newrelic

YOUR_LICENSE_KEY New Relicライセンスキーに置き換えます。

Helmでデプロイする

OpenTelemetry Helm リポジトリを追加します。

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

コレクターをインストールまたはアップグレードします。

bash
$
helm upgrade --install rabbitmq-otel-collector \
>
open-telemetry/opentelemetry-collector \
>
--namespace newrelic \
>
--create-namespace \
>
--values otel-collector-values.yaml

これにより、次のものが作成されます。

  • newrelicネームスペース内のrabbitmq-otel-collectorという名前のデプロイメント
  • ポッドを監視するためのRBAC権限を持つサービスアカウント
  • コレクター設定を含む ConfigMap

デプロイメントとデータ フローを確認する

コレクター ポッドが実行されていることを確認します。

bash
$
kubectl get pods -n newrelic -l app.kubernetes.io/name=opentelemetry-collector

期待される出力:

NAME READY STATUS RESTARTS AGE
rabbitmq-otel-collector-6d8c5c5d8d-abc12 1/1 Running 0 2m

コレクター ログを表示してポッドの検出を確認します。

bash
$
kubectl logs deploy/rabbitmq-otel-collector -n newrelic --tail=50

ポッドの検出とメトリクスの収集が成功したことを示すメッセージを探します。

INFO k8sobserver/extension.go:150 Discovered pod {"kind": "pod", "name": "rabbitmq-0", "namespace": "default"}
INFO RabbitmqReceiver Successfully scraped rabbitmq metrics from pod rabbitmq-0

New Relic でデータを検証します。

データが表示されるまで 2 ~ 3 分待ってから、書き込みビルダーで次のコマンドを実行します。

SELECT count(*)
FROM Metric
WHERE metricName LIKE 'rabbitmq.%'
AND instrumentation.provider = 'opentelemetry'
AND k8s.cluster.name = 'my-rabbitmq-cluster'
FACET k8s.pod.name, metricName
SINCE 10 minutes ago

Kubernetesプロパティを持つ各RabbitMQからのメトリクスが表示されるはずです。

  • k8s.cluster.name - クラスター識別子
  • k8s.namespace.name - ポッドネームスペース
  • k8s.pod.name - 個々のポッド名
  • rabbitmq.deployment.name - ポッド名に由来

ヒント

5 分経ってもデータが表示されない場合は、以下のトラブルシューティングのセクションを確認してください。

トラブルシューティング

次は何ですか?

RabbitMQ監視の設定が完了したので、監視機能を強化できます。

データを探索する:

監視の強化:

Copyright © 2026 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.