問題
Kubernetes 統合のインストール中に端末から、または Kubernetes 統合のインストール後に New Relic インフラストラクチャ ログに、New Relic Kubernetes 統合のエラー メッセージが表示されます。
Kubernetes 統合の手動インストール中に次のエラー メッセージが表示された場合:
repo newrelic not found
Helm チャートに newrelic リポジトリを追加するためのこのコマンドを忘れたか、スキップした可能性があります。
helm repo add newrelic https://helm-charts.newrelic.com
使用しているライセンスが無効な場合、 agent
またはforwarder
コンテナのログに次のようなエラーが表示されます。
2018-04-09T14:20:17.750893186Z time="2018-04-09T14:20:17Z" level=error msg="metric sender can't process 0 times" error="InventoryIngest: events were not accepted: 401 401 Unauthorized Invalid license key."
この問題を解決するには、有効な .
エージェントがNewRelicサーバーに接続できない場合、 agent
またはforwarder
コンテナのログに次のようなエラーが表示されます。
2018-04-09T18:16:35.497195185Z time="2018-04-09T18:16:35Z" level=error msg="metric sender can't process 1 times" error="Error sending events: Post https://staging-infra-api.newrelic.com/metrics/events/bulk: net/http: request canceled (Client.Timeout exceeded while awaiting headers)"
エラーの内容によっては、ログに表示されるメッセージが異なる場合があります。
この問題に対処するには、 New Relic networks documentation を参照してください。
Kubernetesの統合にはkube-state-metrics
が必要です。それが見つからない場合は、newrelic-infraコンテナログに次のようなエラーが表示されます。
time="2022-06-21T09:12:20Z" level=error msg="retrieving scraper data: retrieving ksm data: discovering KSM endpoints: timeout discovering endpoints"
このエラーが発生する一般的な理由は以下の通りです。
kube-state-metrics
クラスターにデプロイされていません。kube-state-metrics
カスタム展開を使用して展開されます。kube-state-metrics
の複数のバージョンが実行されており、Kubernetes統合が正しいバージョンを検出していません。
Kubernetes 統合は、デフォルトですべての名前空間でラベル"app.kubernetes.io/name=kube-state-metrics"
を利用して、クラスター内のkube-state-metrics
自動的に検出します。
ヘルムチャート値のksm.config
で検出動作を変更できます。
ガイド付きインストール中、以下のような出力エラーは、Kubernetes クライアントと Kubernetes API サーバーの間でネットワーク接続の問題が発生していることを示しています。ガイド付きインストールを再度実行する前に、Kubernetes クライアントが Kubernetes API サーバーに接続できることを確認してください。
Unable to connect to the server: dial tcp [7777:777:7777:7777:77::77]:443: i/o timeout
ガイド付きインストール中に、 nrk8s-kubelet pod is not starting
のような出力エラーが発生し、Kubernetes kubelet ポッドを 5 分以内に開始できず、このタイムアウトによりインストール スクリプトが終了したことを示します。この場合、 kubectl get pods -o wide -n newrelic | grep nrk8s-kubelet
を実行してポッドのステータスを確認し、再起動できます。
- ポッドが
ImagePullBackOff
ステータスの場合は、ネットワーク接続を確認して、 ここにリストされているドメインからイメージを取得できるようにしてください。 - ポッドのステータスが
Pending
またはContainerCreating
の場合は、kubectl logs newrelic-bundle-nrk8s-kubelet-***** -n newrelic
とkubectl logs newrelic-bundle-nrk8s-kubelet-***** -n newrelic -c kubelet
を使用して、ログから考えられる原因を特定してください。
統合バージョンv2のソリューション
以下は、最も一般的なKubernetes統合エラーの解決策です。これらのエラーは、標準の非詳細インフラストラクチャエージェントログに表示されます。
たとえば、New Relicサポートで機能するより詳細なログが必要な場合は、 Kubernetesログを参照してください。
Kubernetesの統合にはkube-state-metrics
が必要です。それが見つからない場合は、newrelic-infraコンテナログに次のようなエラーが表示されます。
2018-04-11T08:02:41.765236022Z time="2018-04-11T08:02:41Z" level=error msg="executing data source" data prefix="integration/com.newrelic.kubernetes" error="exit status 1" plugin name=nri-kubernetes stderr="time=\"2018-04-11T08:02:41Z\" level=fatal msg=\"failed to discover kube-state-metrics endpoint, got error: no service found by label k8s-app=kube-state-metrics\"\n"
このエラーが発生する一般的な理由は以下の通りです。
kube-state-metrics
クラスターにデプロイされていません。kube-state-metrics
カスタム展開を使用して展開されます。kube-state-metrics
の複数のバージョンが実行されており、Kubernetes統合が正しいバージョンを検出していません。
Kubernetes統合は、次のロジックを使用してクラスター内のkube-state-metrics
を自動的に検出します。
kube-system
名前空間で実行されているkube-state-metrics
サービスを探します。- それが見つからない場合は、ラベル
"k8s-app: kube-state-metrics"
でタグ付けされたサービスを探します。
統合には、kube-state-metricsポッドにk8s-app: kube-state-metrics
またはapp: kube-state-metrics
のラベルが必要です。どちらも見つからない場合は、次のようなログエントリがあります。
2018-04-11T09:25:00.825532798Z time="2018-04-11T09:25:00Z" level=error msg="executing data source" data prefix="integration/com.newrelic.kubernetes" error="exit status 1" plugin name=nri-kubernetes stderr="time=\"2018-04-11T09:25:00Z\" level=fatal msg=\"failed to discover nodeIP with kube-state-metrics, got error: no pod found by label k8s-app=kube-state-metrics\"\n
この問題を解決するには、 k8s-app=kube-state-metrics
ラベルをkube-state-metrics
ポッドに追加します。
Kubernetesノード、ポッド、コンテナの指標は表示されているが、名前空間、デプロイ、 ReplicaSets
の指標が欠落している場合、Kubernetes統合はkube-state-metrics
に接続できません。
欠落している名前空間、デプロイメント、およびReplicaSet
データのインジケーター:
- # of K8s objects のチャートでは、そのデータが欠けています。
K8sNamespaceSample
、K8sDeploymentSample
、およびK8sReplicasetSample
のクエリでは、データは表示されません。
これにはいくつかの理由が考えられます。
kube-state-metrics
サービスは、ポート80でリッスンするようにカスタマイズされています。その場合、verbose
ログに次のようなエラーが表示されることがあります。time="2018-04-04T09:35:47Z" level=error msg="executing data source"data prefix="integration/com.newrelic.kubernetes" error="exit status 1"plugin name=nri-kubernetes stderr="time=\"2018-04-04T09:35:47Z\"level=fatal msg=\"Non-recoverable error group: error querying KSM.Get http://kube-state-metrics.kube-system.svc.cluster.local:0/metrics:net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)\"\n"これは、統合に送信する前に
kube-state-metrics
がすべてのクラスターの情報を収集するのに時間がかかりすぎる一部のクラスターで発生する既知の問題です。回避策として、 kube-state-metrics client timeout を増やしてください。
kube-state-metrics
インスタンスはkube-rbac-proxyの背後で実行されています。New Relicは現在、この構成をサポートしていません。verbose
ログに次のようなエラーが表示される場合があります。time="2018-03-28T23:09:12Z" level=error msg="executing data source"data prefix="integration/com.newrelic.kubernetes" error="exit status 1"plugin name=nri-kubernetes stderr="time=\"2018-03-28T23:09:12Z\"level=fatal msg=\"Non-recoverable error group: error querying KSM.Get http://192.168.132.37:8443/metrics: net/http: HTTP/1.xtransport connection broken: malformed HTTP response \\\"\\\\x15\\\\x03\\\\x01\\\\x00\\\\x02\\\\x02\\\"\"\n"KSMペイロードは非常に大きく、日付を処理するKubernetes統合はOOM-killされています。統合はコンテナのメインプロセスではないため、ポッドは再起動されません。この状況は、KSMの同じノードで実行されている
newrelic-infra
ポッドのログで確認できます。time="2020-12-10T17:40:44Z" level=error msg="Integration command failed" error="signal: killed" instance=nri-kubernetes integration=com.newrelic.kubernetes回避策としては、DaemonSetのメモリ制限を増やして、プロセスが殺されないようにします。
Newrelicのポッドとnewrelicのサービスアカウントが同じ名前空間にデプロイされません。これは通常、現在のコンテキストが名前空間を指定しているためです。このような場合は、以下のようなエラーが表示されます。
time=\"2018-05-31T10:55:39Z\" level=panic msg=\"pods is forbidden: User \\\"system:serviceaccount:kube-system:newrelic\\\" cannot list pods at the cluster scope\"
これを確認するには、次のように実行します。
kubectl describe serviceaccount newrelic | grep Namespacekubectl get pods -l name=newrelic-infra --all-namespaceskubectl config get-contexts
この問題を解決するには、New Relic DaemonSet
YAMLファイルのサービスアカウントの名前空間を、現在のコンテキストの名前空間と同じになるように変更します。
- kind: ServiceAccount name: newrelic namespace: default---