問題
New Relic Kubernetes integration のエラーメッセージが New Relic インフラストラクチャのログに表示されています。
使用しているライセンスが無効な場合、 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."
この問題を解決するには、有効な
License key
Your license key is used to associate your incoming data with your account. Learn more
Get your key Create accountエージェントが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
で検出動作を変更できます。
統合バージョン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---