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

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

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

問題を作成する

Kubernetesで実行されているサービスを監視する

Kubernetes 上で実行され、該当する統合によってサポートされているサービスがある場合は、Kubernetes 統合を通じてそれらの統合を有効にすることができます。

始めましょう

当社のKubernetesは、オンホスト インテグレーションの一部にバンドルされています。 これにより、マニフェスト内に ConfigMap として存在するKubernetesインテグレーションの設定にセクションを追加することで、これらのサービスのデータを取得できるようになります。

Kubernetes PHPゲストブックで実行されているRedisを監視する方法の例については、このチュートリアルを参照してください。

要件

Kubernetes 上で実行されているサービスを監視するには、以下が必要です。

このインストール方法では、RabbitMQ と Apache の統合はインベントリ データを報告しません。

ヘルムチャートを使用してサービスの監視を有効にする

Kubernetes のモニタリング サービスは 、インフラストラクチャ エージェントとオンホスト統合 、および自動検出メカニズムを活用して、指定されたセレクターを持つポッドをポイントすることで機能します。

バージョン 2 の設定例を参照してください。

Kubernetes統合を有効にして1つ以上のサービスを監視するには:

基本構成を取得する

次のリンクから、K8sで実行できる統合の構成ファイルの例を入手できます。

これらの例のほとんどは、主に特定のサービスに対して認証するために必要な資格情報を入力するために、特定の環境用に構成する必要があることを考慮に入れてください。上記のドロップダウンにリンクされている統合固有のページから、各統合を構成する方法の詳細を読むことができます。

構成を追加します values-newrelic.yaml

ヒント

この形式はKubernetesインテグレーション v3に適用されます。 古い v2 バージョンについては、 「 Kubernetesで実行されているサービスの監視」を参照してください。

動作する構成スニペットは、次の構造のYAMLドキュメントである必要があります。

# Top level name can be arbitrary, akin to a config file name
redis-sampleapp.yaml:
# Discovery section will define which pods will be monitored.
discovery:
command:
# nri-discovery-kubernetes is a tool that connects to the Kubelet to fetch local pods
# without putting stress in the API Server. It accepts the following arguments:
# --namespaces: Comma separated namespaces to limit discovery on
# --tls: Use tls for connecting to the kubelet
# --port: Port used to connect to the kubelet. Defaults to 10255.
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
# Monitor pods which have a `app=sampleapp` label
match:
label.app: sampleapp
# Integrations section contains the integration configs.
# ${placeholders} will be replaced with the specified attributes for each pod that is discovered
integrations:
- name: nri-redis # Integration name, should not be changed
env:
# Using the discovered pod IP as the hostname address
HOSTNAME: ${discovery.ip}
PORT: 6379
# Other integration options go here

このスニペットは、 values-newrelic.yamlファイルのnewrelic-infrastructureの下のintegrationsセクションに追加する必要があります。例えば:

global:
licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_
cluster: _K8S_CLUSTER_NAME_
# Other settings...
newrelic-infrastructure:
# verboseLog: true
integrations:
redis-sampleapp.yaml:
discovery:
command:
# --namespaces: Comma separated list of namespaces to discover pods on
# --port: Port used to connect to the kubelet. Default is 10255
# --tls: Use secure (TLS) connection
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
match:
label.app: sampleapp
integrations:
- name: nri-redis
env:
HOSTNAME: ${discovery.ip}
PORT: 6379

ヒント

--tls --port 10250を指定していることに注意してください。 以前のバージョンの統合はこれがなくても機能した可能性がありますが、 インテグレーションの バージョン 3 Kubernetesでは、これらを指定することが必須になっています。この変更の理由は、インテグレーションがlocalhostではなく nodeIP を使用して Kubelet に接続するようになったためです。前者は TLS を必要としますが、後者は必要としません。

他のポッドを対象とする統合には、 redis-sampleapp.yamlの横に独自のセクションが必要です。

統合はスタンドアロン バイナリで、 newrelic-nrk8s-kubelet-xxxxxポッドに含まれるインフラストラクチャ エージェントによって実行されます。 構成ファイルはnrk8s-kubelet DaemonSet のすべてのポッドにデプロイされますが、検出により、各ポッドがその特定のnrk8s-kubeletポッドと同じノード内でスケジュールされているポッドのみを対象としてサービスされることが保証されます。 nrk8s-kubelet DaemonSet のインスタンスに、指定されたラベルに一致するポッドがない場合、その###インスタンスによって統合は実行されません。

統合が機能していることを確認します

one.newrelic.com > All capabilities > Infrastructureに移動し、 Third party servicesを選択して、サービスのダッシュボードを選択します。 データが報告されているはずです。

そこにデータが表示されない場合は、統合の実行に必要なパラメーターが欠落しているか、ターゲットサービスに到達できない可能性があります。次のコマンドを実行して、統合のログを取得できます。

bash
$
kubectl logs -n newrelic newrelic-nrk8s-kubelet-xxxxx agent

統合の対象となるポッドの横にスケジュールされているnrk8s-kubelet DaemonSetの特定のポッドを必ず選択してください。次のコマンドを実行すると、どのインスタンスがどのノードで実行されているかを確認できます。

bash
$
kubectl get pods -n newrelic -o wide -l app.kubernetes.io/component=kubelet

