Monitoramento de Node (Nó) | Random Beacon do Keep
Usando Grafana, Prometheus e Loki
Neste artigo, resumirei as etapas usadas para configurar o monitoramento no node Keep Random Beacon usando Grafana, Prometheus, Prometheus Node Exporter, Google cAdvisor e Loki.
A configuração Grafana, Prometheus, cAdvisor, Node Exporter e Loki descrita neste artigo é genérica e pode ser usada com outros contêineres do docker. O node Keep Random Beacon em execução em um Docker Container é usado como exemplo nas instruções.
Este artigo presume que você já está familiarizado com a execução do Keep Random Beacon.
Visão geral
Grafana é uma plataforma de código aberto usada para fornecer gráficos e painéis amigáveis criados com várias fontes de dados. Para obter mais informações sobre a Grafana, visite seu site.
O Prometheus é um sistema de monitoramento de código aberto que pode coletar e retransmitir estatísticas de sistemas para plataformas de visualização como o Grafana. O Exportador de Node Prometheus é usado para coletar e exportar métricas de hardware e sistema operacional expostas por Kernels Unix / Linux.
O Google cAdvisor coleta, agrega, processa e exporta informações sobre a execução de contêineres [refrence: https://hub.docker.com/r/google/cadvisor].
Grafana Loki é um sistema de agregação de log multilocatário de código aberto desenvolvido pela Grafana Labs.
Usaremos tudo isso para coletar informações de hardware e sistema operacional para a VM executando Keep Random Beacon e enviar os logs do Docker de Beacon Random para Loki usando o driver de log Loki.
Crie uma conta Grafana Cloud Starter
As instruções neste artigo usam uma instância hospedada do Grafana. Você pode criar uma instância gratuita do Grafana Cloud Starter seguindo este link.
Depois de criar a conta Grafana e fazer o login, você verá uma tela semelhante à seguinte.
Você pode clicar no botão Login mostrado na captura de tela acima para se conectar à instância Grafana hospedada.
Configurar Prometheus, cAdvisor e Node Exporter
A configuração do Prometheus, cAdvisor e do Node Exporter é feita na máquina em que você deseja configurar o sistema e o monitoramento do Docker. Neste exemplo, vamos executá-los na VM com Keep Random Beacon Client.
Docker. Neste exemplo, vamos executá-los na VM com Keep Random Beacon Client.
Pré-requisitos de instalação
• Instale o curl (se ainda não estiver instalado) executando os seguintes comandos no CLI
sudo apt update
sudo apt install curl
Instale docker-compose
(se já não estiver instalado)
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- Altere
docker-compose
para modo executável
sudo chmod +x /usr/local/bin/docker-compose
Crie Docker Compose para Prometheus, cAdvisor e Node Exporter
Os serviços Prometheus, cAdvisor e Node Exporter serão executados em containers Docker usando docker-compose. Esta seção fornece instruções para criar a estrutura de diretório e docker-compose.yml para configurar e executar esses contêineres.
- Altere o diretório para home
cd ~
- Crie um diretório chamado prometheus
mkdir prometheus
- Mude o diretório para prometheus
cd prometheus
Crie um novo diretório chamado prometheus-data
mkdir prometheus-data
- Copie e cole o seguinte na CLI. Ele criará docker-compose.yml no diretório atual. Como alternativa, você também pode obter esse arquivo no GitHub. Valide os recuos em docker-compose.yml no GitHub se estiver criando localmente.
cat <<EOF >>docker-compose.yml
prometheus:
image: prom/prometheus:latest
container_name: monitoring_prometheus
restart: unless-stopped
volumes:
- ~/prometheus:/etc/prometheus/
- ~/prometheus/prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
expose:
- 9090
ports:
- 9090:9090
links:
- cadvisor:cadvisor
- node-exporter:node-exporternode-exporter:
image: prom/node-exporter:latest
container_name: monitoring_node_exporter
restart: unless-stopped
expose:
- 9100cadvisor:
image: google/cadvisor:latest
container_name: monitoring_cadvisor
restart: unless-stopped
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
expose:
- 8080
EOF
Crie arquivo de configuração do Prometheus
Certifique-se de estar no diretório prometheus e execute o seguinte comando na CLI. Isso criará prometheus.yml no diretório atual.
Como alternativa, você também pode obter esse arquivo no GitHub. Valide os recuos em prometheus.yml no GitHub se estiver criando localmente.
cat <<EOF >>prometheus.yml
# my global config
global:
scrape_interval: 120s # By default, scrape targets every 15 seconds.
evaluation_interval: 120s # By default, scrape targets every 15 seconds.
# scrape_timeout is set to the global default (10s).# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'my-project'# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
# - "alert.rules"
# - "first.rules"
# - "second.rules"# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 120s# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090','cadvisor:8080','node-exporter:9100']
# Alert manager config
#alerting:
# alertmanagers:
# - static_configs:
# - targets: ["localhost:9093"]EOF
Execute Prometheus, cAdvisor e Node Exporter
Agora que docker-compose.yml e prometheus.yml foram criados, você pode iniciar os contêineres Prometheus, cAdvisor e Node Exporter.
Certifique-se de estar no diretório prometheus e execute o seguinte comando da CLI
sudo docker-compose up -d
Esse comando puxará as imagens necessárias e iniciará os contêineres. Depois que a inicialização for concluída, você deverá ver os seguintes contêineres se executar sudo docker ps -aon CLI.
Configure e execute o Loki
Esta seção fornece etapas para configurar o Loki docker-compose e a configuração local, além da instalação do driver do Loki Docker.
Configure docker-compose e config para Loki
Siga as etapas nesta seção para configurar e executar o Loki (docker container e driver de registro Loki).
• Mude o diretório para ~
cd ~
• Crie um novo diretório “loki”
mkdir loki
- Mude o diretório para loki
cd loki
- Crie docker-compose.yml para loki. Como alternativa, você também pode obter esse arquivo no GitHub. Valide os recuos em docker-compose.yml no GitHub se estiver criando localmente.
cat <<EOF >>docker-compose.yml
version: "2"
services:
loki:
container_name: loki
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ~/loki:/etc/loki
# logger driver - change this driver to ship all container logs to a different location
EOF
- Crie local-config.yaml para loki. Como alternativa, você também pode obter esse arquivo no GitHub. Valide as indentações em local-compose.yaml no GitHub se estiver criando localmente.
cat <<EOF >>local-config.yaml
auth_enabled: falseserver:
http_listen_port: 3100
log_level: erroringester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30sschema_config:
configs:
- from: 2018-04-15
store: boltdb
object_store: filesystem
schema: v9
index:
prefix: index_
period: 168hstorage_config:
boltdb:
directory: /tmp/loki/index filesystem:
directory: /tmp/loki/chunkslimits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168hchunk_store_config:
max_look_back_period: 0table_manager:
chunk_tables_provisioning:
inactive_read_throughput: 0
inactive_write_throughput: 0
provisioned_read_throughput: 0
provisioned_write_throughput: 0
index_tables_provisioning:
inactive_read_throughput: 0
inactive_write_throughput: 0
provisioned_read_throughput: 0
provisioned_write_throughput: 0
retention_deletes_enabled: false
retention_period: 0
EOF
Instale o driver Loki Docker
O driver do docker Loki é usado pelo contêiner do Docker para enviar os logs para o Loki. Siga as etapas abaixo para instalar o driver Loki Logger.
- Execute o seguinte comando na CLI. Ele instalará o driver do logger.
sudo docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
- Você pode verificar a instalação do driver executando o seguinte comando
sudo docker plugin ls
Deve mostrar uma saída semelhante à seguinte
ID NAME DESCRIPTION ENABLED
412df8a79e8e loki:latest Loki Logging Driver true
Assim que o driver estiver instalado, crie o daemon.json para docker para usar o driver Loki. O arquivo está localizado em / etc / docker / no Linux. Siga as etapas abaixo para criar o arquivo daemon.json. Não se esqueça de substituir o valor de loki-url no comando abaixo pelos detalhes de seu próprio servidor loki.
cd /etc/dockercat <<EOF >>daemon.json
{
"debug" : true,
"log-driver": "loki",
"log-opts": {
"loki-url": "http://<IP|hostname of the server running Loki>:3100/loki/api/v1/push"
}
}
EOF
Se este arquivo já existir, edite-o para adicionar o JSON no comando fornecido acima.
Execute Loki
Certifique-se de estar no diretório ~ / loki e execute o seguinte comando para iniciar o loki.
sudo docker-compose up -d
Isso iniciará o contêiner loki. Se você executar sudo docker ps -a, deverá ver o contêiner loki em execução e escutando na porta 3100.
Usando o Loki Logger para o cliente Keep Random Beacon
Para que o Keep Random Beacon envie seus registros do Docker para o Loki, ele deve ser reiniciado com um parâmetro para usar o driver de registro do Loki. Se você já estiver executando o Keep Random Beacon, pare e remova-o usando os seguintes comandos:
sudo docker stop keep-client
sudo docker rm keep-client
Assim que o contêiner for interrompido, use os seguintes comandos para iniciar o keep-client com o driver de log Loki.
port KEEP_CLIENT_PERSISTENCE_DIR=~/<keep-client dir>/persistenceexport KEEP_CLIENT_CONFIG_DIR=~/<keep-client dir>/configexport KEEP_CLIENT_KEYSTORE=~/<keep-client dir>/keystoreexport KEEP_CLIENT_ETHEREUM_PASSWORD=<eth wallet password>sudo docker run -dit \--restart always \--log-driver loki \--log-opt loki-url="http://<IP|hostname of the server running Loki>:3100/loki/api/v1/push" \--volume $HOME/keep-client:/mnt \--env KEEP_ETHEREUM_PASSWORD=$KEEP_CLIENT_ETHEREUM_PASSWORD \--env LOG_LEVEL=debug \--name keep-client \-p 3919:3919 \keepnetwork/keep-client:v1.2.0 --config /mnt/config/config.toml start
Assim que o contêiner keep-client for iniciado com sucesso, ele começará a enviar logs para o Loki usando o driver Loki. Você ainda pode verificar os registros do contêiner usando
sudo docker logs -f keep client
.
Lista de permissões de IP para instâncias hospedadas do Grafana
Estamos usando uma instância hospedada do Grafana em vez de uma local neste tutorial. Você precisará colocar os IPs na lista de permissões para ambientes Grafana hospedados em servidores onde está executando o Prometheus e o Loki. Isso é necessário para permitir o acesso
às fontes de dados Loki e Prometheus dos servidores Grafana.
Os IPs para whitelisting estão disponíveis em https://grafana.com/api/hosted-grafana/source-ips.txt. Permita que esses IPs se conectem apenas nas portas onde o Loki e o Prometheus estão escutando as solicitações HTTP (3100 e 9090 se você estiver seguindo as instruções neste artigo). O método de lista de permissões pode variar com base em onde seu servidor está hospedado e como sua rede está configurada.
Tenha muito cuidado e verifique se você está recebendo os IPs da lista de permissões de um site válido da Grafana. Você não gostaria de colocar na lista de permissões IPs NÃO CONFIÁVEIS ou MALICIOSOS em seus servidores!