Ad Widget

Collapse

SNMP string как HEX

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • dimumlik
    Junior Member
    • Jun 2021
    • 6

    #1

    SNMP string как HEX

    Получаю по SNMP значение даты в виде текстровой строки
    snmpget -v2c -c *** ***** .1.3.6.1.4.1.****
    ***::*Date.0 = STRING: 2022-3-29,11:50:0.0,+3:0

    В Zabbix элемент SNMP agent, тип Text, выдает вместо строки HEX:
    Value: 07 E6 03 1D 0A 37 00 00 2B 03 00

    Причем, при тестировании элемента через раз выдает верное, текстовое значение.
    Посоветуйте, как настроить?
  • Answer selected by Kos at 31-03-2022, 08:31.
    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-03-2022, 16:49.

    Comment


    • dimumlik
      dimumlik commented
      Editing a comment
      Скрипт работает, спасибо!!
      Но осталась одна проблема.
      snmpget выдает при каждом запросе дату в таком виде:
      STRING: 2022-3-29,11:50:0.0,+3:0
      Zabbix при тестировании параметра выдает HEX:
      07 E6 03 1D 0A 37 00 00 2B 03 00
      После препроцессинга:
      2022-3-29,10:55:0.0,+3:0
      НО. Примерно на 3-4 запрос выдается... корректная дата, и соответственно скрипт выдает "кашу":
      8226-NaN-NaN,NaN:NaN:NaN.NaN
      Как объяснить такой сбой в логике?
      Zabbix 5.4.11
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Добрый день!

    ZBXNEXT-505 вам в помощь. Там есть и простой скрипт от Владислава Сокуренко, который можно использовать в препроцессинге для преобразований.
    Только я подозреваю, что тут простым раскодированием из HEX не обойтись - результат будет мало похож на текстовую строку (байты с кодами 03 и 07 - это спецсимволы, а 00 - вообще нулевой, а их тут три таких). Что в результате-то должно было быть?

    Comment


    • dimumlik
      dimumlik commented
      Editing a comment
      OID выдает дату в таком виде "2022-3-29,11:50:0.0,+3:0" но Zabbix почему то выдает не текстовую строку а набор HEX символов. Соответственно нужна исходная строка с датой.

    • Kos
      Kos commented
      Editing a comment
      Да, спасибо, чего-то я пропустил это.
      Похоже, что исходный тип данных этого SNMP OID-а - не текстовая строка, а таймстэмп. Где-то я его тоже парсил через JavaScript, попытаюсь найти.
  • wins
    Senior Member
    • Sep 2014
    • 307

    #3
    создано 2010 сен 08 11:05 .. м-да..) проголосовал за задачу. Тоже актуальная тема.

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #4
      Преобразование из формата 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-03-2022, 16:49.

      Comment


      • dimumlik
        dimumlik commented
        Editing a comment
        Скрипт работает, спасибо!!
        Но осталась одна проблема.
        snmpget выдает при каждом запросе дату в таком виде:
        STRING: 2022-3-29,11:50:0.0,+3:0
        Zabbix при тестировании параметра выдает HEX:
        07 E6 03 1D 0A 37 00 00 2B 03 00
        После препроцессинга:
        2022-3-29,10:55:0.0,+3:0
        НО. Примерно на 3-4 запрос выдается... корректная дата, и соответственно скрипт выдает "кашу":
        8226-NaN-NaN,NaN:NaN:NaN.NaN
        Как объяснить такой сбой в логике?
        Zabbix 5.4.11
    • dimumlik
      Junior Member
      • Jun 2021
      • 6

      #5
      Скриншоты во вложении
      Attached Files

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3404

        #6
        Скрипт работает, спасибо!!
        Но осталась одна проблема.
        [...]
        По всей видимости, приходящие данные интерпретируются то как бинарная строка (и передаются в HEX-представлении), то как обычная символьная строка (если вдруг там найдётся что-то похожее на символьную строку).

        Добавил в скрипт проверку - после третьей строки, после присвоения значения переменной split_data:
        Code:
        //Sanity: if the input already is a text string, then return it "as is"
        if (split_data.length < 8) {
          return value;
        }
        P.S. Пожалуйста, не надо писать комментарием к чужой реплике, лучше отвечайте отдельной репликой!
        Last edited by Kos; 30-03-2022, 08:26.

        Comment

        Working...