Ответ
Процесс включает три основных этапа: инструментацию приложения, сбор метрик сервером Prometheus и их визуализацию в Grafana.
1. Инструментация приложения (Exposing Metrics)
Приложение должно предоставлять метрики по HTTP-эндпоинту (обычно /metrics) в формате, понятном Prometheus. Для этого используются клиентские библиотеки.
Пример на Python с prometheus_client:
from prometheus_client import start_http_server, Counter
import time
import random
# Создаем метрику типа Counter
REQUESTS = Counter('http_requests_total', 'Total HTTP requests processed', ['method', 'endpoint'])
def process_request(method, endpoint):
# Инкрементируем счетчик с указанными лейблами
REQUESTS.labels(method=method, endpoint=endpoint).inc()
if __name__ == '__main__':
# Запускаем HTTP-сервер для отдачи метрик на порту 8000
start_http_server(8000)
print("Prometheus metrics available on http://localhost:8000")
# Эмуляция работы приложения
while True:
process_request('GET', '/api/users')
time.sleep(random.uniform(0.5, 1.5))
process_request('POST', '/api/users')
time.sleep(random.uniform(1, 2))
2. Сбор метрик (Prometheus)
Prometheus настраивается на периодический опрос (scrape) эндпоинта /metrics вашего приложения. Собранные данные сохраняются во внутреннюю time-series базу данных.
3. Визуализация и оповещения (Grafana)
- Grafana подключается к Prometheus как к источнику данных (Data Source).
- В Grafana создаются дашборды с графиками и панелями, которые запрашивают данные у Prometheus с помощью языка запросов PromQL (например,
rate(http_requests_total[5m])). - Настраиваются правила оповещений (Alerting), которые при срабатывании (например, резкий рост ошибок) отправляют уведомления через Alertmanager в Slack, PagerDuty и т.д.
Ответ 18+ 🔞
Ну вот, сидишь ты такой, пишешь свой код, и тут бац — тебе говорят: «А давай-ка мы за тобой будем следить, как ты работаешь». И ты такой: «Окей, блядь, следите». А следить-то надо по-умному, не просто в лоб пялиться, а метрики собирать. И вот тут начинается эта трёхактная пьеса под названием «Запросы, графики и пиздец».
Акт первый: Приложение стучит в дверь и говорит «Заберите мои цифры»
Твоё приложение должно вывесить на всеобщее обозрение табличку с цифрами, как бабка на рынке — ценник на картошку. Делается это через специальную дырку в заборе, обычно по адресу /metrics. Туда любой желающий (ну, то есть Prometheus) может заглянуть и всё посчитать.
Смотри, как это на Питоне с prometheus_client выглядит, прям как в жизни:
from prometheus_client import start_http_server, Counter
import time
import random
# Заводим счётчик. Это как одометр в машине, только для запросов.
REQUESTS = Counter('http_requests_total', 'Total HTTP requests processed', ['method', 'endpoint'])
def process_request(method, endpoint):
# Щёлк — и счётчик подрос. Метод и эндпоинт — это как бирки на ухе у коровы.
REQUESTS.labels(method=method, endpoint=endpoint).inc()
if __name__ == '__main__':
# Поднимаем сервачок на 8000 порту, который будет эти метрики отдавать.
start_http_server(8000)
print("Prometheus metrics available on http://localhost:8000")
# А тут мы просто прикидываемся, что работаем.
while True:
process_request('GET', '/api/users')
time.sleep(random.uniform(0.5, 1.5))
process_request('POST', '/api/users')
time.sleep(random.uniform(1, 2))
Вот и всё, приложение теперь не просто так болтается, а ещё и стучит каблучками: «Смотрите, сколько я уже сделал!»
Акт второй: Приходит Прометеус и всё записывает в свою толстую тетрадь
Prometheus — это такой дотошный бухгалтер, который раз в N секунд ходит по всем этим /metrics и аккуратно переписывает оттуда все циферки. Настраивается это в конфиге, где ты ему говоришь: «Вот, дружок, ходи по этому адресу и срисовывай». А он ходит и срисовывает, складывая всё в свою собственную, ёбта, базу данных временных рядов. Удобно, всё под рукой.
Акт третий: Графана надевает очки и начинает рисовать красивые картинки
Ну а дальше в игру вступает Grafana. Это как раз тот художник, который берёт скучные цифры из тетради Prometheus и рисует из них такие графики, что дух захватывает. Подключаешь её к Прометеусу как к источнику данных, и понеслась.
- Дашборды: Налепишь там кучу красивых панелек, которые запрашивают данные с помощью PromQL. Типа
rate(http_requests_total[5m])— «покажи-ка, дружок, с какой скоростью у нас запросы летели последние пять минут». - Оповещения (Alerting): А это самая вкусная часть, блядь. Настраиваешь правила: «Если ошибок больше десяти в минуту — значит, кто-то накосячил». И когда такое случается, Alertmanager (приятель Прометеуса) начинает орать на все лады — слать сообщения в Slack, звонить в PagerDuty, в общем, поднимать всех на уши, пока ты не прибежишь и не починишь эту, блядь, хитрожопую систему.
Вот и вся магия. Сначала приложение говорит «Вот мои цифры», потом бухгалтер их записывает, а потом художник рисует по ним картину, на которой видно, где у тебя всё летит в пизду, а где работает как швейцарские часы. Красота, ёпта!