LINUX.ORG.RU
решено ФорумAdmin

prometheus + snmp_exporter

 ,


0

1

Добрый день. Пытаюсь собрать связку prometheus + snmp_exporter + graphana. Но реально ничего не понимаю в конфиге для snmp_exporter и конфиге генератора конфигов(LOL). Кто нибудь может сказать где есть (если ли она есть) нормальная документация описывающая значения каждого параметра и различные варианты использования? На гитхабе пример конфига с комментариями, который лично для меня ничего не объясняет.

Вообще вопрос в следующем - есть железка на которой надо мониторить уровень оптического сигнала, портов 2. Oid’ы для этой фигни сделаны не как обычно(1-оид,а от него для каждого порта своя ветка) а по «умному»:

  • 1.3.6.1.4.1.32108.1.9.2.2.0 - 1 порт
  • 1.3.6.1.4.1.32108.1.9.2.3.0 - 2 порт

Я хочу чтобы была одна метрика, просто с разными лэйблами, и вот не знаю как это сделать даже в snmp.yml, не говоря уже про генератор.

Вот тебе пример для мониторинга сигнала onu на bdcom p3310c:

modules:
  bdcom_onu_signal:
     walk:
       - 1.3.6.1.4.1.3320.101.10.5.1.5
     auth:
       community: public
     lookups:
       - source_indexes: [opIfIndex]
         lookup: ifDescr

В твоём случае должно быть так:

modules:
  bdcom_onu_signal:
     walk:
       - 1.3.6.1.4.1.32108.1.9.2.2
       - 1.3.6.1.4.1.32108.1.9.2.3
     auth:
       community: public

Так же не забудь импортнуть нужные тебе mib файлы для данного oid’a. Делается это так:

export MIBDIRS="custom:mibs:mibs/brocade:mibs/dlink:mibs/apc:mibs/bdcom"

Ну и всё это делается в папке с собранным генератором.

ZeroNight ()
Последнее исправление: ZeroNight (всего исправлений: 1)
Ответ на: комментарий от ZeroNight

А можешь кинуть в меня мибом для твоей железки, чтобы я не искал? Просто интересно как у тебя миб записан. У тебя в таком же тупом формате порты идут? И еще если не сильно сложно можешь кинуть snmp.yml? Хочу посмотреть как там записано…

kovalev_94 ()
Ответ на: комментарий от kovalev_94

В каком таком «тупом формате» ?

Обычная запись:

1.3.6.1.4.1.3320.101.10.5.1.port_ifIndex

Вот готовый конфиг для снятия ddm на свиче dlink с 26-го порта:

generator.yml:

modules:
  switch_ddm:
     walk:
       - 1.3.6.1.4.1.171.12.72.2.1.1.1.5.26 # tx
       - 1.3.6.1.4.1.171.12.72.2.1.1.1.6.26 # rx
     auth:
       community: public

На выходе snmp.yml

# WARNING: This file was auto-generated using snmp_exporter generator, manual changes will be lost.

switch_ddm:
  get:
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.5.26
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.6.26
  metrics:
  - name: swDdmTxPower
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.5
    type: DisplayString
    help: This object indicates the real time value of the tx power - 1.3.6.1.4.1.171.12.72.2.1.1.1.5
    indexes:
    - labelname: swDdmPort
      type: gauge
  - name: swDdmRxPower
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.6
    type: DisplayString
    help: This object indicates the real time value of the rx power - 1.3.6.1.4.1.171.12.72.2.1.1.1.6
    indexes:
    - labelname: swDdmPort
      type: gauge
  auth:
    community: public

Миб для свича можешь найти вот тут http://ftp.dlink.ru/pub/Switch/DES-3200-28_C1/SNMP/ Качаешь архив DES-3200_MIB_20150731.zip и в папке private будет ddm.mib

ZeroNight ()
Последнее исправление: ZeroNight (всего исправлений: 1)
Ответ на: комментарий от ZeroNight

В каком таком «тупом формате» ?

