У нас есть проект облачной платформы Google с API, развернутым в кластерах Kubernetes. API - это приложение с весенней загрузкой Java, использующее Java-клиент Prometheus для сбора метрик об API.
Затем мы используем stackdriver для отображения панели мониторинга производительности API. Проблема в том, что мы достигли предела стекового драйвера в 500 пользовательских метрик. Как показывают наши журналы GCP для кластера:
component=remote msg="Unrecoverable error sending samples to remote storage" err="rpc error: code = ResourceExhausted desc = Your metric descriptor quota has been exhausted."
Похоже, что клиент Prometheus собирает метрики для конечных точек, включая любые параметры в URL. Вот пара примеров:
# TYPE gauge_response_member_password_reset_b85f877ad38784686173f330045fd994d8b4c09a_37ef2f93_9ea4_4e28_b1cf_e6204ffce2fa gauge
gauge_response_member_password_reset_b85f877ad38784686173f330045fd994d8b4c09a_37ef2f93_9ea4_4e28_b1cf_e6204ffce2fa 1.0
# TYPE gauge_response_member_password_reset_passwordResetToken_clientId gauge
gauge_response_member_password_reset_passwordResetToken_clientId 290.0y
Итак, он создает журнал для конечной точки выше, который включает в себя данные, предоставленные в параметрах get url, это дополнение к метрике для той же конечной точки, которая имеет только имена параметров.
Как настроить Spring так, чтобы он не собирал метрики для конечных точек, которые включают данные параметров? По этой причине мы достигли предела драйвера стека.
Мы используем плагины simpleclient от Prometheus и в настоящее время просто используем готовые настройки:
compile group: 'io.prometheus', name: 'simpleclient', version: '0.5.0'
compile group: 'io.prometheus', name: 'simpleclient_spring_boot', version: '0.5.0'