Я собираю статистику интерфейса с некоторых коммутаторов, используя следующую конфигурацию:
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>
... что сделало более очевидным, что стандартные селекторы могут быть применены ко второй серии.