В тази статия ще научим как да добавим Prometheus към FastAPI сървър. Тази статия ще покаже проста демонстрация и примерни кодове за това как да създадете брояч на заявки, за да преброите броя на заявките, направени към даден маршрут. И брояч на заявки за всички заявки.

Изисквания

  • Python е инсталиран
  • Pip е инсталиран

Прометей

Prometheus е инструментариум за системи за наблюдение и предупреждение с отворен код, първоначално създаден в SoundCloud. От създаването си през 2012 г. много компании и организации са приели Prometheus и проектът има много активна общност от разработчици и потребители.

Инсталиране на Prometheus

За да инсталирате Prometheus, можете да използвате Docker Image или да изтеглите предварително компилиран двоичен файл. Ще използваме предварително компилиран двоичен файл, за да го изтеглим, трябва да отидем на този сайт.

Сървърът prometheus ще стартира на порт 9090. Така че отиваме на localhost:9090, за да видим потребителския му интерфейс.

Създаване на FastAPI сървър

Сега ще изградим сървъра FastAPI. Трябва да инсталираме FastAPI, Uvicorn и клиента Prometheus.

pip install fastapi uvicorn prometheus-client

main.py

from fastapi import FastAPI

from prometheus_client import make_asgi_app

app = FastAPI()


metrics_app = make_asgi_app()
app.mount("/metrics", metrics_app)

@app.get("/")
def index():
    return "Hello, world!"

В този файл импортираме make_asgi_app от prometheus_client, за да създадем приложение за измерване на Prometheus. Предаваме този регистър на make_asgi_app(), за да създадем приложението за показатели. Ние монтираме това приложение за показатели в маршрута /metrics, използвайки app.mount("/metrics", metrics_app).

Стартираме сървъра и навигираме до localhost:8000/metrics. Трябва да видим следния отговор в нашия уеб браузър.

Създаване на брояч

from fastapi import FastAPI, Request
from prometheus_client import make_asgi_app, Counter

app = FastAPI()

index_counter = Counter('index_counter', 'Description of counter')

metrics_app = make_asgi_app()
app.mount("/metrics", metrics_app)

@app.get("/")
def index():
    index_counter.inc()

    return "Hello, world!"

След това създаваме брояч. За всяка заявка към маршрута “/” броячът ще се увеличава с 1.

Стартираме сървъра. И отидете до localhost:8000/ и след това до localhost:8000/metrics, трябва да видим следния отговор.

Сега можем да създадем междинен софтуер, който да брои всяка заявка, направена към сървъра.

from fastapi import FastAPI, Request
from prometheus_client import make_asgi_app, Counter

app = FastAPI()

all_requests = Counter('all_requests', 'A counter of the all requests made')

...

@app.middleware("tracing")
def tracing(request: Request, call_next):
    all_requests.inc()
    response = call_next(request)
    return response

Тук създаваме FastAPI междинен софтуер и създаваме брояч за отчитане на всички заявки. Създаваме функцията за проследяване и добавяме функцията all_request.inc(), която ще се увеличава с 1 за всяка заявка, направена към сървъра.

prometheus.yml

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 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"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: fastapi-server
    static_configs:
      - targets: ["localhost:8000"]

prometheus.yml е конфигурационният файл за сървъра Prometheus. Добавяме още едно име на работа, за да изчерпим показателите на нашия Gin сървър и да го дефинираме като fastapi-server. Трябва да посочим порта, където износителят слуша, в нашия случай 8000. Сега можем да отидем на localhost:9090 и да изпълним заявка, за да проверим дали Prometheus събира някаква метрика.

Пишем all_requests_total, за да видим колко заявки са направени към сървъра, и щракваме върху изпълнение.

Заключение

Prometheus е мощна система за наблюдение с отворен код, която може лесно да се интегрира с приложения FastAPI. В тази статия видяхме как да настроим мониторинг на Prometheus за приложение FastAPI. Инсталирахме клиентската библиотека на Prometheus и разкрихме крайните точки на показателите. След това конфигурирахме Prometheus да изтрива тези крайни точки и започнахме да визуализираме показателите в потребителския интерфейс на Prometheus.

В тази статия създаваме брояч на заявки. Но това не е всичко, което можем да направим с Prometheus. Можем да наблюдаваме времето за реакция и да поискаме забавяне. Можем да настроим сигнали въз основа на тези показатели, за да ни уведомите за всякакви проблеми. Prometheus ни дава видимост за производителността и здравето на нашето приложение, тази функция ни помага да отстраняваме грешки и да оптимизираме производителността на нашите приложения.

Благодарим ви, че отделихте време да прочетете тази статия.

Ако имате някакви препоръки относно други пакети, архитектури, как да подобря моя код, моя английски или нещо друго; моля, оставете коментар или се свържете с мен чрез Twitter или LinkedIn.

Изходният код е тук.

Ресурси

Първоначално публикувано на адрес https://carlosmv.hashnode.dev.

На обикновен английски

Благодарим ви, че сте част от нашата общност! Преди да тръгнете: