DEV Community

Lucas Gabriel
Lucas Gabriel

Posted on

3 3

Monitorar servidor Python Flask com Prometheus e Grafana

Olá Dev, como vocês estão?

Bom, neste post irei mostrar a vocês como monitorar um app Python Flask.
Afinal saber exatamente como nossa aplicação está funcionando é essencial!

Olha que coisa linda:
Dashboard Exemplo

Vamos lá. Iremos utilizar o Prometheus Flask Exporter e pra isso, dentro da nossa virtualenv iremos instalar ele usando:

pip install prometheus-flask-exporter
Enter fullscreen mode Exit fullscreen mode

Em poucas linhas já podemos iniciar nosso monitoramento.

from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/')
def index():
    return 'Olá mundo!'

if __name__ == '__main__':
    app.run() 
Enter fullscreen mode Exit fullscreen mode

O Prometheus utiliza do endereço '/metrics' para expor as métricas para o uso.
Pode da uma olhada na sua aplicação 'localhost:5000/metrics'

Ta, tudo bem, chegamos até aqui, mas e agora? como vou fazer esse dashboard?

Vamos precisar do Prometheus e do Grafana, para isso já deixei separado um Docker Compose com tudo que precisamos

Dockerfile da nossa aplicação:

FROM python:3-alpine

ADD requirements.txt /requirements.txt

RUN pip install -r /requirements.txt

ADD app.py /app.py

ENV FLASK_APP /app.py

CMD flask run --host=0.0.0.0
Enter fullscreen mode Exit fullscreen mode

Docker Compose:

version: '2'
services:

  # a sample app with metrics enabled
  app:
    image: python3-alpine
    build:
      context: app
    ports:
      - 5000:5000

  prometheus:
    image: prom/prometheus:v2.33.0
    volumes:
      - ./prometheus/config.yml:/etc/prometheus/prometheus.yml
    ports:
      - 9090:9090

  grafana:
    image: grafana/grafana:8.3.4
    ports:
      - 3000:3000
Enter fullscreen mode Exit fullscreen mode

Tudo rodando, coisa linda.
Vamos verificar!

Acessando a seguinte rota: http://localhost:9090/targets#pool-app veremos se o Prometheus já está buscando nossas métricas.

prometheus app metrics

Up!

Vamos olhar agora nosso Grafana e configurar algumas coisas.
Ao abrir a primeira vez localhost:3000 vamos nos deparar com uma tela de login, o usuário e senha padrão do Grafana é admin e admin, após logar já vai pedir para que você mude a senha.

Certo, agora vamos adicionar o Data Source do Prometheus no Grafana
Para isso acesse o seguinte caminho http://localhost:3000/datasources e clique em 'Add data source' em seguida selecione o Prometheus(Provavelmente irá ser o primeiro da lista)

prometheus config

Vamos precisar somente alterar o caminho da url para http://prometheus:9090

Após isso é só ir até o final da pagina e clicar em Save & Test

Agora finalmente iremos criar nosso Dashboard, mas relaxa dev, é bem simples, já temos um template prontinho para isso chamado Flask transaction

Para importar esse template no Grafana basta seguir esta url http://localhost:3000/dashboard/import e no campo onde pede URL or ID colocamos o ID 9688, clicamos em Load e depois em Import e Voilà!

Você já pode ver seu dashboard lindo, monitorando tudo da sua aplicação. =D

Aqui está o repositório com todos os arquivos pronto deste post

Não deixe de da uma olhadinha na documentação do Prometheus Flask Exporter para se aprofundar mais.

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Immerse yourself in a wealth of knowledge with this piece, supported by the inclusive DEV Community—every developer, no matter where they are in their journey, is invited to contribute to our collective wisdom.

A simple “thank you” goes a long way—express your gratitude below in the comments!

Gathering insights enriches our journey on DEV and fortifies our community ties. Did you find this article valuable? Taking a moment to thank the author can have a significant impact.

Okay