Apresentação Técnica
2023
Hyperledger Besu é um cliente Ethereum de código aberto desenvolvido sob a licença Apache 2.0 e escrito em Java.
Pode ser executado em redes públicas ou privadas, oferecendo recursos avançados para empresas.
besu --network=dev \
--miner-enabled=true \
--miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 \
--rpc-http-enabled=true \
--metrics-enabled=true
O BESU é composto por vários módulos que trabalham juntos para fornecer uma implementação completa do protocolo Ethereum.
Sua arquitetura modular permite fácil extensão e personalização para diferentes casos de uso.
Arquitetura BESU
Fluxo de dados e monitoramento
Para habilitar métricas no BESU, adicione os seguintes parâmetros:
besu --metrics-enabled=true \
--metrics-host=0.0.0.0 \
--metrics-port=9545 \
--metrics-category=PROCESS \
--metrics-push-enabled=true \
--metrics-push-host=prometheus-server \
--metrics-push-port=9091 \
--metrics-push-interval=15
Configuração básica do Prometheus:
scrape_configs:
- job_name: 'besu'
scrape_interval: 15s
static_configs:
- targets: ['besu-node:9545']
metrics_path: /metrics
1. Coleta
BESU expõe métricas
2. Armazenamento
Prometheus armazena
3. Visualização
Grafana exibe dashboards
Utilização de recursos do host
Operações de leitura/escrita
Tráfego de entrada/saída
Heap, garbage collection
Número do bloco atual
Intervalo entre blocos
Taxa de transações por segundo
Número de conexões P2P
rate(besu_blockchain_height[5m])
besu_peers
rate(besu_transaction_pool_transactions_added_total[1m])
Exemplo de dashboard Grafana para monitoramento BESU
Crítico
Alerta
Informativo
groups:
- name: besu_alerts
rules:
- alert: BesuNodeDown
expr: up{job="besu"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Besu node down"
description: "Besu node has been down for more than 5 minutes"
O arquivo prometheus.yml é o principal arquivo de configuração do Prometheus.
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'besu'
metrics_path: '/metrics'
static_configs:
- targets: ['besu-node:9545']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
Configure regras de alerta para monitorar métricas críticas do BESU.
groups:
- name: besu
rules:
- alert: BesuNodeDown
expr: up{job="besu"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Besu node down"
description: "Besu node has been down for more than 5 minutes"
- alert: BesuHighCPU
expr: rate(process_cpu_seconds_total{job="besu"}[5m]) > 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "High CPU usage"
description: "Besu is using more than 80% CPU for over 10 minutes"
Exemplo de configuração usando Docker Compose para Prometheus e Grafana.
version: '3'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./besu_rules.yml:/etc/prometheus/besu_rules.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-storage:/var/lib/grafana
volumes:
grafana-storage:
Coleta
Prometheus scraper
Armazenamento
Time-series DB
Alertas
Alert Manager
Visualização
Grafana
Exemplos de consultas PromQL para monitorar métricas do BESU.
Altura do Bloco
besu_blockchain_height
Taxa de Transações
rate(besu_transaction_pool_transactions_added_total[5m])
Uso de CPU
rate(process_cpu_seconds_total{job="besu"}[1m])
Uso de Memória
process_resident_memory_bytes{job="besu"} / 1024 / 1024
Após instalar o Grafana, configure a fonte de dados do Prometheus:
Name: Prometheus
Type: Prometheus
URL: http://prometheus:9090
Access: Server (default)
Scrape interval: 15s
Clique em "Save & Test" para verificar a conexão com o Prometheus.
Você pode importar dashboards pré-configurados para o BESU:
Exemplo de dashboard Grafana para monitoramento BESU
Métricas de Nó
Métricas de Transações
Métricas de Sistema
Alertas
#!/bin/bash
besu --network=dev \
--miner-enabled=true \
--miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73 \
--rpc-http-enabled=true \
--rpc-http-api=ETH,NET,WEB3,ADMIN \
--host-allowlist="*" \
--rpc-http-cors-origins="*" \
--metrics-enabled=true \
--metrics-host=0.0.0.0 \
--metrics-port=9545 \
--metrics-category=PROCESS,PEERS,BLOCKCHAIN,SYNCHRONIZER,RPC,JVM \
--data-path=/opt/besu/data
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
rule_files:
- "besu_rules.yml"
scrape_configs:
- job_name: 'besu'
metrics_path: '/metrics'
static_configs:
- targets: ['besu:9545']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
groups:
- name: besu_alerts
rules:
- alert: BesuNodeDown
expr: up{job="besu"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Besu node down"
description: "Besu node has been down for more than 5 minutes"
- alert: BesuLowPeers
expr: besu_peers < 3
for: 10m
labels:
severity: warning
annotations:
summary: "Low peer count"
description: "Besu has less than 3 peers for more than 10 minutes"
version: '3'
services:
besu:
image: hyperledger/besu:latest
command:
- --network=dev
- --miner-enabled=true
- --miner-coinbase=0xfe3b557e8fb62b89f4916b721be55ceb828dbd73
- --rpc-http-enabled=true
- --rpc-http-api=ETH,NET,WEB3,ADMIN
- --host-allowlist=*
- --rpc-http-cors-origins=*
- --metrics-enabled=true
- --metrics-host=0.0.0.0
- --metrics-port=9545
ports:
- "8545:8545"
- "9545:9545"
volumes:
- besu-data:/opt/besu/data
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./besu_rules.yml:/etc/prometheus/besu_rules.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-storage:/var/lib/grafana
volumes:
besu-data:
grafana-storage:
Visualização de métricas no Grafana
Altura do Bloco
besu_blockchain_height
Taxa de Transações
rate(besu_transaction_pool_transactions_added_total[5m])
Uso de Memória
process_resident_memory_bytes{job="besu"} / 1024 / 1024
Monitoramento de redes blockchain privadas em ambientes corporativos.
Exemplo: Rede de Supply Chain
Monitoramento de nós BESU em uma rede de rastreamento de produtos, garantindo visibilidade e integridade dos dados em toda a cadeia.
Monitoramento de redes multi-organizacionais com múltiplos participantes.
Exemplo: Consórcio Financeiro
Monitoramento centralizado de uma rede BESU compartilhada entre instituições financeiras para liquidação de transações.
Arquitetura de monitoramento para redes BESU em produção
Detecção proativa de falhas e problemas antes que afetem os usuários.
Otimização de recursos e identificação de gargalos para melhor throughput.
Detecção de atividades suspeitas e tentativas de ataque à rede.
Registro histórico de eventos e métricas para análise e conformidade.
O monitoramento adequado é crucial para garantir a confiabilidade, desempenho e segurança de redes BESU em produção.
Prometheus e Grafana formam uma solução robusta e flexível para monitoramento de redes blockchain.
Identificar e monitorar as métricas certas permite detecção proativa de problemas e otimização contínua.
Alertas bem configurados reduzem o tempo de resposta a incidentes e minimizam o impacto de falhas.
hyperledger.org/use/besu
github.com/hyperledger/besu
hyperledger.org/events
chat.hyperledger.org
Tem dúvidas ou gostaria de discutir mais sobre monitoramento BESU?
Agradecemos sua participação neste estudo técnico sobre Monitoramento do BESU.
Próximo encontro: 15/06/2023 - "Smart Contracts Avançados"