Ну смотри, разберем на твоем примере.(Кстати спасибо за инфу про ddm, у меня как раз кучу таких свитчей) swDdmTxPower соответствует oid - 1.3.6.1.4.1.171.12.72.2.1.1.1.5 Все что идет после 5ки индекс порта. Большинство мибов так и устроены. В моем случае идет отдельные оиды для каждого порта:

  • 1.3.6.1.4.1.32108.1.9.2.2.0 - 1 порт
  • 1.3.6.1.4.1.32108.1.9.2.3.0 - 2 порт

И в этом и проблема, индексов указывающих на порт - нет. В этом и вопрос, как мне сделать одну метрику и указать для разных портов разные лэйблы.

kovalev_94 ()
Последнее исправление: kovalev_94 (всего исправлений: 1)
Ответ на: комментарий от kovalev_94
1.3.6.1.4.1.32108.1.9.2.2.0 - 1 порт
                        ^
1.3.6.1.4.1.32108.1.9.2.3.0 - 2 порт
                        ^

Вот тебе индексы указывающие на порт. Просто нумерация может идти не от 1 или 0. У меня есть свич, на котором ifIndex начинается с 69. А вопрос о лейблах и одной метрике я не понял. Тебе snmp-exporter будет отдавать в таком вот формате:

# HELP ifOutErrors The number of outbound packets that could not be transmitted because of errors. - 1.3.6.1.2.1.2.2.1.20
# TYPE ifOutErrors counter
ifOutErrors{ifAlias="swc1-myru-43.km:26",ifIndex="2",ifName="ethernet2"} 0
ifOutErrors{ifAlias="to swc1-duna.km",ifIndex="4",ifName="ethernet4"} 783
ifOutErrors{ifAlias="to swc1-myru-71.km",ifIndex="3",ifName="ethernet3"} 2274
ifOutErrors{ifAlias="to swc1-pod-93.km",ifIndex="5",ifName="ethernet5"} 0
ifOutErrors{ifAlias="to swc1-vld-66.km",ifIndex="8",ifName="ethernet8"} 1.295033e+07
# HELP snAgentCpuUtil100thPercent The statistical CPU utilization in units of one-hundredth of a percent. - 1.3.6.1.4.1.1991.1.1.2.11.1.1.6
# TYPE snAgentCpuUtil100thPercent gauge
snAgentCpuUtil100thPercent{snAgentCpuUtilCpuId="1",snAgentCpuUtilInterval="60",snAgentCpuUtilSlotNum="1"} 1300
# HELP snmp_scrape_duration_seconds Total SNMP time scrape took (walk and processing).
# TYPE snmp_scrape_duration_seconds gauge
snmp_scrape_duration_seconds 0.035164471
# HELP snmp_scrape_pdus_returned PDUs returned from walk.
# TYPE snmp_scrape_pdus_returned gauge
snmp_scrape_pdus_returned 241
# HELP snmp_scrape_walk_duration_seconds Time SNMP walk/bulkwalk took.
# TYPE snmp_scrape_walk_duration_seconds gauge
snmp_scrape_walk_duration_seconds 0.031992059
ZeroNight ()
Последнее исправление: ZeroNight (всего исправлений: 1)
Ответ на: комментарий от ZeroNight

Вот тебе индексы указывающие на порт.

Прошу прощения, надо было сразу миб показать:


ontStatus OBJECT-TYPE
	SYNTAX  StatusType
	MAX-ACCESS read-only
	STATUS current
	DESCRIPTION
		"Common status of te device"
	::= { variables 1 }

ontPin1  OBJECT-TYPE
    SYNTAX  Integer32 (-400..130)
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "Pin1, input optical power 1, 10*dBm"
    ::= { variables 2 }
    -- .1.3.6.1.4.1.35702.3.2.2.2.0 --

ontPin2  OBJECT-TYPE
    SYNTAX  Integer32 (-400..130)
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "Pin2, input optical power 2, 10*dBm"
    ::= { variables 3 }
    -- .1.3.6.1.4.1.35702.3.2.2.3.0 --

ontActivePin  OBJECT-TYPE
    SYNTAX  INTEGER {
			pin1(0),
            pin2(1)
			}
    MAX-ACCESS  read-only
    STATUS  current
    DESCRIPTION
            "Active input: 0-Pin1, 1-Pin2."
    ::= { variables 4 }

