Entwurf vor allgemeiner Verfügbarkeit: 2026-02-26

7 Besu-Metriken mit Prometheus überwachen

Mit Prometheus und kube-prometheus-stack können Sie Metriken aus den Besu-Knoten abrufen, die in Kubernetes-Clustern ausgeführt werden.

Zur Installation von Monitoring verwenden Sie Helm, kube-prometheus-stack und die vordefinierte Wertedatei (monitoring.yml), die im Repository Consensys/quorum-kubernetes verwaltet wird. In diesem Szenario arbeitet Prometheus innerhalb eines Istio-Service-Netzes und schabt Metriken über gegenseitige TLS sicher ab. Das Paket kube-prometheus-stack installiert die folgende Software.
  • Prometheus
  • Prometheus-Operator
  • Grafana
  • Alertmanager
  • Standard-Kubernetes-Exporteure

In der kube-prometheus-stack-Architektur entdeckt Prometheus Scrape-Ziele, indem eine benutzerdefinierte Kubernetes-Ressource namens ServiceMonitor verwendet wird. Diese Ressource definiert die zu scrapenden Services, die Ports und Pfade, die Metriken bereitstellen, sowie die Konfiguration für TLS und gegenseitiges TLS. ServiceMonitor-Ressourcen für Komponenten wie kube-state-metrics und node-exporter werden automatisch erstellt, wenn Sie kube-prometheus-stack mit Helm installieren. Um jedoch die Oracle Blockchain Platform Enterprise Edition für Hyperledger Besu-Metriken zu ermitteln, müssen Sie Ihre eigenen ServiceMonitor-Ressourcen erstellen und verwalten.

Installieren Sie die folgenden Voraussetzungen.
  • Helm-v3.x. Sie können die Helm-Version prüfen, indem Sie den folgenden Befehl ausführen.
    helm version
  • kubectl
