Ad Widget

Collapse

Мониторинг температуры (2)

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • mda.kem
    Junior Member
    • Mar 2014
    • 17

    #16
    Может попробовать в крон поставить, тогда как в cpu_t.log отличить кто запускал скрипт, крон или агент(если ток по времени).
    Last edited by mda.kem; 25-03-2014, 03:24.

    Comment

    • Egor4ik
      Member
      • May 2012
      • 68

      #17
      Originally posted by mda.kem
      У себя в скрипте сделал так же как у вас:

      вот что получилось, /var/log/zabbix/cpu_t.log:
      20140324:090302 /etc/zabbix/script/cpu_t current => 33
      20140324:090325 /etc/zabbix/script/cpu_t high => 85
      ................
      20140325:020302 /etc/zabbix/script/cpu_t current => 39
      20140325:020324 /etc/zabbix/script/cpu_t high =>
      ................
      20140325:070326 ./cpu_t high => 85 (запуск скрипта руками)
      20140325:070328 ./cpu_t high => 85 (запуск скрипта руками)
      20140325:070329 ./cpu_t high => 85 (запуск скрипта руками)
      20140325:080303 /etc/zabbix/script/cpu_t current => 29
      20140325:080325 /etc/zabbix/script/cpu_t high =>

      P.S. ну надо же, когда писал этот текст ошибочку нашел, у вас и соответственно у меня.
      $(date '+%Y%m%d:%H%m%S') -- > $(date '+%Y%m%d:%H%M%S') в место минут месяц вставлялся.
      Для дебага можно попробовать вначале выполнять sensors далее полученый результат кидать в лог, и продолжать обратывать полученый текст вашими скриптами. Думаю, этих данных с головой хватит для анализа проблемы.

      Comment

      • aib
        Senior Member
        • Jan 2014
        • 1615

        #18
        Originally posted by Egor4ik
        Для дебага можно попробовать вначале выполнять sensors далее полученый результат кидать в лог, и продолжать обратывать полученый текст вашими скриптами. Думаю, этих данных с головой хватит для анализа проблемы.
        что-то типа
        Code:
        [root@zabbix ~]# cat ./cpu_t
        #!/bin/bash
        
        [B]echo $(date '+%Y%m%d:%H%M%S') $0 $1 =\> `/usr/bin/sensors | grep temp` >> /var/log/zabbix/cpu_t.log
        [/B]
        v=$(/usr/bin/sensors | awk -v k=$1 ' /'temp'/ {
        if (k == "current")
        { split($2,a,".")
        split(a[1],b,"+")
        }
        else
        {
        if (k == "high")
        { split($5,a,".")
        split(a[1],b,"+")
        }
        }
        }
        END {print b[2]}')
        echo $(date '+%Y%m%d:%H%M%S') $0 $1 =\> $v >> /var/log/zabbix/cpu_t.log
        echo $v
        Sincerely yours,
        Aleksey

        Comment

        • mda.kem
          Junior Member
          • Mar 2014
          • 17

          #19
          ок. сделаю.

          Comment

          • mda.kem
            Junior Member
            • Mar 2014
            • 17

            #20
            Всем привет.
            Изменил скриптик с учетом ваших рекомендаций

            Code:
            #!/bin/bash
            
            /usr/bin/sensors | awk -v tm=$(date '+%Y%m%d:%H%M%S') '/Core|CPU Temperature/ {print tm,$0}' >> /var/log/zabbix-agent/cpu_t.log
            
            t=$(/usr/bin/sensors | awk -v k=$1 '/Core|CPU Temperature/ {
            if (k == "current")
             { split($3,a,".")
               split(a[1],b,"+")
             }
            else
            {
            if (k == "high")
             { split($6,a,".")
               split(a[1],b,"+")
             }
            }
            if (maxt<b[2]) {maxt=b[2]}
            }
            END {print maxt}')
            
            
            echo $(date '+%Y%m%d:%H%M%S') $0 $1 =\> $t >> /var/log/zabbix-agent/cpu_t.log
            echo "" >> /var/log/zabbix-agent/cpu_t.log
            echo "$t"
            Дополнительно, запуск скрипта добавил в крон на 30мин. каждого часа.
            Результат на всех машинах одинаков и имеет следующий вид
            Code:
            20140401:171813 Core 0:       +36.0°C  (high = +76.0°C, crit = +100.0°C)
            20140401:171813 Core 1:       +34.0°C  (high = +76.0°C, crit = +100.0°C)
            20140401:171813 /etc/zabbix/script/cpu_t high => 76
            ................
            20140401:175813 Core 0:       +34.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:175813 Core 1:       +32.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:175813 /etc/zabbix/script/cpu_t high =>
            ................
            20140401:182812 Core 0:       +35.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:182812 Core 1:       +34.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:182812 /etc/zabbix/script/cpu_t high =>
            ................
            запуск по крону
            20140401:183001 Core 0:       +35.0°C  (high = +76.0°C, crit = +100.0°C)
            20140401:183001 Core 1:       +35.0°C  (high = +76.0°C, crit = +100.0°C)
            20140401:183001 /etc/zabbix/script/cpu_t high => 76
            ................
            20140401:183812 Core 0:       +36.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:183812 Core 1:       +35.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:183812 /etc/zabbix/script/cpu_t high =>
            ................
            20140401:192813 Core 0:       +37.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:192813 Core 1:       +36.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:192813 /etc/zabbix/script/cpu_t high =>
            ................
            запуск по крону
            20140401:193001 Core 0:       +37.0°C  (high = +76.0°C, crit = +100.0°C)
            20140401:193001 Core 1:       +36.0°C  (high = +76.0°C, crit = +100.0°C)
            20140401:193001 /etc/zabbix/script/cpu_t high => 76
            ................
            20140401:193812 Core 0:       +37.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:193812 Core 1:       +36.0 C  (high = +76.0 C, crit = +100.0 C)
            20140401:193812 /etc/zabbix/script/cpu_t high =>

            Comment

            • aib
              Senior Member
              • Jan 2014
              • 1615

              #21
              фантастика!
              программа sensors выдает данные по разному!!!
              обрати внимание, что иногда температура выводится с символом градуса °С - тогда ответ числовой (76)

              20140401:171813 Core 0: +36.0°C (high = +76.0°C, crit = +100.0°C)
              20140401:171813 Core 1: +34.0°C (high = +76.0°C, crit = +100.0°C)
              20140401:171813 /etc/zabbix/script/cpu_t high => 76

              а иногда - БЕЗ символа °С - тогда ответ пустой ()

              20140401:175813 Core 0: +34.0 C (high = +76.0 C, crit = +100.0 C)
              20140401:175813 Core 1: +32.0 C (high = +76.0 C, crit = +100.0 C)
              20140401:175813 /etc/zabbix/script/cpu_t high =>

              Это происходит потому, что в случае наличия символа °С, температура считается единым словом и скрипт выделяет правильное значение:

              0 => 20140401:171813
              1 => Core
              2 => 0:
              3 => +36.0°C
              4 => (high
              5 => =
              6 => +76.0°C,
              7 => crit
              8 => =
              9 => +100.0°C)

              Тогда как при отсутсвии этого символа °С, температура разбивается на 2 слова (+36.0 и С) и скрипт выбирает неверное значение для Максимальной температуры. Для текущей это не имеет значения, она выбирается нормально в любом случае.

              0 => 20140401:171813
              1 => Core
              2 => 0:
              3 => +36.0
              4 => C
              5 => (high
              6 => =
              7 => +76.0
              8 => C,
              9 => crit
              10 => =
              11 => +100.0°C)

              И еще один вопрос - при чем тут maxt ? Откуда он берется изначально?
              Я бы его вообще убрал, он не нужен в этом скрипте. Тем более - неопределенный изначально и могущий привести к странным результатам.
              Sincerely yours,
              Aleksey

              Comment

              • aib
                Senior Member
                • Jan 2014
                • 1615

                #22
                Cнова переписал скриптик.
                Теперь awk делит строку по разделителю "+" и мы получаем четыре части, из которых нам важны вторая и третья:
                1 => 20140401:171813 Core 0:
                2 => 36.0°C (high =
                3 => 76.0°C, crit =
                4 => 100.0°C)

                Причем в случае вывода данных без знака °С, мы все равно получаем корректное разбиение строки
                1 => 20140401:175813 Core 0:
                2 => 34.0 C (high =
                3 => 76.0 C, crit =
                4 => 100.0 C)

                Code:
                #!/bin/bash
                
                /usr/bin/sensors | awk -v tm=$(date '+%Y%m%d:%H%M%S') '/Core|CPU Temperature/ {print tm,$0}' >> /var/log/zabbix-agent/cpu_t.log
                
                t=$(/usr/bin/sensors | awk -F "+" -v k=$1 '/Core|CPU Temperature/ {
                if (k == "current")
                 { split($2,a,".")
                 }
                else
                {
                if (k == "high")
                 { split($3,a,".")
                 }
                }
                }
                END {print a[1]}')
                
                echo $(date '+%Y%m%d:%H%M%S') $0 $1 =\> $t >> /var/log/zabbix-agent/cpu_t.log
                echo "" >> /var/log/zabbix-agent/cpu_t.log
                echo "$t"
                Sincerely yours,
                Aleksey

                Comment

                • mda.kem
                  Junior Member
                  • Mar 2014
                  • 17

                  #23
                  По разделителю полей "+" ход ясен.
                  Что же касается maxt, то идея была в том чтобы из всех температур(многоядерника) выбиралась максимальная.
                  То что maxt не определена изначально, признаю, с моей стороны это халатность.

                  Всем тем кто откликнулся огромнейшее СПАСИБО!!!

                  Уважаемый aib !!!! аплодирую стоя
                  Last edited by mda.kem; 04-04-2014, 07:00.

                  Comment

                  • mda.kem
                    Junior Member
                    • Mar 2014
                    • 17

                    #24
                    Однако, вопрос:

                    Почему значок градуса не выводится при запуске скрипта агентом?

                    Comment

                    • aib
                      Senior Member
                      • Jan 2014
                      • 1615

                      #25
                      Originally posted by mda.kem
                      Однако, вопрос:

                      Почему значок градуса не выводится при запуске скрипта агентом?
                      чисто в порядке бреда - когда запускаешь ручками, используется одна Locale, а когда из агента - другая...
                      Sincerely yours,
                      Aleksey

                      Comment

                      • mda.kem
                        Junior Member
                        • Mar 2014
                        • 17

                        #26
                        У меня есть еще пару вопросов возможно не по теме.
                        1. Как будет правильней? Использовать скрипт для получения данных(вроде того, что мы рассматривали выше)
                        и запрашивать его на исполнение с сервера посредством ключа -
                        Code:
                         system.run[/etc/zabbix/script/cpu_t high,wait]
                        или же вставлять его в пользовательский параметр на стороне агента
                        Code:
                         UserParameter=cpu_current, sensors | awk -v maxt=0 -F "+" '/Core|CPU Temperature/ {split($2,a,"."); if (maxt<a[1]) {maxt=a[1]}}; END {print maxt}'
                        UserParameter=cpu_high, sensors | awk -F "+" '/Core|CPU Temperature/ {split($3,a,".")}; END {print a[1]}'
                        ну или так
                        Code:
                         UserParameter=cpu_t[*],sensors | awk -v k=$1 -v maxt=0 -F "+" '/Core|CPU Temperature/ {if(k=="current") {split($2,a,".")} else {if(k=="high") {split($3,a,".")}}; if(maxt<a[1]) {maxt=a[1]}}; END {print maxt}'
                        2. В каких случаях использовать активный проверки а в каких пассивные в отношении ПК.

                        Comment

                        • yukra
                          Senior Member
                          • Apr 2013
                          • 1359

                          #27
                          Originally posted by aib
                          чисто в порядке бреда - когда запускаешь ручками, используется одна Locale, а когда из агента - другая...
                          Не обязательно локаль. Еще может зависить от того, куда именно мы пишем: на стандартный вывод или на вход другой программе:
                          Code:
                          yukra@yukra-ThinkPad ~/SOAP $ ls
                          request.soap  s.sh
                          yukra@yukra-ThinkPad ~/SOAP $ ls | cat
                          request.soap
                          s.sh

                          Comment

                          • aib
                            Senior Member
                            • Jan 2014
                            • 1615

                            #28
                            Судя по цитате из log-файла, постоянно используется один и тот-же скрипт
                            Но что-то меняется и "съедает" значок °
                            А иногда - оставляет...
                            Sincerely yours,
                            Aleksey

                            Comment

                            • yukra
                              Senior Member
                              • Apr 2013
                              • 1359

                              #29
                              Originally posted by mda.kem
                              У меня есть еще пару вопросов возможно не по теме.
                              1. Как будет правильней?
                              2. В каких случаях использовать активный проверки а в каких пассивные в отношении ПК.
                              1. - UserParameter. Этот вариант не заставляет вас включать удаленное выполнение команд (кто-то получает доступ к вашему zabbix серверу. Если UserParameter то он все видит, но ничего сделать не может, если system.run, то он получает доступ к хостам с правами пользователя, от которого запущен агент.
                              2. Пассивные: сервер ходит к агенту. Активные: агент приходит к серверу, получает список нужных проверок и по своей инициативе пуляет их в сторону сервера.

                              Если у нас ПК - пользовательские машины (выключаются на ночь, могут 2 недели не использоваться потому что человек в отпуске и тп) то я бы выбрал активные (что бы сервер лишний раз не ходил к выключенным машинам).

                              Comment

                              • mda.kem
                                Junior Member
                                • Mar 2014
                                • 17

                                #30
                                Ну.... подведем итоги.
                                Проблема при которой перестает выводится значение границы высокой температуры найдена, обход этой проблемы внедрен(6 дней полет нормальный), вопросов больше нет... пока... так что тему можно закрывать.

                                P.s. Еще раз всех благодарю за участие.

                                Comment

                                Working...