Ad Widget

Collapse

Сравнение значений.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • GOID
    Member
    • Oct 2014
    • 35

    #1

    Сравнение значений.

    Добрый день! Не смог найти информацию - есть ли возможность получить разницу между значениями наблюдаемого параметра на начало месяца и конец ?

    Не принципиально, чтобы это были значения 1го и последнего числа месяца, достаточно, чтобы число дней между ними было около 30.

    Например - нужно показать в отчете, процентное (относительно размера диска) изменение свободного дискового пространства за последние 30 дней. Значение может быть как положительным (свободное пространство увеличилось), так и отрицательным (свободное пространство уменьшилось).

    Возможно ли такое средствами Zabbix ?

    UPD: Пока остановился на использовании функции last(), с указание порядкового номера значения
    Last edited by GOID; 04-11-2015, 08:04.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Наверное, можно сделать вычисляемый элемент данных (calculated item), который бы содержал разницу между last() и last(#1,30d).

    Comment

    • GOID
      Member
      • Oct 2014
      • 35

      #3
      Originally posted by Kos
      Наверное, можно сделать вычисляемый элемент данных (calculated item), который бы содержал разницу между last() и last(#1,30d).
      Интересно, что last(item, Nd) не захотело работать. Возвращало последнее (самое актуальное) значение, что меня и сбило с толку. Только last(item, #N), где item - частота сбора данных 86400 (1 раз в день), N - количество дней "назад"

      Comment

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

        #4
        Originally posted by GOID
        Интересно, что last(item, Nd) не захотело работать. Возвращало последнее (самое актуальное) значение, что меня и сбило с толку. Только last(item, #N), где item - частота сбора данных 86400 (1 раз в день), N - количество дней "назад"
        Ну это логично, поскольку last(item, Nd) в вычисляемом элементе - это, фактически, отсылка к item.last(Nd), что неверно. Первым параметром функции last() может быть только #Номер. Поэтому я предлагал для взятия значения месячной давности использовать last() с двумя параметрами, первый из которых - "#1", а второй задаёт сдвиг на 30 дней назад.
        Т.е. в формуле для calculated item-а должно быть что-то вроде:
        Code:
        last(item) - last(item, #1, 30d)

        Comment

        • GOID
          Member
          • Oct 2014
          • 35

          #5
          В итоге использовал формулу:
          Code:
          last(item) - last(item, #1, 30d)
          Как писал ранее, требовалось показать в отчете изменения в использованном дисковом пространстве. Было решено считать суммарный объем (а также свободное пространство) всех смонтированных на системе дисков.
          Сбор такой статистики был сделан с помощью UserParameter.

          Для Linux: (Думаю возможно более изящное решение в одну строку, но не хватило терпения)
          Code:
          UserParameter=ps.fs[*],df -P| column -t | if [ "$1" == "free" ]; then awk '{s+=$$4}END{print (s-1024)*1024}'; else if [ "$1" == "size" ]; then awk '{s+=$$2}END{print (s-1024)*1024}'; fi fi
          Для Windows (не требует разрешения на запуск скриптов ps1):
          Code:
          UserParameter=ps.fs[*],powershell.exe -ExecutionPolicy Bypass -file C:\zabbix\filesystem.ps1 $1
          Потребуется поменять значение Timeout у zabbix-agent'а, так как выполнение ps1-скрипта занимает чуть больше времени, чем Timeout по-умолчанию.
          Сам скрипт Powershell (filesystem.ps1):
          Code:
          if($args[0] -eq "size"){
          	$res = Get-WmiObject -class win32_logicaldisk | ? {$_.DriveType -eq 3} | Measure-Object -Sum Size | select Sum
          }
          elseif($args[0] -eq "free"){
          	$res = Get-WmiObject -class win32_logicaldisk | ? {$_.DriveType -eq 3} | Measure-Object -Sum FreeSpace | select Sum
          }
          $res.Sum
          Если данную статистику можно собрать zabbix'ом без использования UserParameter и писания скриптов - был бы рад увидеть конкретное решение.

          Расчет для месячной разницы будет работать только спустя N-дней после применения шаблона на хост, так как используется смещение на N-дней назад, где значения могли еще не собираться.

          Приложил шаблон для изучения.
          Attached Files
          Last edited by GOID; 06-11-2015, 09:59.

          Comment

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

            #6
            Рад, что получилось

            Для Linux: (Думаю возможно более изящное решение в одну строку, но не хватило терпения)
            Просто как идея к оптимизации: вместо
            Code:
            df -P| column -t |
            и цикла внутри awk с суммированием можно вызывать
            Code:
            df -P --total -l -t ext3 -t ext4 -t vfat | awk '/^total/ {print нужноеПоле}*1024'
            --total даёт суммарную последнюю строчку (из которой и читаем), списком -t FSTYPE можно отсечь всякие виртуальные файловые системы вроде tmpfs, а -l не включает в вывод сетевые файловые системы (впрочем, при использовании "-t" они итак не попадут).

            Comment

            • GOID
              Member
              • Oct 2014
              • 35

              #7
              Вот это заработало (df 8.4):
              Code:
              df -P --total -l -t ext3 -t ext4 -t vfat | awk '/^total/ {print ($2) * 1024}'
              На системах, с которых нужно собирать данные - df версии 5.97, ключа total в ней нет. А вносить изменения в пакеты, установленные на системах нельзя.

              Спасибо за подсказки.

              Comment

              • GOID
                Member
                • Oct 2014
                • 35

                #8
                Необходимо увеличить timeout и в конфигурации zabbix-server, иначе получим ошибку:

                Code:
                 Zabbix agent item "ps.fs[free]" on host "host.domain.local" failed: first network error, wait for 15 seconds

                Comment

                Working...