Objetivo
Apresentar uma sugestão de stack para monitoramento / observabilidade, utilizando Prometheus e Grafana (instalação padrão Linux e em contâiners)
Requisitos Mínimos de HW
- 2 vCPU 2GHz
- 8G Mem
- 120G Disco
- Linux (rpm ou deb based) instalado na versão mínima
Executando a instalação do Prometheus
Instalando o Prometheus Server (https://github.com/prometheus/prometheus)
O Primeiro passo é o download da aplicação:
# wget https://github.com/prometheus/prometheus/releases/download/v2.1.0/prometheus-2.1.0.linux-amd64.tar.gz
Extraindo os arquivos:
# tar -xf prometheus-2.1.0.linux-amd64.tar.gz
Movendo os binários para /usr/local/bin:
# mv prometheus-2.1.0.linux-amd64/prometheus prometheus-2.1.0.linux-amd64/promtool /usr/local/bin
Criando os diretórios de configuração e de dados do Prometheus:
# mkdir /etc/prometheus /var/lib/prometheus
Movendo os arquivos de configuração para o diretório criado no passo anterior:
# mv prometheus-2.1.0.linux-amd64/consoles prometheus-2.1.0.linux-amd64/console_libraries /etc/prometheus
Removendo os arquivos que não serão mais utilizados:
# rm -r prometheus-2.1.0.linux-amd64*
Configurando o Prometheus
Depois de instalar o Prometheus, temos que configurá-lo para informá-lo sobre os endpoints HTTP que deve monitorar. O Prometheus usa o formato YAML para sua configuração.
Utilizaremos o arquivo /etc/prometheus/prometheus.yml como nosso arquivo de configuração:
global: scrape_interval: 10s scrape_configs: - job_name: 'prometheus_metrics' scrape_interval: 5s static_configs: - targets: ['localhost:9090']
Neste arquivo, definimos um intervalo de extração padrão de 10 segundos.
Também definimos uma fonte de métricas, denominada prometheus_metrics. Definimos o intervalo de raspagem para 5 segundos, substituindo o padrão. Em seguida, especificamos os locais onde essas métricas estarão disponíveis. O Prometheus usa a porta 9090 para fornecer suas métricas.
Por fim, também alteraremos a propriedade dos arquivos que o Prometheus utilizará:
# useradd -rs /bin/false prometheus # chown -R prometheus: /etc/prometheus /var/lib/prometheus
Agora vamos criar um arquivo unit para o systemd, que ficará em
/etc/systemd/system/prometheus.service, com o seguinte conteúdo:
[Unit] Description=Prometheus After=network.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target
Vamos recarregar o systemd:
sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus
O Prometheus fornece uma UI da web para executar consultas básicas localizadas em http://<prometheus_server_address>:9090/.
É assim que fica em um navegador da web:
Exemplo de Arquitetura do Prometheus, com seus coletores de métricas (exporters),
uso de service discovery, alertas e visualização de dados (Grafana)