Ad Widget

Collapse

Как обработать значения из SNMP ?

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • sias32
    Junior Member
    • Aug 2022
    • 11

    #1

    Как обработать значения из SNMP ?

    Есть несколько мелких контор, расположены по разным часовым поясам, через микротик по оиду хотел получить местное время, нашел OID 1.3.6.1.2.1.25.1.2.0 для модели RB951Ui-2nD, но значения получаю в виде 07 E6 08 16 10 15 0F 00 2B 03 00
    Так же есть другие параметры, но пока их не трогал, можно ли преобразовать эту строку в рабочее время ?
  • Answer selected by Kos at 01-09-2022, 09:43.
    Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    Видимо, там используется SNMP-тип данных 'DateAndTime". Для его преобразования в текст можно использовать такую функцию предобработки (препроцессинга) с помощью JavaScript:
    Code:
    //Transformation from SNMP DateAndTime format to string.
    //https://www.webnms.com/snmp/help/snmpapi/snmpv3/using_mibs_in_applns/tcs_dateandtime.html
    var split_data = value.split(" ");
    
    //Sanity: if the input already is a text string, then return it "as is"
    if (split_data.length < 8) {
      return value;
    }
    
    var year  = parseInt(split_data[0] + split_data[1], 16);
    var month = parseInt(split_data[2], 16);
    var day   = parseInt(split_data[3], 16);
    var hour  = parseInt(split_data[4], 16);
    var min   = parseInt(split_data[5], 16);
    var sec   = parseInt(split_data[6], 16);
    var dsec  = parseInt(split_data[7], 16);
    var res = year + '-' + month + '-' + day + ',' + hour + ':' + min + ':' + sec + '.' + dsec;
    
    //The timezone part is optional, could be absent
    if (split_data.length > 8) {
      var sign = (split_data[8].toUpperCase() === '2B') ? '+' : '-';
      hour = parseInt(split_data[9],  16);
      min  = parseInt(split_data[10], 16);
      res += ',' + sign + hour + ':' + min;
    }
    
    return res;
    Результат: если на вход дать исходную строку ("07 E6 03 1D 0A 37 00 00 2B 03 00"), то на выходе получаем:​
    Code:
    2022-3-29,10:55:0.0,+3:0​
    Last edited by Kos; 29-08-2022, 12:06.

    Comment


    • sias32
      sias32 commented
      Editing a comment
      К сожалению на данный момент не так и много понимаю все тонкости, не могли бы вы поподорбнее расписать как это делать ?
  • wins
    Senior Member
    • Sep 2014
    • 307

    #2
    Проверил на своих железках (zabbix 6.2.1) по этому оиду отдает значение вида "2022-8-22,23:14:13.0,+3:0" Тип ЭД - character. Может дело в прошивке мт?

    Comment


    • sias32
      sias32 commented
      Editing a comment
      Zabbix сервер (6.0.7), RouterOS (6.49.6)

      Тип эд - это ты выставил "тип информации" - символ ? Вместе с ним появляется строка "Преобразование значений", может там что-то надо ?

      Если не сложно, какие еще оиды желательно мониторить ? (по мимо тех, что предоставляет стандартный шаблон для Linux и Mikrotik)
  • wins
    Senior Member
    • Sep 2014
    • 307

    #3
    Может быть не так выразился. По данному оиду значения отдаются в нормальном виде, ну т.е. да, символ.
    Через snmpget: HOST-RESOURCES-MIB::hrSystemDate.0 = STRING: 2022-8-23,10:30:28.0,+3:0
    А какие оиды опрашивать еще кроме этого - решать вам, нам ваших задач не видно)

    Comment


    • sias32
      sias32 commented
      Editing a comment
      Может я что-то не так написал в элементе ?

      Имя System Date
      Тип SNMP агент
      Ключ system.date[hrsysDate.0]
      Тип информации Символ
      IP: 1.1.1.1:161
      SNMP OID 1.3.6.1.2.1.25.1.2.0
      Интервал обновления 15m
      Пользовательские интервалы
      Преобразование значений нету

      Тэгов нету, предобработка нету

      Если все верно, то попробую перейти на другую версию заб сервера а потом и прошивки
  • wins
    Senior Member
    • Sep 2014
    • 307

    #4
    Руками проверьте, snmpget.Какая версия прошивки на микротике?

    Comment


    • sias32
      sias32 commented
      Editing a comment
      Model RB951Ui-2nD
      Revision r2
      Factory Firmware 6.44
      Current Firmware 6.49.6
      Upgrade Firmware 6.49.6

      Запрашивая имя snmpget -c public -v2c 1.1.1.1 .1.3.6.1.2.1.1.5.0

      Выводит iso.3.6.1.2.1.1.5.0 = STRING: "MikroTik"

      Запрашивая время snmpget -c public -v2c 1.1.1.1 .1.3.6.1.2.1.25.1.2.0

      Выводит iso.3.6.1.2.1.25.1.2.0 = Hex-STRING: 07 E6 08 17 0B 24 11 00 2B 03 00
      Last edited by sias32; 23-08-2022, 10:44.
  • wins
    Senior Member
    • Sep 2014
    • 307

    #5
    Попробуйте тоже самое с других микротиков поснимать, а затем с других машин.
    ну или уже для эксперимента добавьте ключ -Oa к snmpget

    Comment


    • sias32
      sias32 commented
      Editing a comment
      На других выдает такое же значение, видимо особенность этих микротиков
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #6
    Видимо, там используется SNMP-тип данных 'DateAndTime". Для его преобразования в текст можно использовать такую функцию предобработки (препроцессинга) с помощью JavaScript:
    Code:
    //Transformation from SNMP DateAndTime format to string.
    //https://www.webnms.com/snmp/help/snmpapi/snmpv3/using_mibs_in_applns/tcs_dateandtime.html
    var split_data = value.split(" ");
    
    //Sanity: if the input already is a text string, then return it "as is"
    if (split_data.length < 8) {
      return value;
    }
    
    var year  = parseInt(split_data[0] + split_data[1], 16);
    var month = parseInt(split_data[2], 16);
    var day   = parseInt(split_data[3], 16);
    var hour  = parseInt(split_data[4], 16);
    var min   = parseInt(split_data[5], 16);
    var sec   = parseInt(split_data[6], 16);
    var dsec  = parseInt(split_data[7], 16);
    var res = year + '-' + month + '-' + day + ',' + hour + ':' + min + ':' + sec + '.' + dsec;
    
    //The timezone part is optional, could be absent
    if (split_data.length > 8) {
      var sign = (split_data[8].toUpperCase() === '2B') ? '+' : '-';
      hour = parseInt(split_data[9],  16);
      min  = parseInt(split_data[10], 16);
      res += ',' + sign + hour + ':' + min;
    }
    
    return res;
    Результат: если на вход дать исходную строку ("07 E6 03 1D 0A 37 00 00 2B 03 00"), то на выходе получаем:​
    Code:
    2022-3-29,10:55:0.0,+3:0​
    Last edited by Kos; 29-08-2022, 12:06.

    Comment


    • sias32
      sias32 commented
      Editing a comment
      К сожалению на данный момент не так и много понимаю все тонкости, не могли бы вы поподорбнее расписать как это делать ?
  • murrayjestin
    Junior Member
    • Aug 2022
    • 2

    #7

    snmpget.Какая версия прошивки на микротике?​

    Comment


    • sias32
      sias32 commented
      Editing a comment
      Model RB951Ui-2nD
      Revision r2
      Factory Firmware 6.44
      Current Firmware 6.49.6
      Upgrade Firmware 6.49.6
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #8
    К сожалению на данный момент не так и много понимаю все тонкости, не могли бы вы поподорбнее расписать как это делать ?
    Открыть на редактирование ваш существующий элемент данных. Убедиться, что тип данных выбран строковый (Character), а не числовой (Numeric).
    Перейти на соседнюю вкладку ("Preprocessing"), добавить шаг препроцессинга с типом "JavaScript". В появившееся окошко скопипастить код скрипта, сохранить.
    Там же, при редактировании, можно поотлаживаться, нажимая кнопку "Test".
    Всё это верно, как минимум, с версии 6.0 (возможно, и более старых - уже не помню точно).

    Comment


    • sias32
      sias32 commented
      Editing a comment
      Спасибо, теперь все работает!
Working...