• ログイン今すぐ開始

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

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

New RelicのKubernetes統合を使用すると、Kubernetesと、Kubernetesで実行されているサービス(Cassandra、Redis、MySQL、その他のサポートされているサービスなど)の両方を監視できます。

始めましょう

Kubernetes統合には、いくつかのオンホスト統合(Cassandra、MySQL、Apacheなど)がバンドルされています。これにより、マニフェスト内のConfigMapとして機能するセクションをKubernetes統合の構成に追加することで、サポートされているサービスのデータを取得できます。

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

何が必要

Kubernetesで実行されているサービスを監視するには、Kubernetes統合バージョン1.16.0以降を実行しているKubernetesクラスターのみが必要です( インストール| バージョンの確認| 更新)。

Kubernetesで実行されている次のサービスをサポートしています。

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

Kubernetesのモニタリングサービスは、標準のオンホスト統合と自動検出メカニズムを利用して、指定されたセレクターを使用してポッドをポイントすることで機能します。

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

基本構成を取得する

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

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

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

ヒント

この形式は、 Kubernetes統合v3に適用されます。古いv2バージョンについては、以下のセクションを確認してください。

動作する構成スニペットは、次の構造の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を指定していることに注意してください。以前のバージョンの統合はこれがなくても機能した可能性があります。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 > 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がすでに生成されているはずです。構成マップを見つけて、変更したスニペットを追加すると、次のようになります。

---
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はすでに必要なコンテナにマウントされています。

重要

Kubernetes Integrationバージョン2の場合、このConfigMapのエントリをDaemonSetのspecvolumesおよびvolumeMountsセクションに追加して、ConfigMap内のすべてのファイルが/etc/newrelic-infra/integrations.d/にマウントされるようにする必要があります。

同じ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
# ...
Copyright © 2023 New Relic Inc.

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