#spring-boot #docker #openshift #prometheus
#весенняя загрузка #docker #openshift #prometheus
Вопрос:
У меня есть несколько образов docker (pod) одного и того же приложения Spring-Boot в среде с балансировкой нагрузки (OpenShift), и каждый образ docker предоставляет конечную точку Prometheus. Я использовал следующий запрос в Prometheus для получения запросов в секунду от одного образа docker:
rate(http_server_requests_seconds_count [1m])
Проблема в том, что запрос не возвращает правильный ответ, когда Prometheus собирает данные из нескольких модулей (фактически, каждый раз, когда Prometheus вызывает конечную точку приложения, один модуль будет целевым из-за балансировщика нагрузки).
Есть ли способ получить количество запросов в секунду во всех модулях, используя Prometheus?
Заранее спасибо.
Комментарии:
1. Вы нашли какое-либо решение?
2. Я нашел решение внутри OpenShift. Вы можете определить скребок для каждого модуля. Но, к сожалению, я не могу вспомнить точный путь к решению, поскольку я не работаю над этим проектом годичной давности.
Ответ №1:
Мне кажется, что вы указали Prometheus на свой loadbalancer, а не на каждый из ваших экземпляров в отдельности. Это даст вам совершенно непригодные для использования показатели, поскольку они будут случайным образом собираться из того или иного вашего экземпляра, и в этих показателях не будет ничего, что указывало бы вам, из какого экземпляра он поступает.
Что вам нужно сделать, так это указать Prometheus на каждый экземпляр вашего приложения. Затем Prometheus будет собирать показатели отдельно от каждого из них, применяя instance
метку с IP-адресом или DNS-именем экземпляра, из которого он был собран. Т.е. у вас будет N отдельных http_server_requests_seconds_count
показателей:
http_server_requests_seconds_count{job="myapp",instance="1.2.3.4:8080"} 1234
http_server_requests_seconds_count{job="myapp",instance="5.6.7.8:8080"} 5678
...
Если вы затем запросите Prometheus rate(http_server_requests_seconds_count[1m])
, вы получите вектор с отдельными значениями для каждого экземпляра:
{job="myapp",instance="1.2.3.4:8080"} 1.234
{job="myapp",instance="5.6.7.8:8080"} 5.678
...
Если вам нужна общая частота запросов на задание в разных экземплярах, вы можете запросить вместо sum by(job) (rate(http_server_requests_seconds_count[1m]))
.
Комментарии:
1. Спасибо, Алин. IP каждого экземпляра может меняться при каждом перезапуске, и у нас не может быть стабильного запроса (например, для использования в Grafana).
instance
Метка была заполнена адресом службы (например, example.com ), а не адрес экземпляра.2. Prometheus поддерживает автоматическое обнаружение модулей и многое другое в среде kubernetes. Вот хорошая статья, в которой вы можете найти более подробное объяснение: medium.com/kubernetes-tutorials /…