Prometheusの問題のトラブルシューティング

Kubernetesクラスタ・モニターがDOWN状態である

Prometheusコンソールでターゲットを表示するとき、一部のKubernetesクラスタ・モニターが停止している可能性があります(kube-etcdkube-proxyなど)。これは、Kubernetesクラスタ自体の構成が原因と考えられます。クラスタのタイプによっては、特定のメトリックがデフォルトで無効になっている場合があります。メトリックの有効化はクラスタによって異なります。詳細は、クラスタ・タイプのドキュメントを参照してください。

たとえば、kindクラスタのkube-proxyメトリックを有効にするには、kube-proxy ConfigMapを編集します。

$ kubectl edit cm/kube-proxy -n kube-system

metricsBindAddress値を次の値で置き換えて、ConfigMapを保存します。

metricsBindAddress: 0.0.0.0:10249

次に、kube-proxyポッドを再起動します。

$ kubectl delete pod -l k8s-app=kube-proxy -n kube-system

詳細は、GitHubのこの問題を参照してください。

メトリック・トレイトのサービス・モニターが検出されない

メトリック・トレイトで使用するサービス・モニターにはメトリックを収集するためのサービスが必要です。OAMワークロードがイングレス・トレイトではなくメトリック・トレイトを含むように作成されている場合、ワークロードのためにサービスが生成されないことがあります。その場合は手動で作成する必要があります。

このトラブルシューティングの例では、hello-helidonアプリケーションを使用します。

アプリケーション・ワークロードに対してサービス・モニターが存在することを確認します。

$ kubectl get servicemonitors -n hello-helidon

アプリケーション・ワークロードに対してサービスが存在することを確認します。

$ kubectl get services -n hello-helidon

サービスが存在しない場合は、手動で作成します。この例では、デフォルトのPrometheusポートを使用します。

apiVersion: v1
kind: Service
metadata:
  name: hello-helidon-service
  namespace: hello-helidon
spec:
  selector:
    app: hello-helidon
  ports:
    - name: tcp-hello-helidon
      port: 8080
      protocol: TCP
      targetPort: 8080

これらのステップを完了した後で、メトリック収集が成功したことを確認できます。

メトリック問合せでメトリックが返されなくなった

Prometheusストレージが容量に達すると、メトリック問合せで結果が返されなくなります。Prometheusログを確認してください。

$ kubectl logs -l app.kubernetes.io/instance=prometheus-operator-kube-p-prometheus -n verrazzano-monitoring

ディスクに空きがないことを示すメッセージがある場合は、ストレージを拡張するかディスク領域を解放する必要があります。デフォルトのストレージ・クラスでボリューム拡張がサポートされている場合は、ボリュームの拡張を試行できます。

デフォルトのストレージ・クラスでボリューム拡張が許可されているかどうかを確認します。

$ kubectl get storageclass

デフォルトのストレージ・クラスで拡張が許可されている場合は、より大きなサイズを使用するように永続ボリューム要求とPrometheusリソース・ストレージ・リクエストを変更します。

たとえば、ストレージを100Giに増やすには:

$ kubectl patch pvc prometheus-prometheus-operator-kube-p-prometheus-db-prometheus-prometheus-operator-kube-p-prometheus-0 -n verrazzano-monitoring \
   --type=merge -p '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'

$ kubectl patch prometheus prometheus-operator-kube-p-prometheus -n verrazzano-monitoring \
   --type=merge -p '{"spec":{"storage":{"volumeClaimTemplate":{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}}}}'

または、Prometheusポッドの既存のメトリック・データを削除して領域を解放します。

$ kubectl exec statefulset.apps/prometheus-prometheus-operator-kube-p-prometheus -n verrazzano-monitoring -- rm -fr /prometheus/wal

$ kubectl rollout restart statefulset.apps/prometheus-prometheus-operator-kube-p-prometheus -n verrazzano-monitoring

Prometheusポッドの永続ストレージの空きがなくならないようにPrometheusデータ保持設定を構成する方法の詳細は、「データ保持設定の構成」を参照してください。