Назад | Перейти на главную страницу

Фильтрация результатов интерфейса от prometheus snmp-exporter по имени интерфейса

Я собираю статистику интерфейса с некоторых коммутаторов, используя следующую конфигурацию:

modules:
  if_mib:
    walk:
      - ifTable
    auth:
      community: monitor

Данные, возвращаемые экспортером, индексируются ifIndex. То есть запрос на ifInOctets{instance="192.168.1.1"} приводит к:

ifInOctets{ifIndex="1",instance="192.168.1.1",job="snmp_if"}    129355
ifInOctets{ifIndex="2",instance="192.168.1.1",job="snmp_if"}    359870890
ifInOctets{ifIndex="3",instance="192.168.1.1",job="snmp_if"}    0
ifInOctets{ifIndex="4",instance="192.168.1.1",job="snmp_if"}    212586200

И т.д. Мне нужны имена интерфейсов для отображения, которые я могу получить с помощью следующего запроса:

ifInOctets{instance="192.168.1.1"} * ignoring(ifDescr) group_left(ifDescr) ifDescr

Что возвращает:

{ifDescr="lo",ifIndex="1",instance="192.168.1.1",job="snmp_if"} 129355
{ifDescr="itf0",ifIndex="2",instance="192.168.1.1",job="snmp_if"}   359870890
{ifDescr="imq0",ifIndex="3",instance="192.168.1.1",job="snmp_if"}   0
{ifDescr="eth0",ifIndex="4",instance="192.168.1.1",job="snmp_if"}   2125862004

Как отфильтровать результаты по значению ifDescr атрибут?

Я попробовал следующее, ожидая неудачи, и действительно не был удивлен:

ifInOctets{instance="192.168.1.1", ifDescr="eth0"} * ignoring(ifDescr) group_left(ifDescr) ifDescr

Я понял это, но вместо того, чтобы удалять вопрос, я подумал, что кому-то это может пригодиться. Ответ:

ifInOctets{instance="192.168.1.1"} * ignoring(ifDescr) group_left(ifDescr) ifDescr{ifDescr="eth0"}

я нашел Эта статья помогает понять синтаксис запроса. В частности, это подчеркнуло, что приведенное выше выражение:

<series1> * <series2>

... что сделало более очевидным, что стандартные селекторы могут быть применены ко второй серии.