Versión previa a Disponibilidad General: 2026-02-26

7 Supervisión de métricas de Besu con Prometheus

Puede utilizar Prometheus y kube-prometheus-stack para recuperar métricas de los nodos Besu que se ejecutan en clusters de Kubernetes.

Para instalar la supervisión, utilice Helm, la pila kube-prometheus y el archivo de valores predefinidos (monitoring.yml) que se mantiene en el repositorio Consensys/quorum-kubernetes. En este escenario, Prometheus opera dentro de una malla de servicio de Istio y extrae métricas de forma segura a través de TLS mutua. El paquete kube-prometheus-stack instala el siguiente software.
  • Prometheus
  • Operador Prometheus
  • Grafana
  • Gestor de alertas
  • Exportadores de Kubernetes estándar

En la arquitectura de pila kube-prometheus, Prometheus descubre destinos de desecho mediante un recurso personalizado de Kubernetes denominado ServiceMonitor. Este recurso define los servicios que se deben desechar, los puertos y las rutas que exponen las métricas y la configuración de TLS y TLS mutua. Los recursos ServiceMonitor para componentes como kube-state-metrics y node-exporter se crean automáticamente cuando se utiliza Helm para instalar kube-prometheus-stack. Sin embargo, para eliminar las métricas de Oracle Blockchain Platform Enterprise Edition para Hyperledger Besu, debe crear y gestionar sus propios recursos de ServiceMonitor.

Instale los siguientes requisitos previos.
  • Helm v3.x. Puede verificar la versión de Helm ejecutando el siguiente comando.
    helm version
  • kubectl
También debe tener acceso de línea de comandos al cluster de Kubernetes. Para obtener más información, consulte Conexión a Oracle Kubernetes Engine.
  1. Instale kube-prometheus-stack utilizando el archivo monitoring.yml que es compatible con Besu.
    1. Introduzca el siguiente comando para descargar el archivo. El archivo monitoring.yml se mantiene en el repositorio de Consensys/quorum-kubernetes.
      curl -o monitoring.yml \ 
      https://raw.githubusercontent.com/Consensys/quorum-kubernetes/master/helm/values/monitoring.yml 
    2. Si es necesario, actualice la contraseña del administrador de Grafana y configure los receptores de alertas (por ejemplo, correo electrónico o Slack) en monitoring.yml antes del despliegue.
    3. Si aún no está presente, agregue el repositorio de Helm de la comunidad de Prometheus
      helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 
      helm repo update 
    4. Instale la pila de supervisión en un espacio de nombres dedicado a la supervisión. En el siguiente comando, el espacio de nombres se denomina supervisión.
      helm install monitoring prometheus-community/kube-prometheus-stack \ 
        --version 34.10.0 \ 
        --namespace monitoring \ 
        --create-namespace \ 
        --values monitoring.yml 
    5. Ejecute el siguiente comando para comprobar el estado del despliegue.
      kubectl get pods -n monitoring -l release=monitoring
    El proceso de instalación despliega la pila de supervisión en el espacio de nombres monitoring, aplica sustituciones del archivo monitoring.yml para la compatibilidad con Besu y crea los recursos ServiceMonitor de Kubernets estándar que necesita la pila.
  2. Agregue anotaciones de Istio al archivo monitoring.yml para activar la inyección de sidecar de Istio para Prometheus. Prometheus debe unirse a la malla de Istio para raspar los puntos finales de Besu a través de TLS mutua. Abra el archivo monitoring.yml para editarlo y busque la siguiente sección.
    prometheus: 
      prometheusSpec: 
        podMetadata:
    Agregue las siguientes anotaciones de Istio.
    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: "" 
    Estas anotaciones agregan Prometheus a la malla Istio, configura Istio para escribir certificados mTLS de carga de trabajo en un volumen compartido, evita que Envoy intercepte el tráfico entrante de Prometheus y hace que los certificados generados por Istio estén disponibles para el contenedor Prometheus.
  3. Agregue información sobre volúmenes y montajes de volúmenes al archivo monitoring.yml para montar certificados de Istio en Prometheus. Busque el siguiente texto en el archivo monitoring.yml.
    Busque la sección volumes, que está inicialmente vacía.
        volumes: []
    Actualice la sección volumes como se muestra en el siguiente texto.
        volumes: 
          - name: istio-certs 
            emptyDir: 
              medium: Memory 
     
    Busque la sección volumeMounts, que está inicialmente vacía.
        volumeMounts: []
    Actualice la sección volumeMounts como se muestra en el siguiente texto.
        volumeMounts: 
          - name: istio-certs 
            mountPath: /etc/prom-certs 
            readOnly: true
    Los certificados generados por Istio ya están disponibles en Prometheus en /etc/prom-certs/.
  4. Aplique la configuración actualizada.
    1. Actualice la versión de Helm existente con el archivo de valores modificado.
      helm upgrade monitoring prometheus-community/kube-prometheus-stack \ 
        --namespace monitoring \ 
        --values monitoring.yml 
    2. Verifique que el pod Prometheus se haya reiniciado y se esté ejecutando con un sidecar de Istio.
      kubectl get pods -n monitoring | grep prometheus 
  5. Cree un recurso ServiceMonitor para las métricas de Besu mediante el siguiente ejemplo.
    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 
    Las rutas de certificado deben coincidir con la ubicación montada (etc/prom-certs). La etiqueta release debe coincidir con el valor serviceMonitorSelector en Prometheus. En el ejemplo anterior, se extraen métricas de los nodos RPC (besu-role: rpc). Para extraer métricas de nodos de inicio, nodos de validador o nodos de archivo, cree recursos ServiceMonitor independientes y edite la etiqueta besu-role según corresponda (bootnode, validator o archive).
  6. Verifique que las métricas se están recopilando en Prometheus.
    1. Ejecute el siguiente comando para reenviar el puerto del servicio Prometheus.
      kubectl port-forward -n <namespace> prometheus-monitoring-kube-prometheus-prometheus-
    2. Abra http://localhost:9090 y, a continuación, seleccione Estado y Destinos. Confirme que los destinos Besu tengan el estado UP.
    3. Ejecute una consulta de ejemplo, como el siguiente ejemplo.
      besu_blockchain_chain_head_transaction_count 
  7. Accede a Grafana para confirmar que se están recopilando métricas. Ejecute el siguiente comando para reenviar el puerto del servicio Grafana.
    kubectl port-forward svc/monitoring-grafana -n <namespace> 3000:80 
    • URL: http://localhost:3000
    • Nombre de usuario: admin
    • Ejecute el siguiente comando para recuperar la contraseña:
      kubectl get secret -n <namespace> monitoring-grafana \ 
      -o jsonpath="{.data.admin-password}" | base64 --decode ; echo