Ad Widget

Collapse

LLD SNMP. Вопрос по SNMPINDEX из разных таблиц

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Diesel315
    Senior Member
    • Jan 2020
    • 169

    #1

    LLD SNMP. Вопрос по SNMPINDEX из разных таблиц

    Добрый день!
    Вопрос по SNMPINDEX из разных таблиц. Требуется консультация в понимании логики работы

    Zabbix Server 7.4.12
    Debian 12


    Суть:
    Есть базовый шаблон мониторинга SAN коммутаторов *Brocade FC by SNMP*. К сожалению он не совсем верный логически, так как "да" вроде бы автором и закладывалась логика обнаружения только значимых портов через фильтрацию:
    - {$NET.IF.IFADMINSTATUS.NOT_MATCHES} :: ^2$ :: Ignore down(2) administrative status

    И оно вроде как даже работает, но только для относительно новых версий моделей. Потому что только в новых моделях (новая версия FOS Brocade), если нет SFP Transceiver, то порт автоматически переходит в - down(2) administrative status
    На старых версиях так не работает, по умолчанию все порты в up administrative status, если они лицензированы.
    В итоге картина примерно такая:
    Code:
    {"{#SNMPINDEX}":"1073741824","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"1","{#IFNAME}":"FC port 0/0","{#IFDESCR}":"FC port 0/0","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741825","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"1","{#IFNAME}":"FC port 0/1","{#IFDESCR}":"FC port 0/1","{#IFTYPE}":"56"},
    ...
    {"{#SNMPINDEX}":"1073741835","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"1","{#IFNAME}":"FC port 0/11","{#IFDESCR}":"FC port 0/11","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741836","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"2","{#IFNAME}":"FC port 0/12","{#IFDESCR}":"FC port 0/12","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741837","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"2","{#IFNAME}":"FC port 0/13","{#IFDESCR}":"FC port 0/13","{#IFTYPE}":"56"},
    ...
    {"{#SNMPINDEX}":"1073741846","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"2","{#IFNAME}":"FC port 0/22","{#IFDESCR}":"FC port 0/22","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741847","{#IFOPERSTATUS}":"2" ,"{#IFADMINSTATUS}":"2","{#IFNAME}":"FC port 0/23","{#IFDESCR}":"FC port 0/23","{#IFTYPE}":"56"}]
    Все первые 12 порт (лицензированные) в статусе UP ("{#IFADMINSTATUS}":"1"), соответственно LLD их находит и добавляет в мониторинг.

    Изучал разные MIB базы и нашел, что в базе SW-MIB есть нужная таблица swFCPortTable c параметром swFCPortPhyState (INTEGER { noCard ( 1 ) , noTransceiver ( 2 ) , laserFault ( 3 ) , noLight ( 4 ) , noSync ( 5 ) , inSync ( 6 ) , portFault ( 7 ) , diagFault ( 8 ) , lockRef ( 9 ) , validating ( 10 ) , invalidModule ( 11 ) , noSigDet ( 14 ) , unknown ( 255 ) } ) по которому как раз можно было бы отфильтровать. Только вот беда...

    В этой таблице SNMPINDEX имеет значения - 1/2/3 и т.д.
    А в нужной нам (.ifXEntry), из которой мы потом строим элементы данных SNMPINDEX имеет значения - 1073741824/1073741825/1073741826 и т.д.
    И получается итоговый JSON имеет две разные таблицы сопоставления:
    Code:
    {"{#SNMPINDEX}":"1073741824","{#IFOPERSTATUS}":"2","{#IFNAME}":"FC port 0/0","{#IFDESCR}":"FC port 0/0","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741825","{#IFOPERSTATUS}":"2","{#IFNAME}":"FC port 0/1","{#IFDESCR}":"FC port 0/1","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741826","{#IFOPERSTATUS}":"2","{#IFNAME}":"FC port 0/2","{#IFDESCR}":"FC port 0/2","{#IFTYPE}":"56"},
    {"{#SNMPINDEX}":"1073741827","{#IFOPERSTATUS}":"2","{#IFNAME}":"FC port 0/3","{#IFDESCR}":"FC port 0/3","{#IFTYPE}":"56"}
    
    
    {"{#SNMPINDEX}":"1","{#IFPORTPHYSTATE}":"4"},
    {"{#SNMPINDEX}":"2","{#IFPORTPHYSTATE}":"2"},
    {"{#SNMPINDEX}":"3","{#IFPORTPHYSTATE}":"2"},
    {"{#SNMPINDEX}":"4","{#IFPORTPHYSTATE}":"2"}
    Вопрос:
    Я правильно понимаю, что их скрестить/подружить/сопоставить друг с другом нельзя?
    То есть используя фильтрацию
    {#IFPORTPHYSTATE} из одной таблицы (swFCPortTable), потом правильно формировать элементы данных, которые основываются на параметрах из другой таблицы (ifXEntry) при различных значениях - {#SNMPINDEX}
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3455

    #2
    Да, напрямую две таких таблицы не "скрестить". Если есть понимание того, как они соотносятся друг с другом, или же есть какая-то ещё таблица, где есть такое сопоставление, то можно решить задачу при помощи JavaScript'а (см. пример в этой теме).

    А просто явно за-disable-ить неиспользуемые порты нельзя? Или добавить в правило LLD фильтр (хотя, скорее всего, он там уже есть), в соответствии с которым обнаруживать только нужные порты по их имени?

    Comment

    • Diesel315
      Senior Member
      • Jan 2020
      • 169

      #3
      Спасибо.
      Посмотрю ту тему. Просто хотел сперва понять правильно ли я понимаю логику, а то может чего-то не знал...

      А просто явно за-disable-ить неиспользуемые порты нельзя?
      При наличии много железок так себе занятие) Фильтрация более правильный подход в части уменьшения трудозатрат.

      Comment

      • Diesel315
        Senior Member
        • Jan 2020
        • 169

        #4
        Просто для истории, мало ли будет кому полезно.

        Посмотрел внимательно базовую таблицу ifXEntry.
        Нашел там параметр - ifConnectorPresent ("This object has the value 'true(1)' if the interface sublayer has a physical connector and the value 'false(2)' otherwise." )

        В моем случае этого достаточно. Воткнут SFP добавится ЭД, нет SFP, то отфильтруется...

        Comment

        • Wadim_Sch
          Member
          • Feb 2022
          • 90

          #5
          Я как раз недавно делал шаблон (вернее подшаблон) для интерфейсов коммутаторов SAN.
          Вы же в LLD ищете #IFOPERSTATUS и #IFADMINSTATUS. Почему бы в фильте LLD не сделать проверку:
          (#IFOPERSTATUS = 1) and (#IFADMINSTATUS=1)
          То есть у вас создадуться Item-ы только для портов которые в данный момент работают, то есть у которых IFADMINSTATUS = UP и IFOPERSTATUS=UP.

          У меня реализовано так:

          discovery[{#IFNAME},1.3.6.1.2.1.2.2.1.2,{#IFALIAS},1.3.6.1.2 .1.31.1.1.1.18,{#IFOPERSTATUS},1.3.6.1.2.1.2.2.1.8 ,{#IFADMINSTATUS},1.3.6.1.2.1.2.2.1.7,{#IFHIGHSPEE D},1.3.6.1.2.1.31.1.1.1.15]

          Filter:
          {#IFADMINSTATUS} matches ^1$
          and
          {#IFOPERSTATUS} matches ^1$
          and
          {#IFHIGHSPEED} dose not matches ^0$

          Comment


          • Kos
            Kos commented
            Editing a comment
            Ну, собственно, я про это и писал:
            А просто явно за-disable-ить неиспользуемые порты нельзя?
        • Diesel315
          Senior Member
          • Jan 2020
          • 169

          #6
          Originally posted by Wadim_Sch
          Я как раз недавно делал шаблон (вернее подшаблон) для интерфейсов коммутаторов SAN.
          Вы же в LLD ищете #IFOPERSTATUS и #IFADMINSTATUS. Почему бы в фильте LLD не сделать проверку:
          (#IFOPERSTATUS = 1) and (#IFADMINSTATUS=1)
          То есть у вас создадуться Item-ы только для портов которые в данный момент работают, то есть у которых IFADMINSTATUS = UP и IFOPERSTATUS=UP.
          Хммм...
          А что будет при ситуации, когда у вас упал линк? SFP воткнут, кабель тоже, порт в админап, но просто оперстатус down. У вас сработал триггер, но руки не дошли посмотреть и исправить.
          Наступает время LLD и что будет? По логике (при вашем варианте) он просто удалит порт (item) из хоста и вы успешно забыли про эту проблему не исправив её
          Верно мыслю?

          В моем случае все же логика другая чуть-чуть. SFP просто так не держат в железке, она там работает. И если есть SFP, но линка нет, значит неисправность. И при LLD (в моем случае) этот item не удалится.

          Или я ошибаюсь в своих суждениях?


          Comment

          • Wadim_Sch
            Member
            • Feb 2022
            • 90

            #7
            Добрый день!
            А что будет при ситуации, когда у вас упал линк? SFP воткнут, кабель тоже, порт в админап, но просто оперстатус down. У вас сработал триггер, но руки не дошли посмотреть и исправить.
            Наступает время LLD и что будет? По логике (при вашем варианте) он просто удалит порт (item) из хоста и вы успешно забыли про эту проблему не исправив её
            Верно мыслю?
            Не, мыслите не верно.
            Линк упал (OperStatus-down) - сработал триггер. LLD у меня происходит раз в час. Но в LLD стоит настройка "Delete lost resources" - "After" 30d (30 дней).
            Да, при следующем LLD AdminStatus этого порта будет - UP, a OperStatus - DOWN. Если этот порт который ранее не наблюдался, то для него не создасться соответствующий Item.
            Но так как порт ранее наблюдался и для него есть Item, то этот Item автоматически удалится только через 30 дней. Все эти 30 дней триггер будет висеть как сработавший.
            Обычно 30 дней хватает чтобы разобраться почему же порт упал.
            А вот стоит в порту SFP или нет, это уже другой вопрос. У нас есть куча портов в которых стоят SFP, но кабели к ним не подключены.​

            Comment

            • Diesel315
              Senior Member
              • Jan 2020
              • 169

              #8
              Мысль моя (логика) все же была верная получается...
              То что у вас "After" 30d (30 дней)" это лишь ваш случай. Я стараюсь максимально оптимизировать работу системы и в том числе касательно данных в базе. Сократить набор бесполезной информации, чтобы база не пухла.

              У меня стандарт - 1d (24h). Так что при использовании вашего варианта элемент данных удалится и про проблему успешно забудут...

              "У нас есть куча портов в которых стоят SFP, но кабели к ним не подключены." У каждой свой опыт. У нас более рациональное использование SFP, стоят только там где работают...

              Comment

              • Wadim_Sch
                Member
                • Feb 2022
                • 90

                #9
                Но база данных из-за этого фактически не растет и очереди не занимаются.
                Tам же в LLD стоит "Disable lost resources" 3 часа. То есть через 3 часа после после "Link Down" Zabbix перестает пытаться опросить потерянные ресурсы.
                Кроме того в Item для OperStatus стоит препроцессинг "Discard unchanged with heartbaet" 1h. То есть если OperStatus рабочего порта UP, то данные сохраняются в базу раз в час, если они не менялись. То есть всего 24 записи для рабочего порта за сутки, хотя OperStatus проверяется каждую минуту.
                LLD "After" 30d (30 дней)" стоит на шаблонах портов для коммутаторов датецентров (важных железок). Для офисных коммутаторов у меня тоже стоит 1d (24h) для User-портов и 30d для Uplink и других важных портов.
                Я согласен, что у каждого свой опыт и классно, что Zabbix позволяет так гибко настраивать мониторинг под свои нужды (я тут параллельно "борюсь" с другим мониторингом и стал ценить Zabbix ещё больше)

                Comment

                Working...