Ad Widget

Collapse

трафик. прогноз и оповещение.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • nixdummy
    Junior Member
    • Mar 2013
    • 13

    #1

    трафик. прогноз и оповещение.

    нужна помощь.

    пытаюсь создать систему оповещения о превышении входящего траффика (а возможно и прогнозирования такого превышения) посредством заббикса или нагиоса.

    на данный момент все работает "на костылях" и вручную, а именно:

    есть удаленный филиал выходящий в интернет посредством маршрутизатора ZyxelUSG20 (есть филиалы и с другими моделями, но это роли не играет). на этом маршрутизаторе включен протокол SNMP по которому я считываю текущее значение принятых на внешний интерфейс байт и записываю их в виде графика в заббикс. график выглядит как пила - неровное возрастание примерно до 4,25 гигабайт, обрыв до нуля, и снова возрастание (я так понял это из-за 32-х разрядного значения переменной - то есть после достижения 4`294`967`295 байт счетчик просто сбрасывается).

    а вот дальше начинаются костыли:
    - bash/perl-скриптом лезу в базу заббикса
    - нахожу трафик заданного маршрутизатора за указанный период
    - перевожу в массив
    - перебираю массив на предмет сбросов значения до нуля
    - траффик (примерный) = число сбросов Х 4,25 Гб

    Теперь вопрос: есть ли в заббиксе вариант избежать описанных костылей?

    Например возможность создания item-аккумулятора, который будет суммировать только положительные приращения переменной.
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Как не очень понятно из постановки задачи откуда там у вас загруженный гигабитный аплинк берется, однако никто не мешает вам собирать по SNMP 64-разрядные данные, гигабитная железка обязанна их поддерживать. Читать про ifXTable. Можете взять готовые решения LLD и шаблоны, например, тут.

    Comment

    • nixdummy
      Junior Member
      • Mar 2013
      • 13

      #3
      Вот схема соединения удаленного филиала с центром:
      Click image for larger version

Name:	??????.PNG
Views:	1
Size:	32.3 KB
ID:	312088
      Тоесть на вопрос про «…загруженный гигабитный аплинк…» ответ такой:
      это не uplink, а WAN-порт маршрутизатора и он не гигабитный (пров обычно дает 2-10 мегабит), а загруженность берется от обнаглевших пользователей (вместо работы глядящих youtube и vk), ленивых админов (забывающих включить web-фильтрацию на маршрутизаторе), а также проблем совместимости Outlook2003 и MsExchangeServer2010 (приводящим к 10-15 кратной загрузке писем общим объемом до 1,5 – 2 гигабайт)
      Касательно съема 64-х разрядной переменной – это невозможно. Дело в том, что в базе OID-ов она обозначается так:
      Code:
      root@host# snmpwalk -v2c -c public 192.168.aaa.1 1.3.6.1.2.1.2.2.1.2
      iso.3.6.1.2.1.2.2.1.2.1 = STRING: "lo"
      iso.3.6.1.2.1.2.2.1.2.2 = STRING: "doll"
      iso.3.6.1.2.1.2.2.1.2.3 = STRING: "eth_base"
      iso.3.6.1.2.1.2.2.1.2.4 = STRING: "gre0"
      iso.3.6.1.2.1.2.2.1.2.5 = STRING: "sit0"
      iso.3.6.1.2.1.2.2.1.2.6 = STRING: "eth0"
      iso.3.6.1.2.1.2.2.1.2.7 = STRING: "eth1"
      iso.3.6.1.2.1.2.2.1.2.8 = STRING: "eth2"
      iso.3.6.1.2.1.2.2.1.2.9 = STRING: "eth3"
      iso.3.6.1.2.1.2.2.1.2.10 = STRING: "eth4"
      root@host# snmpwalk -v2c -c public 192.168.aaa.1 1.3.6.1.2.1.2.2.1.10
      iso.3.6.1.2.1.2.2.1.10.1 = Counter32: 531585358
      iso.3.6.1.2.1.2.2.1.10.2 = Counter32: 0
      iso.3.6.1.2.1.2.2.1.10.3 = Counter32: 369583692
      iso.3.6.1.2.1.2.2.1.10.4 = Counter32: 0
      iso.3.6.1.2.1.2.2.1.10.5 = Counter32: 0
      iso.3.6.1.2.1.2.2.1.10.6 = Counter32: 2099432377
      iso.3.6.1.2.1.2.2.1.10.7 = Counter32: 3630376439
      iso.3.6.1.2.1.2.2.1.10.8 = Counter32: 3179
      iso.3.6.1.2.1.2.2.1.10.9 = Counter32: 2660
      iso.3.6.1.2.1.2.2.1.10.10 = Counter32: 1884

      Тоесть ее тип определен как «Counter32». Переделать ее в «Counter64» или что-либо еще – значит лезть в прошивку и переделывать ее. Это можно, но очень долго и сложно (филиалов около сотни, типов маршрутизаторов около пяти – и для каждого придется перекомпилировать микрокод). Хотя, может я ошибаюсь, и базу OID-ов у Zyxel-ей можно сменить без описанных трудностей?
      Теперь о том, что же у меня есть на данный момент. Есть наблюдаемый хост, за которым закреплен вручную настроенный ITEM (SNMPv2 agent).По этому ITEM-у стороится график:
      Click image for larger version

Name:	??????3.PNG
Views:	1
Size:	55.0 KB
ID:	312089
      Как видно по этому графику – есть сбросы в ноль на значении около 4,25G (это маршрутизатор сбросил 32-х разрядный счетчик) и на меньших произвольных значениях (это перезагрузка роутера и обнуление всех счетчиков).
      Чего же хочу я – так это чтобы сбросов не было. Чтобы раз уж маршрутизатор не может хранить значение больше 4,25G за него это сделал заббикс.

      Теперь что же делает мой скрипт. Вот он (заранее прошу сильно не пинать – в программировании я дилетант):
      Code:
      [SIZE="2"]Dayly.pl
      
      #!/usr/bin/perl
      use Date::Parse;
      use DBI;
      $typ = "mysql";
      $nam = "zabbix";
      $usr = "root";
      $pas = "*******";
      $begin = str2time("$ARGV[0]"."/2012 00:01AM");
      $end = str2time("$ARGV[1]"."/2012 00:01AM");
      
      @sname = ("aa_PUB","ab_PUB","ac_PUB","ad_PUB","ae_PUB");
      @sid = (24319,24339,24341,24343,24345);
      
      $j=0;
      foreach (@sid)
          {
          $query1 = "SELECT value FROM history_uint WHERE itemid=$sid[$j] AND clock BETWEEN $begin AND $end;";
          $connect = DBI->connect("DBI:$typ:$nam",$usr,$pas) or die "Error connecting ZABBIX_DB";
      
          #Filling the handle with SQL results
          $query_handle = $connect->prepare($query1);
          $query_handle->execute;
          $query_handle->bind_columns(\$value);
      
          #Buggy loop - don't laugh! I'm not a pro in pearl - after all its working!
          $i=0;
          while($query_handle->fetch()) {
           $table[$i]=$value;
           $i+=1;
          }
          #    $tstart[0] = $begin;
      
          $query_handle->finish;
          $connect->disconnect;
      
          #Another buggy loop - now to accumulate the values
          $k=0;
          $summ=0;
          foreach (@table)
          {
            if ($table[$k] > $table[$k+1])
           {
            $summ=$summ+$table[$k];
           }
          $k+=1;
          }
      
          $summ=$summ-$table[0];
          $summ=$summ/1073741824;
      #    $tbegin=scalar localtime($begin);
      #    $tend=scalar localtime($end);
          $forecast=$summ*15;
      
          print "$sname[$j] TRAFFIC: $summ FORECAST $forecast\n";
          $j=$j+1;
          }[/SIZE]
      Как пользоваться – ввести “perl dayly.pl 12/01 12/03” и он посчитает трафик за 3 дня и выдаст прогноз на месяц при таких темпах поедания траффика.

      P.S.: Прошу прощения за большой объем, но я надеюсь теперь стало понятнее, чего же я хочу от заббикса и в чем состоит задача

      Comment

      • dima_dm
        Senior Member
        • Dec 2009
        • 2697

        #4
        Чтобы получить 64-bit счётчики нужно другие OID использовать.
        ifHCInOctets(1.3.6.1.2.1.31.1.1.1.6)
        ifHCInUcastPkts(.1.3.6.1.2.1.31.1.1.1.7)
        ifHCInMulticastPkts(1.3.6.1.2.1.31.1.1.1.8)
        ifHCInBroadcastPkts(1.3.6.1.2.1.31.1.1.1.9)
        ifHCOutOctets(1.3.6.1.2.1.31.1.1.1.10)
        ifHCOutUcastPkts(1.3.6.1.2.1.31.1.1.1.11)
        ifHCOutMulticastPkts(1.3.6.1.2.1.31.1.1.1.12)
        ifHCOutBroadcastPkts(1.3.6.1.2.1.31.1.1.1.13)

        Comment

        • Jimson
          Senior Member
          • Jan 2008
          • 1327

          #5
          Ну собственно да, читать доки нужно прежде чем кидаться писать скриптовый велосипед. И смысл счетчика "трафика" в виде "as is" я тоже не понял, мы обычно храним трафик как "дельта по времени" (и множитель 8 что бы видеть график в мегаБИТАХ), в противном случае он у тебя так и будет ползти вверх на графике. Для билингования дополнительно можешь завести еще один итем как "просто дельта", в этом случае ты сможешь просто проссумировать данные и получить объем в байтах.

          P.S. на 10 мегабитах трафика (непрерыно) у тебя переполнение 32 разрядного счетчика будет каждые 68 минут, на нормальном графике (дельта по времени) ты не увидишь эти сбросы в ноль.
          Last edited by Jimson; 18-03-2013, 10:27.

          Comment

          • nixdummy
            Junior Member
            • Mar 2013
            • 13

            #6
            Originally posted by dima_dm
            Чтобы получить 64-bit счётчики нужно другие OID использовать.
            ifHCInOctets(1.3.6.1.2.1.31.1.1.1.6)
            Code:
            root@host:/etc# snmpwalk -v2c -c public 192.168.aaa.1 1.3.6.1.2.1.31
            iso.3.6.1.2.1.31 = No Such Object available on this agent at this OID
            Тоесть в этой железке таких нету. И сбросы счетчика у меня будут в любом случае. Однако даже если бы переменная была 64 бита, сбросы все равно присутствовали бы - из-за перезагрузок устройства.

            А про "читать доки" я так скажу: за 5-6 лет существования филиалов, руководство впервые задалось вопросом "а что же мы так много за инет платим?" Ну и как обычно с фразой "срок исполнения ВЧЕРА" поручило мне собрать инфу по всем филиалам. Завел заббикс, вбил хосты, завел графики - как вы кстати и говорите именно "дельта по времени". Руководство это не устроило и они меня спросили - "когда качали видим, а суммарный объем какой?". Сделал значения без времени (as is) - первый день вообще с линейкой считал. Потом скриптом. Так что тут не до доков было. А график дельтами я тоже строил - вот только как их просуммировать "без линейки" или "велосипеда" я не знаю. Собственно этому и посвящен мой пост.

            Comment

            • zalex_ua
              Senior Member
              Zabbix Certified Trainer
              Zabbix Certified SpecialistZabbix Certified Professional
              • Oct 2009
              • 1286

              #7
              Originally posted by Jimson
              Ну собственно да, читать доки нужно прежде чем кидаться писать скриптовый велосипед. И смысл счетчика "трафика" в виде "as is" я тоже не понял, мы обычно храним трафик как "дельта по времени" (и множитель 8 что бы видеть график в мегаБИТАХ), в противном случае он у тебя так и будет ползти вверх на графике. Для билингования дополнительно можешь завести еще один итем как "просто дельта", в этом случае ты сможешь просто проссумировать данные и получить объем в байтах.

              P.S. на 10 мегабитах трафика (непрерыно) у тебя переполнение 32 разрядного счетчика будет каждые 68 минут, на нормальном графике (дельта по времени) ты не увидишь эти сбросы в ноль.
              Все совершенно верно.
              Добавлю только ссылку на доку https://www.zabbix.com/documentation...fig/items/item

              Code:
              Store value:
              This setting is extremely useful to get speed per second for a constantly growing value.
              Note: If current value is smaller than the previous value, Zabbix discards that difference (stores nothing) and waits for another value. This helps to work correctly with, for instance, a wrapping (overflow) of 32-bit SNMP counters.

              Comment

              Working...