Version préliminaire de Disponibilité Générale ("Pre-GA") : 2026-02-26

7 Surveiller les mesures de Besu avec Prometheus

Vous pouvez utiliser Prometheus et kube-prometheus-stack pour extraire des mesures des noeuds Besu exécutés dans des clusters Kubernetes.

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

Dans l'architecture kube-prometheus-stack, Prometheus découvre les cibles de raclage à 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-exporter sont automatiquement créées lorsque vous utilisez Helm pour installer kube-prometheus-stack. Toutefois, pour analyser les mesures d'Oracle Blockchain Platform Enterprise Edition for Hyperledger Besu, vous devez créer et gérer vos propres ressources ServiceMonitor.

Installez les prérequis 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 cluster Kubernetes. Pour plus d'informations, reportez-vous à Connexion à Oracle Kubernetes Engine.
  1. Installez kube-prometheus-stack en utilisant le fichier monitoring.yml compatible avec Besu.
    1. Entrez la commande suivante pour télécharger le fichier. Le fichier monitoring.yml est conservé 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 récepteurs d'alerte (par exemple, e-mail ou Slack) dans le fichier 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é monitoring.
      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 des remplacements à partir du fichier monitoring.yml pour 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 Prométhée. Prometheus doit rejoindre le maillage Istio pour gratter les points de terminaison Besu via un TLS mutuel. Ouvrez le fichier monitoring.yml pour le 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 globale sur un volume partagé, empêchent Envoy d'intercepter le trafic entrant Prometheus et rendent les certificats générés par Istio disponibles pour le conteneur Prometheus.
  3. Ajoutez des informations sur les volumes et les montages de volume au fichier monitoring.yml pour monter les 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 désormais disponibles dans Prometheus à l'adresse /etc/prom-certs/.
  4. Appliquez la configuration mise à jour.
    1. Mettez à niveau la version existante de Helm 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 fonctionne avec un side-car Istio.
      kubectl get pods -n monitoring | grep prometheus 
  5. Créez une ressource ServiceMonitor pour les mesures Besu, en utilisant 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). Le libellé release doit correspondre à la valeur serviceMonitorSelector dans Prométhée. L'exemple précédent extrait les mesures des noeuds RPC (besu-role: rpc). Pour supprimer des mesures à partir de noeuds d'initialisation, de noeuds de validation ou de noeuds d'archive, créez des ressources ServiceMonitor distinctes et modifiez le libellé besu-role en conséquence (bootnode, validator ou archive).
  6. Vérifiez que les mesures sont collectées dans Prométhée.
    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 de requête, 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 récupérer le mot de passe :
      kubectl get secret -n <namespace> monitoring-grafana \ 
      -o jsonpath="{.data.admin-password}" | base64 --decode ; echo