-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Api/metrics мониторинг отсутствие peers в upstream #81
Comments
Если включен динамический резолвинг, то список серверов обновляется согласно ответу DNS сервера. Если ответ пустой, то все сервера удаляются из |
У вас получается, что объект |
@VBart, а можете добавить метрику для случая, когда в upstream нет серверов, чтобы эту ситуацию было видно не только в Console Light, но и в Prometheus метриках? Полагаю достаточно сделать так, чтобы в случае отсутствия серверов API возвращало не пустой объект, а что-то, что можно матчить. Было бы очень удобно получать алерт от Promrtheus, когда такое происходит - у нас это довольно частая ситуация, так как речь идёт о так называемой Keepalive Proxy, которая позволяет приложению не умеющему самостоятельно работать с keepalive соединениями (приложение на PHP), всё таки с ними работать. Сейчас у нас Keepalive Proxy реализована на базе Nginx и bash скрипта, который присылает алерт в Slack если DNS имя перестало резолвиться, убирает из конфига неработающий |
Да, надо придумать как это лучше всего сделать. Пока могу предложить такое обходное решение: upstream one {
#...
zone one 1m;
}
map $peers_len $is_peers_empty {
4 1;
default 0;
}
prometheus_template test {
angie_peers_empty $is_peers_empty type=gauge;
}
server {
listen 8000;
location / {
auth_request /api_peers/;
auth_request_set $peers_len $sent_http_content_length;
prometheus test;
}
location =/api_peers/ {
internal;
api /status/http/upstreams/one/peers/;
}
} Для одного |
Поясню, как это работает. |
Интересный механизм, но к сожалению Будет очень хорошо если доработаете API, чтобы оно возвращало не пустой объект. |
Подумаем, что с этим можно сделать. Не хотелось бы добавлять дополнительное значение на каждый объект или список в API, иначе это кратно увеличит число таких сопоставлений для генерации метрик. А делать какое-то исключение отдельно для Но вообще, ситуацию, когда не удалось порезолвить - лучше отслеживать по error_log - там будет Понятно, что это сложнее и требует дополнительных инструментов. |
Если добавлять в API дополнительное значение сложно, может быть можно сделать так, чтобы в |
А так устроит, если значение будет только для пустого объекта? Ведь когда он будет непустым - метрики не будет в ответе прометеусу. |
Думаю да, вполне устроит. |
Есть ли новости по этому вопросу? |
Функциональность находится в списке идей на реализацию. Как только освободится место в дорожной карте и если не будет более приоритетных задач, то добавим. |
Здравствуйте.
Есть один недостаток который мешает корректно мониторить состояние upstream с помощью prometheus, а именно, если перестало резолвиться DNS имя сервера указанного в upstream, то все метрики
angie_http_upstreams_peers_*
пропадают из выдачи, при этом в Console Light для такого upstream выводиться сообщениеNo servers with 'all' state found in this upstream group.
В шаблоне prometheus_all присутствует метрика
angie_http_upstreams_peers_state
:Но она тоже пропадает, что странно ведь в
map
указано значение по умолчанию.Я попробовал сделать такой шаблон, чтобы отслеживать эту ситуацию:
Но ничего не вышло...
Может регулярка в директиве
path
должна как-то иначе выглядеть? Или требуется доработка модуля http_prometheus?Помогите пожалуйста решить проблему с мониторингом наличия серверов в upstream.
The text was updated successfully, but these errors were encountered: