問題
New Relic Kubernetes integration のエラーメッセージが New Relic インフラストラクチャのログに表示されています。
解決策
以下は、最も一般的なKubernetes統合エラーの解決策です。これらのエラーは、標準の(冗長ではない)Infrastructureエージェントのログに表示されます。より詳細なログが必要な場合(New Relicサポートと連携する場合など)は、 Kubernetes logging を参照してください。
使用しているライセンスが無効な場合は、ログに以下のようなエラーが表示されます。
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."
この問題を解決するには、有効な ライセンスキー を指定してください。キーは引用符で囲み、先頭と末尾にスペースを入れないでください。例
- name: "NRIA_LICENSE_KEY" value: "1234567890abcdefghijklmnopqrstuvwxyz1234"
エージェントがNew Relicのサーバーに接続できない場合、ログに以下のようなエラーが表示されます。
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のコンテナログに以下のようなエラーが表示されます。
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-state-metrics
サービスがkube-system
名前空間上で動作しているかどうかを調べます。- これが見つからない場合は、ラベル
" でタグ付けされたサービスを探します。 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---