Ad Widget

Collapse

Проверка доступности по snmp

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Lurker
    Member
    • Nov 2016
    • 83

    #1

    Проверка доступности по snmp

    zabbix 6.2
    В Шаблоне А я считаю количество найденных дискавером элементов и алерчу, если ничего не нашлось.
    Проблема возникает тогда, когда хост не доступен по SNMP. дискавер не отрабатывает, следовательно элементы не находятся, следовательно их 0 и срабатывает триггер. А по задумке в таком случае не должен.
    В шаблоне Б есть итем c key zabbix[host,snmp,available] который является внутренней проверкой zabbix и проверяет доступность хоста по snmp. Казалось бы добавь такой-же элемент в шаблон А и вставь его в триггер. Но не получается т.к. итем уже создан в шаблоне Б и на каких-то хостах эти шаблоны пересекаются.
    Создать итем с другим key я тоже не могу т.к. в случае внутренних проверок key является одновременно и уникальным идентификатором итема и идентификатором того, что опрашивать.
    что делать?
  • Alex_UUU
    Senior Member
    • Dec 2018
    • 541

    #2
    Как ты уже написал, если тебе не хватает в шаблоне А итема zabbix[host,snmp,available] , то создай его как zabbix[host,snmp,available ] или еще где-нить пробел поставь и олни будут разными и не будут пересекаться.
    Также посмотри время хранения прототипов в дискаверинге. Т.к. даже если дискаверинг не обнаружил нужное, то старые будут живы в течении указанного времени. Если дискаверинг сваливается в "неподдерживаемое", то сделай предобработку, чтобы он выдавал что-то корректное, но пустое. Если после дискаверинга итемы вываливаются в неподдерживаемые, то сделай предобработку "отбросить значение" и на триаггер повесь ноудата.

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

    Comment

    • Lurker
      Member
      • Nov 2016
      • 83

      #3
      Originally posted by Alex_UUU
      Как ты уже написал, если тебе не хватает в шаблоне А итема zabbix[host,snmp,available] , то создай его как zabbix[host,snmp,available ] или еще где-нить пробел поставь и олни будут разными и не будут пересекаться.
      заббикс же чувствителен к синтаксису... я думал он это не съест, даже не стал пробовать, но попробую.
      Также посмотри время хранения прототипов в дискаверинге.
      не имеет значения. Возможен вариант когда шаблон накатывается на хост в дауне.
      Если дискаверинг сваливается в "неподдерживаемое", то сделай предобработку, чтобы он выдавал что-то корректное, но пустое. Если после дискаверинга итемы вываливаются в неподдерживаемые, то сделай предобработку "отбросить значение" и на триаггер повесь ноудата.
      не понимаю идею. если к завтрашнему дню не дойдёт и первый пункт не прокатит-выложу тут пример.
      Даже в итеме можно использовать любой другой итем на, который уже есть на этом хосте.
      на каком хосте? я задаю итем в шаблоне.

      Comment

      • Lurker
        Member
        • Nov 2016
        • 83

        #4
        zabbix[host,snmp,available ] выдаёт Invalid third parameter как я и предполагал
        пример выложу позже

        Comment

        • Lurker
          Member
          • Nov 2016
          • 83

          #5
          дискавер выдаёт
          [{"{#SNMPINDEX}":"1","{#POWERSUPPLYNAME}":"Main Power Supply","{#SWNUM}":"nostack","{#MODULE}":"nomodule "},{"{#SNMPINDEX}":"2","{#POWERSUPPLYNAME}":"Redun dant Power Supply","{#SWNUM}":"nostack","{#MODULE}":"nomodule "}]
          из нёго создаются прототипы
          psu.status.[{#MODULE},{#SWNUM},{#SNMPINDEX}]
          затем считается количество найденных прототипов
          count(last_foreach(/{HOST.HOST}/psu.status.[nomodule,*,*]))
          И если нашлось 0, то алертит что мол ничего не нашёл, используйте другой шаблон.
          Вопрос: как не создавать проблему, в случае когда хост вообще не отдаёт данные по SNMP?

          Comment

          • Diesel315
            Senior Member
            • Jan 2020
            • 159

            #6
            Если правильно понял вашу задачу, то вам и не нужен шаблон А как таковой в части сработки триггера, что ничего не нашлось...
            1. Если хост по SNMP стал недоступен, то zabbix[host,snmp,available] как раз это и покажет. Вам этого достаточно в целом? Ведь есть же понимание, как вы сказали выше, что раз нет доступности во SNMP, то и LLD ничего не найдет.
            Или возможна ситуация, что хост доступен по SNMP, а LLD все равно нашла 0? Думаю такой ситуации не может быть...
            2. Так сделайте просто три шаблона! Шаблон А свой набор данных, шаблон Б свой набор данных. По части элементов данных/триггеров/ключей/поиска и тд и тп они не пересекаются. Абсолютно разные сущности. В этом случае как вы писали в случае встречи на одном хосте не будет конфликта.
            И создаете 3 шаблон В, где будет лишь zabbix[host,snmp,available] и триггер на него. И так же приземлите его на хост. В итоге, если на хосте встречаются 3 шаблон А Б В то никаких конфликтов и нет...

            Comment

            • Alex_UUU
              Senior Member
              • Dec 2018
              • 541

              #7
              Originally posted by Lurker
              zabbix[host,snmp,available ] выдаёт Invalid third parameter как я и предполагал
              пример выложу позже
              На на заббиксе 5.4 все Ок :-)
              Click image for larger version

Name:	image.png
Views:	195
Size:	18.4 KB
ID:	480798

              Comment

              • Semiadmin
                Senior Member
                • Oct 2014
                • 1625

                #8
                Можно немного переделать шаблон с дискаверингом, сделать мастер-айтем без хранения истории, получающий LLD JSON, и к нему - зависимое LLD rule и зависимый айтем, считающий через JSONPath с .lenght() количество найденных индексов. При недоступности snmp (неподдерживаемый мастер-айтем) он просто ничего не получит, и триггер на 0 в нем не сработает.

                Comment

                • Lurker
                  Member
                  • Nov 2016
                  • 83

                  #9
                  Или возможна ситуация, что хост доступен по SNMP, а LLD все равно нашла 0? Думаю такой ситуации не может быть...
                  Может. Если оборудование не отдаёт запрошенный OID. Изначально на это и делалась проверка.
                  Если хост по SNMP стал недоступен, то zabbix[host,snmp,available] как раз это и покажет. Вам этого достаточно в целом?
                  в совокупности с уже имеющимися данными да
                  На на заббиксе 5.4 все Ок :-)
                  ничего не ок, у вас отключенные иметы, ничего не собирается.
                  Создаваться итемы-то создаются. Данные они не собирают.
                  При недоступности snmp (неподдерживаемый мастер-айтем) он просто ничего не получит, и триггер на 0 в нем не сработает.
                  Не подходит.
                  count(last_foreach(/{HOST.HOST}/psu.status.[nomodule,*,*])) это не прототип, это обычный итем. Он существует независимо от дискавера.
                  Ещё раз задача:
                  Мне нужно зажечь триггер если дискавер ничего не нашёл, но при этом по SNMP хост доступен.
                  В данный момент триггер зажигается если дискавер ничего не нашёл. В т.ч. если не нашёл из-за недоступности хоста.

                  Comment

                  • Diesel315
                    Senior Member
                    • Jan 2020
                    • 159

                    #10
                    Originally posted by Lurker
                    В данный момент триггер зажигается если дискавер ничего не нашёл. В т.ч. если не нашёл из-за недоступности хоста.
                    Сделать его (триггер) зависимым от триггера zabbix[host,snmp,available].
                    Тогда он будет зажигаться только когда реально получил 0, а SNMP при этом доступен.
                    В то же время если по SNMP стал недоступен, то сработает только zabbix[host,snmp,available]... Триггер дискавера в этот момент из-за зависимости уже не будет срабатывать...

                    Comment

                    • Semiadmin
                      Senior Member
                      • Oct 2014
                      • 1625

                      #11
                      Originally posted by Lurker
                      count(last_foreach(/{HOST.HOST}/psu.status.[nomodule,*,*])) это не прототип, это обычный итем. Он существует независимо от дискавера.
                      .
                      А не нужен этот вычисляемый агрегируемый вообще, нужен зависимый, о котором я писал, и триггер на него

                      Comment

                      • Lurker
                        Member
                        • Nov 2016
                        • 83

                        #12
                        Originally posted by Semiadmin
                        А не нужен этот вычисляемый агрегируемый вообще, нужен зависимый, о котором я писал, и триггер на него
                        Не выходит цветок каменный. Итем и зависимые от него итем и дискавер есть.
                        Не получается посчитать через JSONPath с .lenght() количество найденных.
                        Проблема в том, что discover выдаёт json в каком-то странном формате. Яваскрипт его понимает как json, но в интернете я ничего про такой формат не нашёл.
                        у меня формат
                        [{"{#SNMPINDEX}":"1","{#SENSORNAME}":"chassis"," {#T EMP}":"23","{#TEMPLIMIT}":"65","{#TEMPSTATUS}":"1" ,"{#TEMPNOMINAL}":"NaN"}]
                        а в примерах заббикса
                        Code:
                        {
                        "books": [
                        {
                        "category": "reference",
                        "author": "Nigel Rees",
                        "title": "Sayings of the Century",
                        "price": 8.95,
                        "id": 1
                        },
                        {
                        "category": "fiction",
                        "author": "Evelyn Waugh",
                        "title": "Sword of Honour",
                        "price": 12.99,
                        "id": 2
                        },
                        {
                        "category": "fiction",
                        "author": "Herman Melville",
                        "title": "Moby Dick",
                        "isbn": "0-553-21311-3",
                        "price": 8.99,
                        "id": 3
                        },
                        {
                        "category": "fiction",
                        "author": "J. R. R. Tolkien",
                        "title": "The Lord of the Rings",
                        "isbn": "0-395-19395-8",
                        "price": 22.99,
                        "id": 4
                        }
                        ],
                        "services": {
                        "delivery": {
                        "servicegroup": 1000,
                        "description": "Next day delivery in local town",
                        "active": true,
                        "price": 5
                        },
                        "bookbinding": {
                        "servicegroup": 1001,
                        "description": "Printing and assembling book in A5 format",
                        "active": true,
                        "price": 154.99
                        },
                        "restoration": {
                        "servicegroup": 1002,
                        "description": "Various restoration methods",
                        "active": false,
                        "methods": [
                        {
                        "description": "Chemical cleaning",
                        "price": 46
                        },
                        {
                        "description": "Pressing pages damaged by moisture",
                        "price": 24.5
                        },
                        {
                        "description": "Rebinding torn book",
                        "price": 99.49
                        }
                        ]
                        }
                        },
                        "filters": {
                        "price": 10,
                        "category": "fiction",
                        "no filters": "no \"filters\""
                        },
                        "closed message": "Store is closed",
                        "tags": [
                        "a",
                        "b",
                        "c",
                        "d",
                        "e"
                        ]
                        }
                        Я пробовал по аналогии с примерами для этого формата $[?(@.{#TEMPSTATUS} != "NaN")].length()
                        но получаю ошибку cannot extract value from json by path "$[?(@.{#TEMPSTATUS} != "NaN")].length()": unsupported construct in jsonpath starting with: "@.{#TEMPSTATUS} != "NaN")].length()"
                        просто считать количество индексов мне не подходит.

                        Comment

                        • Semiadmin
                          Senior Member
                          • Oct 2014
                          • 1625

                          #13
                          Code:
                          $[?(@.['{#TEMPSTATUS}'] != "NaN")].length()
                          Last edited by Semiadmin; 24-04-2024, 11:10.

                          Comment

                          Working...