В тази статия ще научим как да добавим 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
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.
Изходният код е тук.
Ресурси
- Инструментирането на HTTP сървъра е написано в Go
- „Документация на Прометей.“
- „Документация на Графана.“
Първоначално публикувано на адрес https://carlosmv.hashnode.dev.
На обикновен английски
Благодарим ви, че сте част от нашата общност! Преди да тръгнете:
- Не пропускайте да ръкопляскате и следвайте писателя! 👏
- Можете да намерите още повече съдържание в PlainEnglish.io 🚀
- Регистрирайте се за нашия безплатен седмичен бюлетин. 🗞️
- Следвайте ни в Twitter, LinkedIn, YouTube и Раздори.