Ad Widget

Collapse

Счетчик трафика на интерфейсе маршрутизатора

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • kadurin
    Junior Member
    • Feb 2021
    • 2

    #1

    Счетчик трафика на интерфейсе маршрутизатора

    Добрый день
    Работаю над интеграцией CRM системы с мониторингом Zabbix через его API.
    Цель: по указанному интерфейсу маршрутизатора собирать количество пройденного трафика, чтобы в дальнейшем можно было выбрать количество трафика за определенное время.
    Реализация: Сделал два элемента данных типа SNMPv2 с OID ifInOctets["index","ifDescr","lte1"] и соответственно ifOutOctets["index","ifDescr","lte1"]. Они работают корректно. Значения, которые они собирают - это количество байт, пройденных в/из интерфейса с момента запуска устройства. В идеале это должен быть вечно растущий график. Проблема заключается в обнулениях (модное слово 2020) счетчиков трафика из-за перезапуска устройства и соответственно график падает к нулю. Получается график типа пила. Для суммирования пройденного трафика in/out и компенсации обнулений сделал вычисляемый элемент данных. В формуле довольно топорно записываю: к предыдущему значению этого вычисляемого элемента прибавляем суммы дельт элементов данных in и out.
    Довольно скудно это выглядит так: last(#2) + abschange(traffic.tx-lte1)*(change(traffic.tx-lte1) >= 0) + abschange(traffic.rx-lte1)*(change(traffic.rx-lte1)>=0) + last(traffic.tx-lte1) * (change(traffic.tx-lte1) < 0) + last(traffic.rx-lte1) * (change(traffic.rx-lte1) < 0) + (last(traffic.tx-lte1) + last(traffic.rx-lte1))*(last(#2) < 1)
    Проблема: ожидаемо, получаю на элементе ошибку not supported с комментарием "значение last(#2) не существует". Не использовать "накопительную" переменную нельзя, т.к. если опираться только на значения из элементов in/out трафика при обнулении счетчиков они неизбежно направят и вычисляемый элемент данных к нулю.
    Просьба тапками не бросаться. Над интеграцией работаю пару недель. Все по мануалам. Буду рад светлым идеям.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Ну, я бы просто использовал штатную функцию препроцессинга "Simple change" для вычисления дельт.
    А вычисляемый элемент данных, если это надо, делал бы с чётким расписанием (например, в 00 минут 00 секунд каждого часа) и вычислением сумм за прошедший час.

    Comment

    • kadurin
      Junior Member
      • Feb 2021
      • 2

      #3
      Хорошая идея. В результате я сделал именно так, как вы сказали. Но вышла сложность в добавлении вычисляемого элемента через API. Поле formula передаю в явном виде. Оно сохраняется в БД (таблица items), но в веб интерфейсе поле формулы остается пустым и демон так же его не видит. Вычисляемый элемент возвращает "неожиданный конец выражения":

      Click image for larger version

Name:	traffic-count.jpg
Views:	201
Size:	71.4 KB
ID:	422856

      Открываем элемент данных и видим пустую формулу:

      Click image for larger version

Name:	calculated-item.JPG
Views:	171
Size:	40.3 KB
ID:	422858

      При том, что формула корректно передается и сохраняется в нужном item в БД заббикс:

      Click image for larger version

Name:	db-zabbix-item.JPG
Views:	173
Size:	25.6 KB
ID:	422857

      Запрос в API:


      Code:
      {
      "jsonrpc":"2.0",
      "method":"item.create",
      "params":{
      "units":"byte",
      "delay":"6h",
      "type":"15",
      "value_type":"3",
      "formula":"\"sum(traffic.tx.lte2, 21600) + sum(traffic.rx.lte2, 21600)\"",
      "description":"traffic.sum",
      "status":"0",
      "hostid":"13316",
      "interfaceid":null,
      "key_":"traffic.sum.lte2",
      "name":"traffic.sum.lte2"
      },
      "id":1,
      "auth":"1d370c023a69dfc6cf1cb17a5b413c7a"
      }
      Ответ:

      Code:
      {
      "jsonrpc":"2.0",
      "result":{
      "itemids":[
      "41651"
      ]
      },
      "id":1
      }
      В мануале поле формула фигурирует только в версии 1.8. В более поздних это поле объекта Item не указывается в мануале, вероятно, оно более не предназначено для записи напрямую. Просматривал исходники CItem.php . Это поле попадает в БД вместе с остальными переданными полями и сохраняется. Предполагаю, что нужна какая "инициализация" этой формулы. Возможно, ее стоит передавать в виде массива, как передаются те же функции, но в документации API вычисляемые элементы не рассматриваются, а иных подходящих свойств объекта Item я не вижу. Изучение исходников CItem.php не дало ответа на вопрос. Остается форум

      Comment

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

        #4
        1) Правильный property в API для задания формулы вычисляемых элементов данных называется не "formula", а "params" (см. описание этого property в доке по API).
        2) Используемые API могут со временем меняться, поэтому нелишне указывать версию сервера Zabbix, с которым Вы работаете.
        3) Кроме форума, есть ещё такой полезный инструмент как отладочный режим веб-интерфейса. Добавляете себя в группу пользователей, у которой выставлена галочка "Debug mode" (по умолчанию -- "Enabed debug mode"), после этого в правом нижнем углу экрана появляется незаметная кнопка "Debug". Делаете нужные действи вручную (в данном случае - добавляете через веб-интерфейс нужный вам вычисляемый элемент данных), после чего нажимаете эту кнопку и видите все вызовы API и обращения к базе данных, которые только что выполнялись веб-интерфейсом. Вызовы API, правда, отрисовываются немного своеобразно, но вполне можно понять и сравнить с теми вызовами, которые пытаетесь делать вы сами. Например, у меня получилось так:
        Click image for larger version

Name:	screenshot-2021-04-15_01.PNG
Views:	190
Size:	29.1 KB
ID:	422868

        Comment


        • kadurin
          kadurin commented
          Editing a comment
          Спасибо. Все получилось
          Про версию справедливое замечание, буду впредь указывать. Использую последнюю 5.2 версию.
          Действительно, в доке указано, что поле params для формулы вычисляемых элементов. Мой промах, недоглядел.
          Про отладочный режим спасибо, попробую в деле.
      Working...