Avant disponibilité générale : 2026-02-26

7 Surveiller les mesures Besu avec Prometheus

Vous pouvez utiliser Prometheus et kube-prometheus-stack pour extraire les mesures des noeuds Besu s'exécutant dans des grappes Kubernetes.

Pour installer la surveillance, vous utilisez Helm, kube-prometheus-stack et le fichier de valeurs prédéfinies (monitoring.yml) qui est tenu à jour dans le référentiel Consensys/quorum-kubernetes. Dans ce scénario, Prometheus opère dans un maillage de services Istio et élimine en toute sécurité les mesures via TLS mutuel. Le paquet kube-prometheus-stack installe le logiciel suivant.
  • Prometheus
  • Opérateur Prometheus
  • Grafana
  • Gestionnaire d'alertes
  • Exportateurs Kubernetes standard

Dans l'architecture kube-prometheus-stack, Prometheus découvre des cibles de balayage à l'aide d'une ressource personnalisée Kubernetes appelée ServiceMonitor. Cette ressource définit les services à gratter, les ports et les chemins qui exposent les mesures et la configuration pour TLS et TLS mutuel. Les ressources ServiceMonitor pour les composants tels que kube-state-metrics et node-export sont créées automatiquement lorsque vous utilisez Helm pour installer kube-prometheus-stack. Toutefois, pour utiliser les mesures Oracle Blockchain Platform Enterprise Edition pour Hyperledger Besu, vous devez créer et gérer vos propres ressources ServiceMonitor.

Installez les préalables suivants.
  • Helm v3.x. Vous pouvez vérifier votre version de Helm en exécutant la commande suivante.
    helm version
  • kubectl
Vous devez également disposer d'un accès en ligne de commande à votre grappe Kubernetes. Pour plus d'informations, voir Se connecter à Oracle Kubernetes Engine.
  1. Installez kube-prometheus-stack à l'aide du fichier monitoring.yml compatible avec Besu.
    1. Entrez la commande suivante pour télécharger le fichier. Le fichier monitoring.yml est maintenu dans le référentiel Consensys/quorum-kubernetes.
      curl -o monitoring.yml \ 
      https://raw.githubusercontent.com/Consensys/quorum-kubernetes/master/helm/values/monitoring.yml 
    2. Si nécessaire, mettez à jour le mot de passe de l'administrateur Grafana et configurez les destinataires de l'alerte (par exemple, courriel ou Slack) dans monitoring.yml avant le déploiement.
    3. S'il n'est pas déjà présent, ajoutez le référentiel Helm de la communauté Prometheus
      helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 
      helm repo update 
    4. Installez la pile de surveillance dans un espace de noms dédié à la surveillance. Dans la commande suivante, l'espace de noms est appelé surveillance.
      helm install monitoring prometheus-community/kube-prometheus-stack \ 
        --version 34.10.0 \ 
        --namespace monitoring \ 
        --create-namespace \ 
        --values monitoring.yml 
    5. Exécutez la commande suivante pour vérifier le statut du déploiement.
      kubectl get pods -n monitoring -l release=monitoring
    Le processus d'installation déploie la pile de surveillance dans l'espace de noms monitoring, applique les remplacements du fichier monitoring.yml pour assurer la compatibilité Besu et crée les ressources Kubernets ServiceMonitor standard requises par la pile.
  2. Ajoutez des annotations Istio au fichier monitoring.yml pour activer l'injection Istio sidecar pour Prometheus. Prometheus doit joindre le maillage Istio pour gratter les points d'extrémité Besu via TLS mutuel. Ouvrez le fichier monitoring.yml à modifier et recherchez la section suivante.
    prometheus: 
      prometheusSpec: 
        podMetadata:
    Ajoutez les annotations Istio suivantes.
    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: "" 
    Ces annotations ajoutent Prometheus au maillage Istio, configurent Istio pour écrire des certificats mTLS de charge de travail sur un volume partagé, empêchent Envoy d'intercepter le trafic entrant Prometheus et mettent les certificats générés par Istio à la disposition du conteneur Prometheus.
  3. Ajoutez des volumes et des montages de volume aux informations du fichier monitoring.yml pour monter des certificats Istio dans Prometheus. Recherchez le texte suivant dans le fichier monitoring.yml.
    Recherchez la section volumes, qui est initialement vide.
        volumes: []
    Mettez à jour la section volumes comme indiqué dans le texte suivant.
        volumes: 
          - name: istio-certs 
            emptyDir: 
              medium: Memory 
     
    Recherchez la section volumeMounts, qui est initialement vide.
        volumeMounts: []
    Mettez à jour la section volumeMounts comme indiqué dans le texte suivant.
        volumeMounts: 
          - name: istio-certs 
            mountPath: /etc/prom-certs 
            readOnly: true
    Les certificats générés par Istio sont maintenant disponibles dans Prometheus à l'adresse /etc/prom-certs/.
  4. Appliquez la configuration mise à jour.
    1. Mettez à niveau la version Helm existante avec le fichier de valeurs modifié.
      helm upgrade monitoring prometheus-community/kube-prometheus-stack \ 
        --namespace monitoring \ 
        --values monitoring.yml 
    2. Vérifiez que le pod Prometheus a redémarré et s'exécute avec un sidecar Istio.
      kubectl get pods -n monitoring | grep prometheus 
  5. Créez une ressource ServiceMonitor pour les mesures Besu, à l'aide de l'exemple suivant.
    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 
    Les chemins de certificat doivent correspondre à l'emplacement monté (etc/prom-certs). L'étiquette release doit correspondre à la valeur serviceMonitorSelector dans Prometheus. L'exemple précédent gratte les mesures à partir des noeuds RPC (besu-role: rpc). Pour gratter les mesures à partir des noeuds de démarrage, des noeuds de valideur ou des noeuds d'archive, créez des ressources ServiceMonitor distinctes et modifiez l'étiquette besu-role en conséquence (bootnode, validator ou archive).
  6. Vérifiez que des mesures sont collectées dans Prometheus.
    1. Exécutez la commande suivante pour transférer le port du service Prometheus.
      kubectl port-forward -n <namespace> prometheus-monitoring-kube-prometheus-prometheus-
    2. Ouvrez http://localhost:9090, puis sélectionnez Statut, puis Cibles. Vérifiez que les cibles Besu sont à l'état UP.
    3. Exécutez un exemple d'interrogation, tel que l'exemple suivant.
      besu_blockchain_chain_head_transaction_count 
  7. Accédez à Grafana pour vérifier que les mesures sont collectées. Exécutez la commande suivante pour transférer le port du service Grafana.
    kubectl port-forward svc/monitoring-grafana -n <namespace> 3000:80 
    • URL : http://localhost:3000
    • Nom d'utilisateur : admin
    • Exécutez la commande suivante pour extraire le mot de passe :
      kubectl get secret -n <namespace> monitoring-grafana \ 
      -o jsonpath="{.data.admin-password}" | base64 --decode ; echo