Helm は、Kubernetes 上のパッケージマネージャです。インストール、アップグレード、リビジョンの追跡を容易にし、Kubernetesにインストールするサービスの依存関係を管理します。
Helmを使用して統合をインストールするには、Kubernetes自動インストーラーをお勧めします。これにより、いくつかの構成オプションの入力を求められ、シークレットと値が自動入力されます。さらに、自動インストーラーを使用すると、Helmリリースではなくプレーンマニフェストとして統合をインストールすることもできます。自動インストーラーの使用方法の詳細については、Kubernetesの統合:インストールと設定をご覧ください。
このページでは、自動インストーラを使わずにNew Relicインテグレーションをインストールして設定する方法をより詳しく説明します。
互換性と要件
Helmがマシンにインストールされていることを確認してください。 Kubernetes Integrationのバージョン3には、Helmバージョン3が必要です。
EOL通知
2022年4月30日をもって、Helmv2を含むいくつかの機能のサポートを終了します。この移行に簡単に備える方法など、詳細については、 ExplorersHubの投稿をご覧ください。
Helmを使ってKubernetesインテグレーションをインストールするには、New Relicアカウントのライセンスキーと、Kubernetesクラスタの名前が必要です。
- New Relic のライセンスキー を見つけてコピーしてください。
- クラスタの表示名を決めます。例えば、次のような出力が考えられます。
$kubectl config current-context
これらの値は後でインストール時に必要になるので、安全な場所にメモしておいてください。
HelmによるKubernetesインテグレーションのインストール
New Relicには、プラットフォームの異なる機能を提供するさまざまなコンポーネントのためのいくつかのチャートがあります。
newrelic-infrastructure-v3
:メインのKubernetes統合とインフラストラクチャエージェントが含まれています。これは、New Relic Kubernetesエクスペリエンスのコアコンポーネントであり、KubernetesダッシュボードとKubernetesクラスターエクスプローラーに表示されるほとんどのデータのレポートを担当します。newrelic-logging
: DaemonSetにNewRelicのFluentBit出力プラグインを提供して、ログをNewRelicに簡単に転送します。nri-kube-events
:クラスターイベント(kubectl get events
など)を収集してNewRelicに報告します。nri-prometheus
:NewRelicのPrometheusOpenMetrics統合は、クラスターに存在するPrometheusエンドポイントを自動的にスクレイプし、 メトリックをNewRelicに報告します。nri-metadata-injection
:コンテナにいくつかの環境変数を挿入する最小限のMutatingAdmissionWebhook
を設定します。これらには、クラスターとNew Relicのインストールに関するメタデータが含まれており、後でAPMを使用してインストルメント化されたアプリケーションによって取得され、 APMとインフラストラクチャデータを相互に関連付けることができます。nri-statsd
:NewRelicStatsDの統合。
便宜上、New Relicはnri-bundle
チャートを提供します。これは、上記のチャートの選択可能なセットをプルします。 nri-bundle
は、必要に応じてKubeStateMetricsとPixieをインストールすることもできます。
これらのグラフを個別にインストールすることは可能ですが、Kubernetesのデプロイにはnri-bundle
グラフを使用することを強くお勧めします。これにより、すべてのグラフの値に一貫性があり、インストールするコンポーネントを完全に制御できるようになります。それらすべてをHelm依存関係として構成します。これは、自動インストーラーによって使用および参照されるチャートと同じです。
Helmを使用したnri-bundle
のインストールと構成
- Helmと
kubectl
を実行するマシンで適切なコンテキストを使用していることを確認してください。
で利用可能なコンテキストを確認することができます。
$kubectl config get-contexts
で、目的のコンテキストに切り替えます。
$kubectl config use-context _CONTEXT_NAME_
- New Relic Helm chartのリポジトリを追加します。
$helm repo add newrelic https://helm-charts.newrelic.com
- 構成を定義するために使用される
values-newrelic.yaml
という名前のファイルを作成します。
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_
prometheus: # Automatically scrape prometheus metrics for annotated services in the cluster # Collecting prometheus metrics for large clusters might impact data usage significantly enabled: true lowDataMode: true # Skip ingesting cluster-level metricswebhook: # Deploy our webhook to link APM and Kubernetes entities enabled: truekubeEvents: # Report Kubernetes events enabled: truelogging: # Report logs for containers running in the cluster enabled: trueksm: # Deploy kube-state-metrics in the cluster. # Set this to true unless it is already deployed. enabled: true
- 次のコマンドを実行して、チャートですべてが正しく構成されていることを確認します。
--dry-run
と--debug
を指定しているため、このステップでは何もインストールされないことに注意してください。
$helm upgrade --install newrelic newrelic/nri-bundle \>--namespace newrelic --create-namespace \>-f values-newrelic.yaml \>--devel \>--dry-run \>--debug
ヒント
--devel
を指定すると、現在ベータ版であり、2022年春に一般提供される予定のバージョン3のソリューションをインストールすることになります。v2よりも大幅に改善されているため、試してみることを強くお勧めします。何が変更されたかを確認してください。
以下のフラグに注意して調整してください。
global.licenseKey=YOUR_NEW_RELIC_LICENSE_KEY
:アカウントの有効なライセンスキーに設定する必要があります。global.cluster=K8S_CLUSTER_NAME
:New Relic UIでクラスターを識別するために使用されるため、NewRelicアカウントで構成されている他のKubernetesクラスターでは使用されない説明的な値である必要があります。ksm.enabled=true
:これをtrue
に設定すると、統合を実行するために必要なKube State Metrics(KSM)が自動的にインストールされます。 KSMがクラスターにすでに存在する場合は、別の名前空間にある場合でも、これをfalseに設定できます。prometheus.enabled=true
:クラスターに存在するPrometheusエンドポイントからデータを自動的に収集するPrometheusOpenMetrics統合を展開します。webhook.enabled=true
:最小限のWebhookをインストールします。これにより、環境変数が追加され、NewRelicAPMを搭載したアプリケーションをKubernetesにリンクできるようになります。
私たちのKubernetesチャートには、お客様の特定のニーズに合わせて編集可能なフラグとチューナブルの包括的なセットが用意されています。以下の Configure the integration のセクションで、変更可能な項目を確認してください。
--debug
と--dry-run
を指定せずにコマンドを実行して、Kubernetes統合をインストールします。
$helm upgrade --install newrelic newrelic/nri-bundle \>--namespace newrelic --create-namespace \>-f values-newrelic.yaml \>--devel
- ポッドがデプロイされ、安定した状態になっていることを確認します。
$kubectl -n newrelic get pods -w
見るべきです。
- 1つの
newrelic-nrk8s-ksm
ポッド。 - クラスタ内のノードごとに1つの
newrelic-nrk8s-kubelet
ポッド。 - クラスタ内のマスターノードごとに1つの
newrelic-nrk8s-control-plane
ポッド(存在する場合)。 - インストールにKSMが含まれている場合は、1つの
newrelic-kube-state-metrics
ポッド。 - Kubernetesイベントレポートを有効にした場合は、1つの
newrelic-nri-kube-events
ポッド。 - Prometheus統合を有効にした場合は、1つの
newrelic-nri-prometheus
ポッド。 - ロギング統合を有効にした場合は、クラスター内のノードごとに1つの
newrelic-newrelic-logging
ポッド。
Helm 2とnri-bundle(レガシー)でのインストール
統合を構成する
nri-bundle
チャート。そのインストール手順は上記にあり、ソリューションのコンポーネントを含む他のいくつかのチャートのラッパーまたはメタパッケージとして機能します。このようなラッパーを提供することにより、コンポーネントのチャートを比較的単純に保ちながら、相互に互換性があることがわかっているバージョンのコンポーネントの制御されたセットを提供できます。
個々の統合コンポーネントを構成するには、Helmの依存関係システムを使用する必要があります。つまり、子グラフの構成は、そのグラフの名前のセクションの下に配置する必要があります。たとえば、 newrelic-infrastructure
チャートを構成するには、 values-newrelic.yaml
に以下を追加します。
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_
# ... Other settings as shown above
# Configuration for newrelic-infrastructurenewrelic-infrastructure: verboseLog: true # Enable debug logs privileged: false # Install with minimal privileges # Other options from https://github.com/newrelic/helm-charts/tree/master/charts/newrelic-infrastructure-v3
調整可能なフラグの完全なリストは、私たちのチャートのリポジトリにあります。
newrelic-infrastructure
- デバッグログ、特権モード、コントロールプレーン監視などの設定を行います。
nri-kube-events
nri-metadata-injection
- APM連携用のWebhookをどのように展開するかを設定します。
nri-prometheus
- どのPrometheusエンドポイントをスクレイピングするかを設定します。
newrelic-logging
- どのログをNew Relicに送信するかを設定します。
ヒント
これらのグラフのオプションを指定するときは、 values-newrelic.yaml
のグラフ名の下にそれらを配置する必要があることに注意してください。
スクラップ間隔の変更
Kubernetes Integration v3以降では、クラスターからメトリクスを収集する間隔を変更することができます。これにより、データの解像度と使用量の間のトレードオフを選択することができます。最適な使用感を得るためには、15秒から30秒の間の間隔を選択することをお勧めします。
スクレイプ間隔を変更するには、 newrelic-infratructure
セクションの下のvalues-newrelic.yaml
に以下を追加します。
common: config: interval: 25s
という感じで終わってしまいます。
global: licenseKey: _YOUR_NEW_RELIC_LICENSE_KEY_ cluster: _K8S_CLUSTER_NAME_
# ... Other settings as shown above
# Configuration for newrelic-infrastructurenewrelic-infrastructure: # ... Other settings as shown above common: config: interval: 25s
重要
interval
を40s
より大きい値に設定することは許可されていません。
変更可能な設定の全リストは、 チャートの README にあります。
Helmによるアップグレード
Helm経由でインストールしたKubernetesインテグレーションをアップデートするには
ローカルチャートのリポジトリを更新します。
bash$helm repo update上記のセクションで適切な
helm upgrade --install ...
コマンドを再度実行して、リリースを更新しますbash$helm upgrade --install newrelic newrelic/nri-bundle \>--namespace newrelic --create-namespace \>-f values-newrelic.yaml \>--devel
Kubernetesで実行しているサービスを監視する
Kubernetesインテグレーションをインストールした後は、クラスタ内で実行されるサービスのインスツルメンテーションを開始できます。この方法の詳細については、 Kubernetes上で動作するサービスの監視 ページをご確認ください。
Kubernetesデータの使用
Kubernetesデータの使用方法の詳細については、Kubernetesデータページの詳細検索を参照してください。
データ取り込みを減らす
私たちのチャートは、詳細情報をドロップすることを犠牲にして、取り込まれるデータの量を減らすオプションの設定をサポートしています。有効にするには、 nri-bundle
チャートでglobal.lowDataMode
をtrue
に設定します。
lowDataMode
以下に概説するnri-bundle
チャートの3つの特定のコンポーネントに影響します。
New Relicのインフラ
lowDataMode
が有効になっている場合、デフォルトのスクレイプ間隔は15s
から30s
に変更されます。 config.interval
を使用してカスタム値を指定することもできます。これはlowDataMode
よりも優先されます。
Prometheus OpenMetricsの統合
lowDataMode
が有効になっている場合、次のメトリックはNew Relic Kubernetes Integrationによってすでに収集および使用されているため、デフォルトで除外されます。
- kube_- container_- machine_- cadvisor_
New Relic のロギング
lowDataMode
が有効になっている場合、fluent-bit.confファイルのFilterセクションでLabelsandAnnotationsがOff
に設定されます。これは、この詳細がコンテナログファイルから削除されることを意味し、NewRelicへの全体的なデータの取り込みが減少します。
以下のフィールドが保持されます。
Allowlist_key container_nameAllowlist_key namespace_nameAllowlist_key pod_nameAllowlist_key streamAllowlist_key log
ローデータモードのログ例
完全なログ記録
[ { "cluster_name": "api-test", "kubernetes": { "annotations": { "kubernetes.io/psp": "eks.privileged" }, "container_hash": "fryckbos/test@sha256:5b098eaf3c7d5b3585eb10cebee63665b6208bea31ef31a3f0856c5ffdda644b", "container_image": "fryckbos/test:latest", "container_name": "newrelic-logging", "docker_id": "134e1daf63761baa15e035b08b7aea04518a0f0e50af4215131a50c6a379a072", "host": "ip-192-168-17-123.ec2.internal", "labels": { "app": "newrelic-logging", "app.kubernetes.io/name": "newrelic-logging", "controller-revision-hash": "84db95db86", "pod-template-generation": "1", "release": "nri-bundle" }, "namespace_name": "nrlogs", "pod_id": "54556e3e-719c-46b5-af69-020b75d69bf1", "pod_name": "nri-bundle-newrelic-logging-jxnbj" }, "message": "[2021/09/14 12:30:49] [ info] [engine] started (pid=1)\n", "plugin": { "source": "kubernetes", "type": "fluent-bit", "version": "1.8.1" }, "stream": "stderr", "time": "2021-09-14T12:30:49.138824971Z", "timestamp": 1631622649138 }]
lowDataMode
を有効にした後のログレコード。
[ { "cluster_name": "api-test", "container_name": "newrelic-logging", "namespace_name": "nrlogs", "pod_name": "nri-bundle-newrelic-logging-jxnbj", "message": "[2021/09/14 12:30:49] [ info] [engine] started (pid=1)\n", "stream": "stderr", "timestamp": 1631622649138 }]
New Relic Pixieの統合
lowDataMode
が有効になっている場合、 newrelic-pixie
統合はPixieスパンでより重いサンプリングを実行し、収集間隔を10秒から15秒に短縮します。
lowDataMode
設定:
HTTP_SPAN_LIMIT: 750DB_SPAN_LIMIT: 250COLLECT_INTERVAL_SEC: 15
これらのパラメータやその他のパラメータのデフォルト設定は、 newrelic-pixie-integration Github repoにあります。
Kubernetesインテグレーションのアンインストール
Helmを使ってKubernetesインテグレーションをアンインストールするには、以下のコマンドを実行します。
$helm uninstall newrelic -n newrelic