サービスの有効化に関する追加の注意事項

  • 複数のサービスを有効にすると、Kubernetes統合設定ファイルのリソース制限で設定されているよりも多くのリソースを使用する可能性があります。これが問題になる場合は、 resourcesセクションの制限を引き上げてください。
  • Kubernetesインテグレーションは自動的に更新されません。 最良の結果を得るには、定期的に更新してください

もっと詳しく知る

構成について学習するためのその他のリソース:

マニフェストを使用してサービスの監視を有効にする

ヒント

上記のセクションで説明したように、 values-newrelic.yamlファイルとヘルムチャートを使用して統合を構成することを強くお勧めします。マニフェストインストールの上にサービス監視を構成することは、実質的により困難であり、何の利点もありません。

監視するサービスごとに、その統合の構成ファイルをKubernetes統合の構成に追加する必要があります。このドキュメントでは、次のテーマについて説明します。

サービス固有のYAML構成の仕組み

Kubernetesインテグレーションの設定はConfigMap形式に従います。 ConfigMap を使用すると、統合用の設定をKubernetesイメージから分離できます。 もう 1 つの利点は、実行中のコンテナをリロードせずにConfigMap自動的に更新できることです。

インフラストラクチャエージェントはYAMLを使用して関連する統合を構成するため、YAMLを保存するにはConfigMapsが適しています。(構成ファイル形式の詳細については、 統合構成ファイル形式を参照してください。)

Kubernetes統合イメージには、単一の構成ファイルを使用してサービスの複数のインスタンスの構成を簡素化する自動検出機能が付属しています。たとえば、複数のNGINXインスタンスを実行している場合、インスタンスごとにNGINX統合構成ファイルを作成すると、実装や更新が困難になります。自動検出オプションを使用すると、単一の構成ファイルですべてのNGINXインスタンスを検出および監視できます。

各統合には、独自の特定の構成YAMLがあります。NGINX統合のデフォルトの構成ファイルは次のようになります。

discovery:
command:
# Use the following optional arguments:
# --namespaces: Comma separated list of namespaces to discover pods on
# --port: Port used to connect to the kubelet. Default is 10255
# --tls: Use secure (TLS) connection
# Custom Example:
# exec: /var/db/newrelic-infra/nri-discovery-kubernetes --namespaces namespace1,namespace2 --port 10250 --tls
# Default
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
match:
label.app: nginx
integrations:
- name: nri-nginx
env:
STATUS_URL: http://${discovery.ip}/status
STATUS_MODULE: discover
METRICS: 1

上記の設定により、次のことが可能になります。

  • nri-discovery-kubernetesを実行して、現在使用しているノードのデータを照会します。

  • 戻ってきたデータを解析し、値nginxapp=ラベルを持つKubernetesコンテナを持つKubernetesポッドを探します。

  • 一致する場合は、NGINX統合を実行しようとします。ステータスURLは次のものから作成されます。

    • ポッドのIPアドレス
    • ステータスページは、K8sポッドのラベルから取得されます。 status_url

この自動検出は、インフラストラクチャエージェントが使用するコンテナの自動検出と同じように機能します。より高度なオプションについては、コンテナの自動検出を参照してください。

サービスYAMLをKubernetes統合構成に追加します

指定されたConfigMap内に上記のスニペットを配置すると、統合は上記のスニペットを認識します。 Kubernetesインテグレーション v3を使用している場合は、名前が -integrations-cfg で終わる ConfigMap がすでに存在しているはずです。

Kubernetesインテグレーション バージョン 2 を使用している場合は、 「サービス YAML の追加」を参照してください。

構成マップを見つけて、変更したスニペットを追加すると、次のようになります。

---
apiVersion: v1
kind: ConfigMap
metadata:
name: newrelic-infrastructure-integrations-cfg
namespace: newrelic
data:
nginx-config.yml: |
discovery:
command:
# Use the following optional arguments:
# --namespaces: Comma separated list of namespaces to discover pods on
# --port: Port used to connect to the kubelet. Default is 10255
# --tls: Use secure (TLS) connection
# Custom Example:
# exec: /var/db/newrelic-infra/nri-discovery-kubernetes --namespaces namespace1,namespace2 --port 10250 --tls
# Default
exec: /var/db/newrelic-infra/nri-discovery-kubernetes --tls --port 10250
match:
label.app: nginx
integrations:
- name: nri-nginx
env:
STATUS_URL: http://${discovery.ip}/status
STATUS_MODULE: discover
METRICS: 1

Kubernetesインテグレーション v3を使用している場合、この ConfigMap は必要なコンテナにすでにマウントされています。

同じConfigMapに複数の構成ファイルを保存できることに注意してください。マニフェストへの変更を最小限に抑えるために、この方法が推奨されます。

---
apiVersion: v1
kind: ConfigMap
metadata:
name: newrelic-infrastructure-integrations-cfg
namespace: newrelic
data:
nginx-config.yml: |
discovery: # ...
integrations:
- name: nri-nginx
# ...
redis-config.yml: |
discovery: # ...
integrations:
- name: nri-redis
# ...

報告されたデータの使用方法

Kubernetes データの検索と使用方法の詳細については、こちらをご覧ください。また、K8sServiceSample データ スキーマはこちらで確認できます。

Copyright © 2024 New Relic株式会社。

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