ontPoutRF  OBJECT-TYPE
    SYNTAX  Integer32 (-400..300)
    MAX-ACCESS	read-only
    STATUS  current
    DESCRIPTION
            "PoutRF, output group RF signal power, 10*dBm"
    ::= { variables 5 }
    -- .1.3.6.1.4.1.35702.3.2.2.5.0 --
Это не индексы портов, да и порты у меня 1 и 2, и лэйбл нужен соответствующий. Я не смогу пройтись по всей второй ветке.


А вопрос о лейблах и одной метрике я не понял.

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

OpticalSignalPower{PortNumber="1"} -999
OpticalSignalPower{PortNumber="2"} -35

kovalev_94 ()
Ответ на: комментарий от ZeroNight

Раз пошел такой разговор, а у тебя нормально снимаются метрики с ддм? Просто вот например мой конфиг snmp.yml:


dlink_general_ddm:
  walk:
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.2
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.3
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.4
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.5
  - 1.3.6.1.4.1.171.12.72.2.1.1.1.6

  metrics:
  - name: swDdmTemperature
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.2
    type: DisplayString
    help: This object indicates the real time value of the temperature - 1.3.6.1.4.1.171.12.72.2.1.1.1.2
    indexes:
    - labelname: swDdmPort
      type: gauge

  - name: swDdmVoltage
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.3
    type: DisplayString
    help: This object indicates the real time value of the supply voltage - 1.3.6.1.4.1.171.12.72.2.1.1.1.3
    indexes:
    - labelname: swDdmPort
      type: gauge
  - name: swDdmBiasCurrent
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.4
    type: DisplayString
    help: This object indicates the real time value of the tx bias. - 1.3.6.1.4.1.171.12.72.2.1.1.1.4
    indexes:
    - labelname: swDdmPort
      type: gauge

  - name: swDdmTxPower
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.5
    type: DisplayString
    help: This object indicates the real time value of the tx power - 1.3.6.1.4.1.171.12.72.2.1.1.1.5
    indexes:
    - labelname: swDdmPort
      type: gauge
      
  - name: swDdmRxPower
    oid: 1.3.6.1.4.1.171.12.72.2.1.1.1.6
    type: DisplayString
    help: This object indicates the real time value of the rx power - 1.3.6.1.4.1.171.12.72.2.1.1.1.6
    indexes:
    - labelname: swDdmPort
      type: gauge
  auth:
    community: public
dlink_general_dram_utilization:
  walk:
  - 1.3.6.1.4.1.171.12.1.1.9.1.4
  metrics:
  - name: agentDRAMutilization
    oid: 1.3.6.1.4.1.171.12.1.1.9.1.4
    type: gauge
    help: The percentage of used DRAM memory of the total DRAM memory available -
      1.3.6.1.4.1.171.12.1.1.9.1.4
    indexes:
    - labelname: agentDRAMutilizationUnitID
      type: gauge
  auth:
    community: public
