Как фильтровать по двум меткам в prometheus?

avatar
scriptboy
8 августа 2021 в 15:56
680
2
2

У нас есть показатель error_count с двумя метками:

  1. клиент
  2. код_ошибки

Поскольку мы знаем, что у клиента будет (скажем, код_ошибки 404), которого нельзя избежать, поэтому мы хотим исключить его из нашей информационной панели.

Что-то вроде:

error_count{client!="foo_client" and error_code!="404"}

Но

error_count{client!="foo_client", error_code!="404"}

не будет работать, поскольку будут исключены все ошибки из foo_client и все 404 ошибки.

И что еще хуже, я контролирую только PromQL Grafana, возможно, сбор конфигурации Prometheus может решить эту проблему, но у меня нет разрешения на настройку, поскольку ими управляют другие команды.

Источник

Ответы (2)

avatar
grdryn
8 августа 2021 в 16:17
2

Если я правильно понимаю, вам нужна метрика error_count для всех клиентов. Если это foo_client, он нужен только в том случае, если это не код ошибки 404.

В Prometheus это можно сделать одним из способов: получить все записи, отличные от foo_client, ИЛИ записи, которые являются foo_client и не имеют <3693462669>66394>:<3664>

error_count{client!="foo_client"} or error_count{client="foo_client", error_code!="404"}

avatar
Knoblauch
8 августа 2021 в 16:12
1

Вы можете использовать or, который является оператором объединения в promQL.

error_count{client!="foo_client"}
or
error_count{error_code!="404"}
scriptboy
9 августа 2021 в 01:53
0

спасибо, это может решить. Но в будущем нам может понадобиться добавить больше, скажем, client=bar and error_code=403 также следует игнорировать. Есть ли простой и удобный способ сделать это? Благодарю.