Helm は、Kubernetes 上のパッケージマネージャです。インストール、アップグレード、リビジョンの追跡を容易にし、Kubernetesにインストールするサービスの依存関係を管理します。
Helmを使用して統合をインストールするには、当社のKubernetes自動化インストーラーをお勧めします。このインストーラーは、いくつかの構成オプションを求め、秘密と値を自動的に入力します。さらに、私たちの自動インストーラは、Helmリリースではなくプレーンマニフェストとして統合をインストールすることもできます。自動インストーラの使用方法の詳細については、 Kubernetes integration: install and configure を参照してください。
このページでは、自動インストーラを使わずにNew Relicインテグレーションをインストールして設定する方法をより詳しく説明します。
互換性および要件
お使いのマシンに Helm がインストールされていることを確認してください。Kubernetes Integrationのバージョン3には、Helmのバージョン3が必要です。まだHelm 2を使用している場合は、統合のレガシーバージョンをインストールすることができます。
Helmを使ってKubernetesインテグレーションをインストールするには、New Relicアカウントのライセンスキーと、Kubernetesクラスタの名前が必要です。
- New Relic のライセンスキー を見つけてコピーしてください。
- クラスタの表示名を決めます。例えば、次のような出力が考えられます。
$kubectl config current-context
これらの値は後でインストール時に必要になるので、安全な場所にメモしておいてください。
HelmによるKubernetesインテグレーションのインストール
New Relicには、プラットフォームの異なる機能を提供するさまざまなコンポーネントのためのいくつかのチャートがあります。
newrelic-infrastructure-v3
: メインのKubernetesインテグレーションとインフラストラクチャエージェントが含まれています。New Relic Kubernetes体験の中核となるコンポーネントで、Kubernetes DashboardやKubernetes Cluster Explorerで表示されるデータのほとんどを報告する役割を担っています。newrelic-logging
: New Relic の Fluent Bit output plugin を使って、ログを簡単に New Relic に転送する DaemonSet を提供します。nri-kube-events
: クラスタのイベント(例えばkubectl get events
)を収集し、New Relic に報告します。nri-prometheus
: New Relic の Prometheus OpenMetrics Integration, クラスタに存在する Prometheus のエンドポイントを自動的にスクレイピングし、 メトリクスを New Relic にレポートします.nri-metadata-injection
: 最小限のMutatingAdmissionWebhook
をセットアップし、コンテナにいくつかの環境変数を注入します。これらには、クラスターと New Relic のインストールに関するメタデータが含まれており、後に APM を使用してインスツルメンテーションされたアプリケーションによってピックアップされ、 APM とインフラストラクチャのデータを相関させることができます 。nri-statsd
: New Relic StatsD の統合。
便宜上、New Relic は nri-bundle
チャートを提供しており、これは上述のチャートの選択可能なセットを引き出すものです。 nri-bundle
は、必要に応じて Kube State Metrics と Pixie もインストールしてくれます。
これらのチャートを個別にインストールすることも可能ですが、Kubernetesのデプロイメントには、 nri-bundle
チャートを使用することを強くお勧めします。これは、すべてのチャートの値が一貫していることを保証し、どのコンポーネントをインストールするかを完全に制御できるだけでなく、すべてのコンポーネントを Helm dependencies として設定することができるからです。これは、当社の自動インストーラが使用し、参照するチャートと同じです。
nri-bundle
を Helm でインストール、設定する。
- 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がインストールされます。 変更点はこちら 。
以下のフラグに注意して調整してください。
global.licenseKey=YOUR_NEW_RELIC_LICENSE_KEY
: お客様のアカウントの有効なライセンスキーを設定する必要があります。global.cluster=K8S_CLUSTER_NAME
: New RelicのUIでクラスタを識別するために使用されるため、New Relicアカウントで設定された他のKubernetesクラスタでは使用されていない記述的な値を指定します。ksm.enabled=true
: これをtrue
に設定すると、Kube State Metrics (KSM) が自動的にインストールされます。これは、当社の統合を実行するために必要です。KSMがすでにクラスタ内に存在する場合は、別の名前空間であっても、これをfalseに設定することができます。prometheus.enabled=true
: Prometheus OpenMetricsインテグレーションが展開され、クラスタ内のPrometheusエンドポイントから自動的にデータを収集します。webhook.enabled=true
: 最小限のwebhookをインストールし、環境変数を追加することで、 New Relic APMでインスツルメントされたアプリケーションを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
見るべきです。
- One
newrelic-nrk8s-ksm
pod. newrelic-nrk8s-kubelet
ポッドを、クラスタの各ノードに1つずつ用意します。- クラスターの各マスターノードに、
newrelic-nrk8s-control-plane
ポッドがあれば1つ。 - 1つの
newrelic-kube-state-metrics
ポッド(KSMをインストールに含めていた場合)。 newrelic-nri-kube-events
ポッド(Kubernetesのイベントレポートを有効にしている場合)が1つ。- 1つの
newrelic-nri-prometheus
ポッド(Prometheusの統合を有効にした場合)。 - Loggingの統合を有効にしている場合は、クラスタの各ノードに1つの
newrelic-newrelic-logging
ポッド。
Helm 2とnri-bundle(レガシー)でのインストール
インテグレーションの設定
私たちの nri-bundle
chart.のインストール手順は上記のとおりですが、このチャートは、私たちのソリューションのコンポーネントを含む他のいくつかのチャートのラッパーまたはメタパッケージとして機能しています。このようなラッパーを提供することで、コンポーネントのチャートを比較的シンプルに保ちつつ、互いに互換性のあるバージョンで管理されたコンポーネントのセットを提供することができます。
個々の統合コンポーネントを設定するには、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秒の間の間隔を選択することをお勧めします。
スクラップの間隔を変更するには、 values-newrelic.yaml
、 newrelic-infratructure
のセクションに以下を追加します。
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データページの詳細検索を参照してください。
データ取り込みを減らす
当社のチャートでは、詳細な情報を落とす代わりに、取り込まれるデータ量を減らすオプションの設定がサポートされています。これを有効にするには、 global.lowDataMode
を true
nri-bundle
のチャートで設定します。
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 セクション で Labels and Annotations が Off
に設定されます。これは、この詳細がコンテナのログファイルから削除されることを意味し、New Relicへのデータ取り込み全体が減少します。
以下のフィールドが保持されます。
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