Как удалить больше не действительные Датчики

Я использую Java-клиент Prometheus для экспорта информации о сеансе моего приложения. Мы хотим показать, как долго сеансы простаивали.

Проблема в том, что у нас максимум 1000 сессий и сессии удаляются через определенный период. К сожалению, они не исчезают из Прометея:

Текущие и просроченные сеансы

Мой код выглядит так:

static final Gauge sessionInactivity = Gauge.build()
    .name("sessions_inactivity_duration")
    .labelNames("internal_key", "external_key", "browser")
    .help("Number of milliseconds a certain session has been inactive")
    .register();

sessionInactivity.labels(internalKey, externalKey, browser).set(inactivityTime);

Я пытался сделать sessionInactivity.clear() во время очистки, но, очевидно, это не очищает содержимое шкалы.


person Marged    schedule 18.07.2017    source источник


Ответы (2)


Такая обработка запросов не подходит для такой метрической системы, как Prometheus. Это будет считаться профилированием, для которого нужно что-то более индивидуальное.

Также рекомендуется экспортировать временную метку для такого рода вещей, а не то, как давно это было. Это устойчиво к обновлению времени, которое больше не обновляется, и вы можете выполнить вычитание из time() на конце Prometheus.

person brian-brazil    schedule 18.07.2017
comment
Понял, а разве нет концепции убрать Gauge? У меня есть другой сценарий, в котором мне нужно собрать статистику для браузеров, которую я буду выражать с помощью метки. Я бы предпочел не устанавливать их просто на ноль. - person Marged; 18.07.2017
comment
Способ есть, но он реально только для объединения. Это также вариант использования, для которого Prometheus не подходит, для регистрации событий вам нужно что-то вроде стека ELK. - person brian-brazil; 19.07.2017
comment
Я все еще пытаюсь понять, подходит ли мой другой сценарий для Прометея или нет. Я ясно понял часть метки времени, я изменю это. Можете ли вы указать некоторые (более) конкретные причины, по которым мой подход к сеансам не подходит для Prometheus? Это из-за огромного количества возможных internal_key, которые исчисляются тысячами, хотя одновременно не может быть более 1000 сеансов? Я могу создать еще один вопрос для моего второго сценария, если вы предпочитаете это, просто дайте мне знак - person Marged; 19.07.2017
comment
Количество сеансов — это одна из причин, но также и то, что они представляют. Метрики Prometheus, которые вы можете извлечь из этого, включают общее количество сеансов, самый старый сеанс или средний сеанс назад. - person brian-brazil; 19.07.2017
comment
Я добавил еще один вопрос, который описывает мой сценарий. Я думаю, что это отличается от того, что мы уже обсуждали. Я хотел бы услышать ваше мнение, потому что я еще не понимаю, где я достиг критической массы для Prometheus -> stackoverflow.com/questions/45199443/ - person Marged; 19.07.2017
comment
Как есть способ, но я не говорю принятый ответ? - person Ilia Choly; 08.02.2021

Класс Gauge имеет метод remove, который имеет ту же сигнатуру, что и метод labels. Для вашего конкретного примера удаление метрик, связанных с этим датчиком, будет выглядеть так:

sessionInactivity.remove(internalKey, externalKey, browser);

В документации клиентской библиотеки указано:

Метрики с метками ДОЛЖНЫ поддерживать метод remove() с той же сигнатурой, что и labels(), который удалит дочерний элемент из метрики, не экспортируя его, и метод clear(), который удалит все дочерние элементы из метрики. Они делают недействительным кэширование Children.

person Ilia Choly    schedule 08.02.2021