Впринципе тоже что у тебя, только побольше. Но вот снимает он мне как то криво:
# HELP swDdmRxPower This object indicates the real time value of the rx power - 1.3.6.1.4.1.171.12.72.2.1.1.1.6
# TYPE swDdmRxPower gauge
swDdmRxPower{swDdmPort="1",swDdmRxPower="1"} 1
swDdmRxPower{swDdmPort="10",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="11",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="12",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="13",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="14",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="15",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="16",swDdmRxPower="0.0713"} 1
swDdmRxPower{swDdmPort="17",swDdmRxPower="1.8696"} 1
swDdmRxPower{swDdmPort="18",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="19",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="2",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="20",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="21",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="22",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="23",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="24",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="25",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="26",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="27",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="3",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="4",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="5",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="6",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="7",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="8",swDdmRxPower="  -"} 1
swDdmRxPower{swDdmPort="9",swDdmRxPower="  -"} 1
# HELP swDdmTemperature This object indicates the real time value of the temperature - 1.3.6.1.4.1.171.12.72.2.1.1.1.2
# TYPE swDdmTemperature gauge
swDdmTemperature{swDdmPort="1",swDdmTemperature="62.625"} 1
swDdmTemperature{swDdmPort="10",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="11",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="12",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="13",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="14",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="15",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="16",swDdmTemperature="56.4258"} 1
swDdmTemperature{swDdmPort="17",swDdmTemperature="56.7188"} 1
swDdmTemperature{swDdmPort="18",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="19",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="2",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="20",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="21",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="22",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="23",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="24",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="25",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="26",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="27",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="3",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="4",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="5",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="6",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="7",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="8",swDdmTemperature="  -"} 1
swDdmTemperature{swDdmPort="9",swDdmTemperature="  -"} 1
# HELP swDdmTxPower This object indicates the real time value of the tx power - 1.3.6.1.4.1.171.12.72.2.1.1.1.5
Ну и в подтверждении вот еще результат snmpwalk:
[kovalev@gavein mibs]$ snmpwalk -v 2c -c public 192.168.1.31 1.3.6.1.4.1.171.12.72.2.1.1.1.5
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.1 = STRING: "0"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.2 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.3 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.4 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.5 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.6 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.7 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.8 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.9 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.10 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.11 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.12 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.13 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.14 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.15 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.16 = STRING: "0.2792"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.17 = STRING: "0"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.18 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.19 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.20 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.21 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.22 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.23 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.24 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.25 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.26 = STRING: "  -"
SNMPv2-SMI::enterprises.171.12.72.2.1.1.1.5.27 = STRING: "  -"

Не сталкивался с подобным?

kovalev_94 ()
Ответ на: комментарий от kovalev_94

У меня точно такой же вывод на свиче extreme metworks по cpu. Что б поправить нужно override сделать, как то так:

     walk:
     ...
     overrides:
      swDdmRxPower:
       regex_extracts:
          Float:
            - regex: '(.*)'
              value: '$1'
ZeroNight ()
Ответ на: комментарий от kovalev_94

Не понял зачем записывать всё в одну метрику. В генератор залей себе нужные оиду нужных портов, добавь к ним какой нить ifAlias и спокойно отрисуй это все в графане. И на выходе получиться вот такое: https://i.imgur.com/61lED2q.png

ZeroNight ()
Ответ на: комментарий от ZeroNight

Ну а зачем мне для каждой порта своя метрика? На свичах у тебя же тоже одна метрика, но разные лэйблы. На крайний случай так и сделаю, но все же надеюсь найду вариант. За помощь спасибо!!!

kovalev_94 ()

Вообщем спустя два месяца решил. Суть такова:

  • делаем на каждый порт свою метрику(FiberRxPower1,FiberRxPower2).
  • В прометее переименуем метрики и создаем лэйбл с помощью регекса

Вот пример snmp.yml:

planar_tuz19_2003:
  get:
  - 1.3.6.1.4.1.32108.1.9.2.2.0
  - 1.3.6.1.4.1.32108.1.9.2.3.0
  - 1.3.6.1.4.1.32108.1.9.2.4.0
  - 1.3.6.1.4.1.32108.1.9.2.5.0

  metrics:
  - name: FiberRxPower1
    oid: 1.3.6.1.4.1.32108.1.9.2.2.0
    type: gauge
    help: Optical signal level for both ports.

  - name: FiberRxPower2
    oid: 1.3.6.1.4.1.32108.1.9.2.3.0
    type: gauge
    help: Optical signal level for both ports.

  - name: RfSignalLevel
    oid: 1.3.6.1.4.1.32108.1.9.2.4.0
    type: gauge
    help: Output RF Signal.

  - name: Temperature
    oid: 1.3.6.1.4.1.32108.1.9.2.5.0
    type: gauge
    help: Internal device temperature.

  version: 1

Вот кусок из prometheus.yml:

  - job_name: planar_tuz19_2003
    metrics_path: /snmp
    params:
      module: [planar_tuz19_2003] 
    file_sd_configs:
        - files :
          - /etc/prometheus/devices/optical_receivers/planar_tuz19_2003.yml
          refresh_interval: 2m
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.168.168:9116  # The SNMP exporter's real hostname:port.
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: '(FiberRxPower)([1-2])'
        replacement: $2
        target_label: PortIndex
      - source_labels: [__name__]
        regex: '(FiberRxPower)([1-2])'
        target_label: __name__
kovalev_94 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.