На проекте принимаем порядка 450 тыс коннектов в секунду. Это короткие соединения но их много. Встала задача расчитать и реагировать на время ответа системы, если оно больше 180 мс. Параметр Ta который помог бы в этом, доступен только в логах Haproxy, только в http-mode. Метрики, что снимаю Prometheus через haproxy-exporter не дают мне такой детализации.
Логи... Логи haproxy генерит примерно 10-20 ГБ в минуту. У меня их 10 штук в кластере.
Я не нашел ничего лучшего как сделать связку на каждой машине с FluentD + Haproxy.
В haproxy.cfg:
global
log localhost:5140 local0 info
Идея в том, что бы логи гнать в fluentd через localhost, парсить сразу, создавать гистограммные бакеты и ждать пока прометей придет забрать метрики Ta а далее уже использовать прометеевскую встроенную функцию вычислять перцентиль и через графану показывать а через alertmanager реагировать на значение выше порогового.
td-agent.conf такой:
@type syslog
tag haproxy
port 5140
bind 127.0.0.1
format /(?[^ ]+) haproxy\[(?.+)\]: (?[\w\.]+):(?\d+) \[(?.+)\] (?[\w\-]+) (?[\w-]+)\/(?[^ ]+) (?[^\/]+)\/(?[^\/]+)\/(?[^\/]+)\/(?[^\/]+)\/(?[^\/]+)\/(?[^\/]+)\/(?[^\/]+) (?\d+) (?\d+) (?\d+)\/(?\d+)\/(?\d+)\/(?\d+)\/(?\d+) (?\d+)\/(?\d+) "(?[^ "]+) (?[^\?]+)(\?.*)? (?[^"]*)" (?[^"]*)/
time_format %H:%M:%S
# Tag our log types.
@type rewrite_tag_filter
key frontend
pattern .
tag haproxy.http
@type prometheus
bind 0.0.0.0
port 9104
metrics_path /metrics
Комментариев нет:
Отправить комментарий