Sie benötigen auch Befehlszeilenzugriff auf Ihr Kubernetes-Cluster. Weitere Informationen finden Sie unter Verbindung zu Oracle Kubernetes Engine herstellen.
  1. Installieren Sie kube-prometheus-stack mit der Datei monitoring.yml, die mit Besu kompatibel ist.
    1. Geben Sie den folgenden Befehl ein, um die Datei herunterzuladen. Die Datei monitoring.yml wird im Consensys/quorum-kubernetes-Repository verwaltet.
      curl -o monitoring.yml \ 
      https://raw.githubusercontent.com/Consensys/quorum-kubernetes/master/helm/values/monitoring.yml 
    2. Aktualisieren Sie bei Bedarf das Grafana-Administratorkennwort, und konfigurieren Sie Alertempfänger (z.B. E-Mail oder Slack) vor dem Deployment in der Datei monitoring.yml.
    3. Falls noch nicht vorhanden, fügen Sie das Helm-Repository der Prometheus-Community hinzu
      helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 
      helm repo update 
    4. Installieren Sie den Monitoringstack in einem Namespace, der für das Monitoring dediziert ist. Im folgenden Befehl wird der Namespace als Überwachen bezeichnet.
      helm install monitoring prometheus-community/kube-prometheus-stack \ 
        --version 34.10.0 \ 
        --namespace monitoring \ 
        --create-namespace \ 
        --values monitoring.yml 
    5. Führen Sie den folgenden Befehl durch, um den Deployment-Status zu prüfen.
      kubectl get pods -n monitoring -l release=monitoring
    Der Installationsprozess stellt den Monitoringstack im Namespace monitoring bereit, wendet Overrides aus der Datei monitoring.yml auf Besu-Kompatibilität an und erstellt die Standard-Kubernets-ServiceMonitor-Ressourcen, die der Stack benötigt.
  2. Fügen Sie Istio-Anmerkungen zur Datei monitoring.yml hinzu, um Istio-Sidecar-Injection für Prometheus zu aktivieren. Prometheus muss sich dem Istio-Mesh anschließen, um Besu-Endpunkte über gegenseitige TLS zu kratzen. Öffnen Sie die Datei monitoring.yml zur Bearbeitung, und suchen Sie den folgenden Abschnitt.
    prometheus: 
      prometheusSpec: 
        podMetadata:
    Fügen Sie die folgenden Istio-Anmerkungen hinzu.
    prometheus: 
      prometheusSpec: 
        podMetadata: 
          annotations: 
            sidecar.istio.io/inject: "true" 
            sidecar.istio.io/userVolumeMount: | 
              [{"name": "istio-certs", "mountPath": "/etc/istio-certs", "readOnly": true}] 
            proxy.istio.io/config: | 
              proxyMetadata: 
                OUTPUT_CERTS: /etc/istio-certs 
              proxyMetadata.INBOUND_CAPTURE_PORTS: "" 
    Diese Annotationen fügen Prometheus zum Istio-Mesh hinzu, konfigurieren Istio, um mTLS-Zertifikate für Workloads auf ein freigegebenes Volume zu schreiben, verhindern, dass Envoy eingehenden Prometheus-Traffic abfangen kann, und stellen Zertifikate, die von Istio generiert werden, dem Prometheus-Container zur Verfügung.
  3. Fügen Sie der Datei monitoring.yml Informationen zu Volumes und Volume-Mounts hinzu, um Istio-Zertifikate in Prometheus zu mounten. Suchen Sie den folgenden Text in der Datei monitoring.yml.
    Suchen Sie den Abschnitt volumes, der zunächst leer ist.
        volumes: []
    Aktualisieren Sie den Abschnitt volumes wie im folgenden Text dargestellt.
        volumes: 
          - name: istio-certs 
            emptyDir: 
              medium: Memory 
     
    Suchen Sie den Abschnitt volumeMounts, der zunächst leer ist.
        volumeMounts: []
    Aktualisieren Sie den Abschnitt volumeMounts wie im folgenden Text dargestellt.
        volumeMounts: 
          - name: istio-certs 
            mountPath: /etc/prom-certs 
            readOnly: true
    Von Istio generierte Zertifikate sind jetzt in Prometheus unter /etc/prom-certs/. verfügbar
  4. Wenden Sie die aktualisierte Konfiguration an.
    1. Aktualisieren Sie das vorhandene Helm-Release mit der Datei mit den geänderten Werten.
      helm upgrade monitoring prometheus-community/kube-prometheus-stack \ 
        --namespace monitoring \ 
        --values monitoring.yml 
    2. Stellen Sie sicher, dass der Prometheus-Pod neu gestartet wurde und mit einem Istio-Fahrzeug läuft.
      kubectl get pods -n monitoring | grep prometheus 
  5. Erstellen Sie eine ServiceMonitor-Ressource für Besu-Metriken mit dem folgenden Beispiel.
    apiVersion: monitoring.coreos.com/v1 
    kind: ServiceMonitor 
    metadata: 
      name: obp-besu-rpc-metrics 
      namespace: <besu-namespace> 
      labels: 
        release: monitoring   # Must match Prometheus serviceMonitorSelector 
    spec: 
      selector: 
        matchLabels: 
          app: besu 
          besu-role: rpc 
      namespaceSelector: 
        matchNames: 
          - <besu-namespace> 
      endpoints: 
        - port: metrics 
          path: /metrics 
          interval: 30s 
          scheme: https 
          tlsConfig: 
            caFile: /etc/prom-certs/root-cert.pem 
            certFile: /etc/prom-certs/cert-chain.pem 
            keyFile: /etc/prom-certs/key.pem 
            insecureSkipVerify: true 
    Die Zertifikatspfade müssen mit dem gemounteten Speicherort (etc/prom-certs) übereinstimmen. Das Label release muss mit dem Wert serviceMonitorSelector in Prometheus übereinstimmen. Im vorherigen Beispiel werden Metriken aus RPC-Knoten (besu-role: rpc) entfernt. Um Metriken von Bootknoten, Validatorknoten oder Archivknoten zu prüfen, erstellen Sie separate ServiceMonitor-Ressourcen, und bearbeiten Sie das Label besu-role entsprechend (bootnode, validator oder archive).
  6. Prüfen Sie, ob Metriken in Prometheus erfasst werden.
    1. Führen Sie den folgenden Befehl aus, um den Port des Prometheus-Service weiterzuleiten.
      kubectl port-forward -n <namespace> prometheus-monitoring-kube-prometheus-prometheus-
    2. Öffnen Sie http://localhost:9090, und wählen Sie Status, Ziele aus. Vergewissern Sie sich, dass die Besu-Ziele den Status UP aufweisen.
    3. Führen Sie eine Beispielabfrage aus. Beispiel:
      besu_blockchain_chain_head_transaction_count 
  7. Greifen Sie auf Grafana zu, um zu bestätigen, dass Metriken erfasst werden. Führen Sie den folgenden Befehl aus, um den Port des Grafana-Service weiterzuleiten.
    kubectl port-forward svc/monitoring-grafana -n <namespace> 3000:80 
    • URL: http://localhost:3000
    • Benutzername: admin
    • Führen Sie den folgenden Befehl aus, um das Kennwort abzurufen:
      kubectl get secret -n <namespace> monitoring-grafana \ 
      -o jsonpath="{.data.admin-password}" | base64 --decode ; echo