Я использую ограничение скорости со своим haproxy18 и хочу как-то выжать из него метрики на основе IP-адресов, кто близок к лимиту или как пользователи достигают лимита.
Это моя конфигурация, связанная с ограничением скорости:
...
тип палки-таблицы размер IP-адреса 1 м срок действия 10 с хранить http_req_rate (10 с)
tcp-запрос проверка-задержка 10 с
tcp-запрос содержимого track-sc0 src
http-запрос отклонить deny_status 429, если { sc_http_req_rate (0) gt 5000 }
...
На данный момент то, что я могу сделать, это очень глупое решение, и мне не нравится, что в цикле while я прослушиваю сокет и могу перенаправить вывод в файл:
во время сна 0,5; делать
printf 'показать таблицу https\nпоказать таблицу http\n' |nc -U /var/lib/haproxy/stats готово
Это вывод времени, меня интересует ip и последнее число в строке:
0x561fd2fe50b0: ключ = 10.118.171.119 использование = 6 exp = 8726 http_req_rate (10000) = 9
0x561fd31b0270: ключ = 10.118.172.20 использование = 6 exp = 9104 http_req_rate (10000) = 10
0x561fd31d0ac0: ключ = 10.118.172.192 использование = 34 exp = 9999 http_req_rate (10000) = 1736
Я хотел бы знать, есть ли какое-либо другое более элегантное решение, или как я могу преобразовать это в запись журнала?
Я думал поставить команду даты таким образом, но я должен добавить все строки в таблицу, поэтому мне нужно перенаправить этот вывод в файл и отредактировать, а затем позволить сборщику метрик подобрать, я предполагаю, что есть какое-то более красивое решение.
while sleep 0.5;do date;printf 'показать таблицу https\nsпоказать таблицу http\n' |nc -U /var/lib/haproxy/stats;готово
Спасибо