feat: Add request logging and traffic metrics for API performance monitoring
This commit is contained in:
13
README.md
13
README.md
@@ -51,6 +51,19 @@ Vite работает на http://127.0.0.1:5173 и проксирует `/api`
|
||||
|
||||
**Проверка каталога по ETag.** Сервер сам проверяет каталог университета раз в 5 минут, а не только когда приходит запрос. У каждой папки Nextcloud есть ETag, и он меняется, когда меняется что‑то внутри. Сервер хранит листинги прошлого обхода (`.data/catalog-tree.json`) и заново запрашивает только папки с новым ETag. Проверка неизменного каталога — 2 запроса вместо ~100: корень и папка года. Перезалитый документ стоит ещё пары запросов по пути к нему. Раз в 6 часов на всякий случай идёт полный обход. Индекс пересобирается, только если изменился какой‑то документ, поэтому ETag расписаний и кэши клиентов между проверками не сбрасываются. В `/api/health` поле `catalog.lastCrawl` показывает последний обход: число запросов, полный ли он, сколько папок взято из кэша. Поле `watch` показывает время и ошибку последней проверки.
|
||||
|
||||
**Журнал запросов и метрики.** На каждый запрос к `/api` в журнал (`docker logs`) пишется одна строка JSON: время, метод, путь с параметрами, статус, время ответа в мс, код ошибки, размер ответа и адрес клиента без последней части (`203.0.113.0`, у IPv6 — /48). Точные адреса не сохраняются. Проверки здоровья (`/api/health`, `/api/ready`) не пишутся и не считаются. Журнал выключается переменной `PSU_REQUEST_LOG=off`.
|
||||
|
||||
Поле `traffic` в `/api/health` — сводка за последний час (`lastHour`) и с запуска (`total`):
|
||||
- сколько было запросов и какая доля ушла пустым `304`;
|
||||
- ошибки клиента и сервера;
|
||||
- срабатывания лимита (`limited`) и таймаута (`timeouts`);
|
||||
- ответы `502`/`504` из‑за университета (`sourceErrors`) и упавшие запросы к нему (`sourceFailures`);
|
||||
- медленные ответы, дольше секунды;
|
||||
- медиана и 95‑й процентиль времени ответа — как граница корзины: 25, 50, 100, 250… мс;
|
||||
- десять самых частых адресов API со средним временем.
|
||||
|
||||
За последний час есть ещё число разных клиентов и три самых активных. Так видно, если кто‑то перебирает API.
|
||||
|
||||
**Оповещения в Telegram.** Если заданы `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID`, сервер пишет владельцу после проверок каталога:
|
||||
- появился новый документ — с его группами и подозрительными ячейками;
|
||||
- документ не читается;
|
||||
|
||||
Reference in New Issue
Block a user