Для начала я укажу на ряд проблем с вашим подходом.
Во-первых, документация Prometheus рекомендует не использовать произвольно большие наборы значений для меток (как ваши имена пользователей).Как вы можете видеть (основываясь на вашем опыте с тайм-аутом запроса), они не совсем неправильно советуют против него.
Во-вторых, Прометей, возможно, не является подходящим инструментом для аналитики (например, активных пользователей).Отчасти из-за вышеизложенного, отчасти потому, что он по своей сути ограничен тем фактом, что он производит выборку метрик (что, по-видимому, не является проблемой в вашем случае, но может оказаться).
В-третьих, высобирать отдельные показатели для каждой команды (например, help_command
, foo_command
) вместо одной метрики с именем команды в качестве метки (например, command_usage{commmand="help"}
, command_usage{commmand="foo"}
)
Чтобы вернуться к вашему вопросу,вам не нужен max_over_time
, вы можете просто написать свой запрос следующим образом:
count by(__name__)(
(
{__name__=~".+_command",job=“Application Name”}
-
{__name__=~".+_command",job=“Application name”} offset 1w
) > 0
)
Это работает только потому, что вы говорите, что независимо от того, что экспортирует число, оно никогда не сбрасывает их.Если это просто потому, что этот экспортер никогда не перезапускается, и когда это будет, счетчик упадет до нуля, тогда вам нужно будет использовать increase
вместо минус, и вы столкнетесь с точно такими же проблемами с производительностью, что и с max_over_time
.
count by(__name__)(
increase({__name__=~".+_command",job=“Application Name”}[1w]) > 0
)