Kubernetes 上で実行され、該当する統合によってサポートされているサービスがある場合は、Kubernetes 統合を通じてそれらの統合を有効にすることができます。
始めましょう
当社のKubernetesは、オンホスト インテグレーションの一部にバンドルされています。 これにより、マニフェスト内に ConfigMap
として存在するKubernetesインテグレーションの設定にセクションを追加することで、これらのサービスのデータを取得できるようになります。
Kubernetes PHPゲストブックで実行されているRedisを監視する方法の例については、このチュートリアルを参照してください。
要件
Kubernetes 上で実行されているサービスを監視するには、以下が必要です。
Kubernetes 統合を実行している Kubernetes クラスター (インストール | バージョンの確認 | 更新)。
要件を満たす、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 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
を指定していることに注意してください。 以前のバージョンの統合はこれがなくても機能した可能性がありますが、 インテグレーションの バージョン 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を選択して、サービスのダッシュボードを選択します。 データが報告されているはずです。
そこにデータが表示されない場合は、統合の実行に必要なパラメーターが欠落しているか、ターゲットサービスに到達できない可能性があります。次のコマンドを実行して、統合のログを取得できます。
$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
がすでに存在しているはずです。
Kubernetesインテグレーション バージョン 2 を使用している場合は、 「サービス YAML の追加」を参照してください。
構成マップを見つけて、変更したスニペットを追加すると、次のようになります。
---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
は必要なコンテナにすでにマウントされています。
同じ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 データ スキーマはこちらで確認できます。