Kubernetes 上で実行され、 該当する統合によってサポートされているサービスがある場合は、Kubernetes 統合を通じてそれらの統合を有効にすることができます。
始めましょう
Kubernetes 統合は、オンホスト統合の一部にバンドルされています。これにより、マニフェスト内に ConfigMap として存在する Kubernetes 統合の構成にセクションを追加することで、これらのサービスのデータを取得できるようになります。
Kubernetes PHPゲストブックで実行されているRedisを監視する方法の例については、このチュートリアルを参照してください。
要件
Kubernetes 上で実行されているサービスを監視するには、以下が必要です。
Kubernetes 統合を実行している Kubernetes クラスター (インストール | バージョンの確認 | 更新)。
要件を満たす ECS 上で実行されるサポート対象サービス。サポートされているサービスは次のとおりです。
このインストール方法では、RabbitMQ と Apache の統合はインベントリ データを報告しません。
ヘルムチャートを使用してサービスの監視を有効にする
Kubernetes のモニタリング サービスは 、インフラストラクチャ エージェントとオンホスト統合 、および自動検出メカニズムを活用して、指定されたセレクターを持つポッドをポイントすることで機能します。
Kubernetes統合を有効にして1つ以上のサービスを監視するには:
基本構成を取得する
次のリンクから、K8sで実行できる統合の構成ファイルの例を入手できます。
これらの例のほとんどは、主に特定のサービスに対して認証するために必要な資格情報を入力するために、特定の環境用に構成する必要があることを考慮に入れてください。上記のドロップダウンにリンクされている統合固有のページから、各統合を構成する方法の詳細を読むことができます。
構成を追加します values-newrelic.yaml
ヒント
この形式は、 Kubernetes統合v3に適用されます。古いv2バージョンについては、以下のセクションを確認してください。
動作する構成スニペットは、次の構造のYAMLドキュメントである必要があります。
# Top level name can be arbitrary, akin to a config file nameredis-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
を指定していることに注意してください。以前のバージョンの統合はこれがなくても機能した可能性があります。Kubernetes統合のバージョン3では、それらを指定する必要があります。この変更の理由は、統合がlocalhost
ではなくnodeIPを使用してKubeletに接続するようになり、前者はTLSを必要とし、後者は必要としなかったためです。
他のポッドを対象とする統合には、 redis-sampleapp.yaml
の横に独自のセクションが必要です。
統合はスタンドアロンのバイナリであり、 newrelic-nrk8s-kubelet-xxxxx
ポッドに含まれているインフラストラクチャエージェントによって実行されます。構成ファイルはnrk8s-kubelet
DaemonSetのすべてのポッドにデプロイされますが、検出により、各ポッドは、その特定のnrk8s-kubelet
ポッドと同じノードでスケジュールされているサービスポッドのみをターゲットにすることが保証されます。nrk8s-kubelet
DaemonSetのインスタンスに、指定されたラベルに一致するポッドがない場合、統合はそのインスタンスによって実行されません。
(レガシーv2)構成をに追加します values.yaml
統合が機能していることを確認します
one.newrelic.com > All capabilities > Infrastructureに移動し、 Third party services [サードパーティのサービス を]選択して、サービスのダッシュボードを選択します。データが報告されているのが表示されるはずです。
そこにデータが表示されない場合は、統合の実行に必要なパラメーターが欠落しているか、ターゲットサービスに到達できない可能性があります。次のコマンドを実行して、統合のログを取得できます。
$kubectl logs -n newrelic newrelic-nrk8s-kubelet-xxxxx agent
統合の対象となるポッドの横にスケジュールされているnrk8s-kubelet
DaemonSetの特定のポッドを必ず選択してください。次のコマンドを実行すると、どのインスタンスがどのノードで実行されているかを確認できます。
$kubectl get pods -n newrelic -o wide -l app.kubernetes.io/component=kubelet
サービスの有効化に関する追加の注意事項
- 複数のサービスを有効にすると、Kubernetes統合設定ファイルのリソース制限で設定されているよりも多くのリソースを使用する可能性があります。これが問題になる場合は、
resources
セクションの制限を引き上げてください。 - Kubernetes統合は自動的に更新されません。最良の結果を得るには、定期的に更新してください。
もっと詳しく知る
構成について学習するためのその他のリソース:
- 構成がどのように機能するかについての技術的な詳細を学びます。
- 同じ構成ファイルを使用して複数のサービスの監視を構成する方法を学びます。
- KubernetesでRedisサービスを監視する方法を示すステップバイステップのチュートリアルをご覧ください。
マニフェストを使用してサービスの監視を有効にする
ヒント
上記のセクションで説明したように、 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: nginxintegrations: - name: nri-nginx env: STATUS_URL: http://${discovery.ip}/status STATUS_MODULE: discover METRICS: 1
上記の設定により、次のことが可能になります。
nri-discovery-kubernetes
を実行して、現在使用しているノードのデータを照会します。戻ってきたデータを解析し、値
nginx
のapp=
ラベルを持つKubernetesコンテナを持つKubernetesポッドを探します。一致する場合は、NGINX統合を実行しようとします。ステータスURLは次のものから作成されます。
- ポッドのIPアドレス
- ステータスページは、K8sポッドのラベルから取得されます。
status_url
この自動検出は、インフラストラクチャエージェントが使用するコンテナの自動検出と同じように機能します。より高度なオプションについては、コンテナの自動検出を参照してください。
サービスYAMLをKubernetes統合構成に追加します
上記のスニペットが統合によって認識されるためには、指定されたConfigMap内に配置する必要があります。Kubernetes統合v3を使用している場合は、名前が-integrations-cfg
で終わるConfigMapがすでに生成されているはずです。構成マップを見つけて、変更したスニペットを追加すると、次のようになります。
---apiVersion: v1kind: ConfigMapmetadata: name: newrelic-infrastructure-integrations-cfg namespace: newrelicdata: 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はすでに必要なコンテナにマウントされています。
重要
Kubernetes Integrationバージョン2の場合、このConfigMapのエントリをDaemonSetのspec
のvolumes
およびvolumeMounts
セクションに追加して、ConfigMap内のすべてのファイルが/etc/newrelic-infra/integrations.d/
にマウントされるようにする必要があります。
同じConfigMapが複数の構成ファイルを保持できることに注意してください。これは、マニフェストへの変更を最小限に抑えるために推奨されます。
---apiVersion: v1kind: ConfigMapmetadata: name: newrelic-infrastructure-integrations-cfg namespace: newrelicdata: nginx-config.yml: | discovery: # ... integrations: - name: nri-nginx # ... redis-config.yml: | discovery: # ... integrations: - name: nri-redis # ...
報告されたデータの使用方法
ここで Kubernetes データを見つけて使用する方法について詳しく学ぶことができ、K8sServiceSample データ スキーマを ここで確認できます。