Ad Widget

Collapse

Запутался с prepocessing

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Andrew Grekhov
    Member
    • Aug 2021
    • 45

    #1

    Запутался с prepocessing

    OS: linux, zabbix ver. 6.0
    Мне нужно получить суммарную частоту ядер процессора.
    Под bash это делается элементарно:
    grep "cpu MHz" /proc/cpuinfo|cut -d ":" -f 2|tr -d " "| gawk '{ sum += $1 }; END { print sum }'
    Но не везде у меня есть возможность править zabbix-agent'a.
    Хотелось сделать средствами zabbix'a.

    vfs.file.contents[/proc/cpuinfo]
    preprocessing:
    # Выкидываем табуляцию и пробелы:
    Replace \t
    Replace " "
    Regular expression (MHz[a-z:]*)([0-9.]*) \2

    Находит только первое значение. А мне надо ещё как то получить сумму.

    Есть мысли как это сделать правильно?
    PS. Вообще странно, что я не нашёл в этого параметра в integration -> linux,
    может плохо искал.
    PPS. Поясню зачем это вообще надо. Современные материнки урезают(иногда разгоняют)
    производительность ЦПУ в зависимости от нагрузки, температуры и прочего.
    И LoadAverage уже не столь информативна как хотелось.
  • DSV12
    Senior Member
    Zabbix Certified Specialist
    • Nov 2018
    • 156

    #2
    Originally posted by Andrew Grekhov
    OS: linux, zabbix ver. 6.0
    Мне нужно получить суммарную частоту ядер процессора.
    Под bash это делается элементарно:
    grep "cpu MHz" /proc/cpuinfo|cut -d ":" -f 2|tr -d " "| gawk '{ sum += $1 }; END { print sum }'
    Но не везде у меня есть возможность править zabbix-agent'a.
    Хотелось сделать средствами zabbix'a.

    vfs.file.contents[/proc/cpuinfo]
    preprocessing:
    # Выкидываем табуляцию и пробелы:
    Replace \t
    Replace " "
    Regular expression (MHz[a-z:]*)([0-9.]*) \2

    Находит только первое значение. А мне надо ещё как то получить сумму.

    Есть мысли как это сделать правильно?
    PS. Вообще странно, что я не нашёл в этого параметра в integration -> linux,
    может плохо искал.
    PPS. Поясню зачем это вообще надо. Современные материнки урезают(иногда разгоняют)
    производительность ЦПУ в зависимости от нагрузки, температуры и прочего.
    И LoadAverage уже не столь информативна как хотелось.
    Навскидку (могу ошибиться в синтаксисе) - агрегированные вычисления, что-то типа: sum(last_foreach(system.hw.cpu[*,curfreq]))

    Как вариант - если указать all в параметрах (реальный пример):
    Code:
    # zabbix_get -s your_host -k "system.hw.cpu[all,curfreq]"
    processor 0: 2393MHz
    processor 1: 2393MHz
    processor 2: 2393MHz
    processor 3: 2393MHz
    processor 4: 2393MHz
    processor 5: 2393MHz
    processor 6: 2393MHz
    processor 7: 2393MHz
    UPD:

    Всё-таки, похоже, с агрегированными вычислениями быстрее всего получается:

    1. Создаётся discover rule ("CPU discovery") с ключом system.cpu.discovery (возвращает два макроса — {#CPU.NUMBER} и {#CPU.STATUS}).
    2. Создаётся прототип элемента данных ("CPU $1 freq") с ключом system.hw.cpu[{#CPU.NUMBER},curfreq].
    3. Создаётся агрегированный элемент ("CPU freq sum") с ключом sum(last_foreach(system.hw.cpu[*,curfreq])).
    Last edited by DSV12; 04-03-2024, 16:31.

    Comment

    • Alex_UUU
      Senior Member
      • Dec 2018
      • 541

      #3
      В дваскрипте выкинуть ненужное, проссумировать нужное.

      Comment

      • Andrew Grekhov
        Member
        • Aug 2021
        • 45

        #4
        2 DSV12,
        мысль понял. Но 257 item's ради одного графика...
        За "system.hw.cpu[all,curfreq]" спасибо.
        2 Alex_UUU,
        это то понятно. Но с javascript не работал, мне сильно проще через костыль на externalscripts сделать.
        Или поможете с javascript?

        Comment

        • Andrew Grekhov
          Member
          • Aug 2021
          • 45

          #5
          Сделал. Криво конечно, но вроде работает.
          key: system.hw.cpu[all,curfreq]
          Preprocessing
          # Выкидываем MHz и пробел
          Replace MHz
          Replace "space"
          CSV to JSON ":", "%", "галочку убрать"
          JSONPath $..2.sum()

          Всё. Начинаю тестировать на разных системниках.

          Comment

          Working...