Construindo sua stack de Monitoramento - Parte 2

DEVOPS Abr 27, 2020

Neste segundo post da série construindo sua stack de monitoramento abordaremos a ferramenta Prometheus que será uma das 5 ferramentas que  serão utilizadas para a construção da nossa stack de monitoramento. Se você ainda não leu a primeira parte desta jornada, clique aqui.

Ferramentas abordadas:

- Netdata
- Prometheus
- AlertManager
- Node Exporter
- Grafana

O Prometheus


O Prometheus é um software totalmente de código aberto, escrito em Go e licenciado sob apache 2 License. Seu código esta disponível no GitHub.

O projeto teve inicio em 2012 e foi criado pelo time da SoundCloud, porém em 2016  o projeto foi doado para a inciativa Cloud Native Computing Foundation e foi o segundo projeto hospedado logo após o Kubernetes. Sua principal função é o monitoramento e alertas de eventos. Ele grava métricas em tempo real em um banco de dados de séries temporais permitindo alta dimensionalidade usando um modelo de recepção HTTP, com consultas flexíveis e alertas em tempo real.

Diferente de outros softwares de monitoramento o Prometheus não possui um software cliente, ele possui um exporter que geralmente é escrito em Go, exemplos de exporters (Apache, MySQL, e OracleDB). Existem várias bibliotecas que ajudam na exportação de métricas de determinados serviços ou sistemas operacionais, e também existem exporters de terceiros. Isso é útil nos casos em que não é possível instrumentar um determinado sistema com métricas do Prometheus diretamente. Consulte a lista de exporters disponíveis atualmente.

Características

Os principais recursos do Prometheus são:

  • Um modelo de dados multidimensional com dados de séries temporais, identificados pelo nome da métrica e pares de chave / valor.
  • PromQL, uma linguagem de consulta flexível para alavancar essa dimensionalidade.
  • Nenhuma dependência no armazenamento distribuído; nós de servidores únicos são autônomos.
  • A coleta de séries temporais ocorre por meio de um modelo pull de requisição HTTP.
  • Push HTTP de séries temporais é suportado através de um gateway intermediário.
  • Os destinos são descobertos via service discovery ou configuração estática.
  • Vários modos de suporte a gráficos e painéis.

Funcionamento e Arquitetura

O diagrama abaixo representa a arquitetura do Prometheus que consiste em vários componentes, sendo que grande parte deles são opcionais.  

O Prometheus coleta as métricas no modelo instrumentado, diretamente ou por meio de um gateway intermediário para serviços de curta duração como um contêiner. Ele armazena todas as coletas localmente e executa regras sobre esses dados para agregar e registrar novas séries temporais dos dados existentes ou gerar alertas.

As séries temporais são construídas por meio de um modelo pull: o servidor Prometheus consulta uma lista de fontes de dados conhecida como exporters em uma frequência de pesquisa específica em seu arquivo de configuração. Cada uma das fontes de dados exibe os valores atuais das métricas para essa fonte de dados no terminal consultado pelo Prometheus.

O armazenamento dos dados no Prometheus funciona da seguinte forma, ele possui um banco de dados local de séries temporais em disco conhecido como TSDB (Time Series Data Base), e também se integra com sistemas de armazenamento remoto.

Componentes

Os componentes do Prometheus incluem o Prometheus server (que lida com descoberta de serviço, recuperação de métricas de aplicativos monitorados, armazenamento dessas métricas e análise de dados de séries temporais usando a linguagem de consulta PromQL), um modelo de dados de métricas, um simples recurso interno GUI gráfica e suporte nativo ao Grafana, que veremos no ultimo post desta serie. Alguns componentes opcionais incluem um gerenciador de alertas que também veremos no próximo post (no qual os alertas podem ser definidos no idioma da consulta) e um gateway de envio útil para monitorar aplicativos de vida curta.

Instalação

Existem várias métodos para instalar o Prometheus, neste artigo iremos abordar dois deles.

Pré-requisito
- A porta 9090 tem que estar liberada em seu firewall.

Instalação a partir de uma imagem do Docker

As imagens do Docker estão disponíveis no Docker Hub  do projeto.

Você pode iniciar um contêiner Prometheus com o seguinte comando.

$ docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus

Após instalar basta acessar na web.

O Prometheus estará acessível em: http://127.0.0.1: 9090/

Instalação Manual

Pré-requisito
- wget e o curl

Para realizarmos a instalação manual devemos seguir os seguintes passos.

Criando os 2 diretórios

# mkdir /etc/prometheus

# mkdir /var/lib/prometheus

Criando Usuários

# useradd --no-create-home --shell /bin/false prometheus

# useradd --no-create-home --shell /bin/false node_exporter

Baixando e extraindo o Prometheus

# curl -LO https://github.com/prometheus/prometheus/releases/download/v2.17.2/prometheus-2.17.2.linux-amd64.tar.gz

# tar -xvzf prometheus-2.17.2.linux-amd64.tar.gz

# cd prometheus-2.17.2.linux-amd64


Movendo os arquivos do Prometheus

# cp prometheus-2.17.2.linux-amd64/prometheus /usr/local/bin/

# cp prometheus-2.17.2.linux-amd64/promtool /usr/local/bin/

# cp -r prometheus-2.17.2.linux-amd64/consoles /etc/prometheus

# cp -r prometheus-2.17.2.linux-amd64/console_libraries /etc/prometheus

Mudando permissão os arquivos para o usuário Prometheus

# chown prometheus:prometheus /usr/local/bin/prometheus

# chown prometheus:prometheus /usr/local/bin/promtool

# chown -R prometheus:prometheus /etc/prometheus

# chown -R prometheus:prometheus /var/lib/prometheus

Iniciando os serviços

# systemctl daemon-reload

# systemctl start prometheus

# systemctl status prometheus

Após instalar basta acessar na web.

O Prometheus estará acessível em: http://127.0.0.1: 9090/

System Overview

Para saber mais sobre as soluções que a O2B vem aplicando em seus projetos e como engajar no mundo do DevOps, entre em contato conosco pelo nosso site.

Referências

Gustavo Henrique Esser

Site Reliability Engineering at O2B specialist in network.