Ad Widget

Collapse

Мониторинг параметров smart

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Egor4ik
    Member
    • May 2012
    • 68

    #31
    Zabbix 2.0 + smart

    У меня получилось так:
    1) Устнавливаем smartmontools, sudo (проверить поддержку /etc/sudoers.d/), zabbix_agent (любой версии)

    2) /etc/sudoers.d/zabbix
    Code:
    Cmnd_Alias      SMART = /usr/sbin/smartctl
    
    zabbix ALL=NOPASSWD: SMART
    3) zabbix_agentd.conf
    Code:
    UserParameter=custom.get[*],/opt/zsmart.sh $1 $2 $3
    4) Файл zsmart.sh, в котором и обнаружение и коллектор, шаблон для Zabbix Server 2.0, триггеры (взял из этой ветки форума - писали ранее). Не исключено что придётся что-то поправить вам.
    zsmart.zip

    Заменить строку в файле zsmart.sh:
    Code:
    CACHE="/tmp/zsmart-status.cache"
    на следующие 2:
    Code:
    HDD_NAME=`echo $3|sed "s/\/dev\///"`                                                                                                                              
    CACHE="/tmp/zsmart-status-$HDD_NAME.cache"
    5) Регулярка в Zabbix Server 2.0:
    Code:
    Physical HDD discovery filter	1	» 	^(scsi-SATA)	[Результат ИСТИНА]
    Last edited by Egor4ik; 16-06-2013, 16:34.

    Comment

    • v.goncharov
      Member
      • Mar 2013
      • 58

      #32
      К сожалению нельзя, они на Windows.

      НО!
      # smartctl --scan
      /dev/sda -d scsi # /dev/sda, SCSI device
      /dev/sdb -d scsi # /dev/sdb, SCSI device
      /dev/sdc -d scsi # /dev/sdc, SCSI device
      /dev/sdd -d scsi # /dev/sdd, SCSI device
      # ls -L /dev/disk/by-id/ | grep -v part
      ata-ST4000NM0033-9ZM170
      ata-ST4000NM0033-9ZM170
      ata-ST4000NM0033-9ZM170
      ata-ST4000NM0033-9ZM170
      dm-name-7-lv_data
      dm-uuid-LVM-Z
      md-name-7:0
      md-name-7:1
      md-name-7:2
      md-name-7:3
      md-uuid
      md-uuid
      md-uuid
      md-uuid
      scsi-SATA_ST4000NM0033
      scsi-SATA_ST4000NM0033
      scsi-SATA_ST4000NM0033
      scsi-SATA_ST4000NM0033
      usb-JetFlash_Transcend_16GB
      wwn-0x5000c
      wwn-0x5000c
      wwn-0x5000c
      wwn-0x5000c
      (из выдачи стер серийники устройств)
      Last edited by v.goncharov; 14-06-2013, 17:57.

      Comment

      • gescheit
        Senior Member
        • Jul 2007
        • 156

        #33
        Для себя сделал вывод что удобнее всего делать --scan-open(--scan юзать плохо, так как может не тот тип выбрать для устройства) с последующим запуском smartctl на каждую строку. Дальше просто парсить exit-статус. Отлично работает на FreeBSD и Linux.

        Comment

        • vectorman
          Junior Member
          • Aug 2013
          • 7

          #34
          Originally posted by v.goncharov
          Скрипт обнаружения и опроса метрик
          (размещается на zabbix-сервере)

          В агенте два ключа, как писалось выше:
          smarttest[*],smartctl $1 $2
          smart.discovery,smartctl --scan
          Больше на стороне проверяемого сервера ничего не требуется, все остальное только на стороне сервера.

          В шаблоне одно обнаружение (внешняя проверка), SMART.sh[{HOST.IP}]
          Все элементы данных с тем же ключем SMART.sh, но параметры:
          SMART.sh[{HOST.IP},{#HDD},METRIC,необязательный параметр на получение RAWdata]
          Подскажите, что поправить чтоб скрипт заработал, счас в логе сервера пишет /usr/share/zabbix/externalscripts/SMART.sh: line 10: [: zabbix_get -s $SRV -k "smarttest[-A,\"$i\"]" | sed 1,7d | wc -l: integer expression expected
          прототип элемента данных выглядит так SMART.sh[{HOST.IP},{#HDD},METRIC,Power_On]

          Comment

          • v.goncharov
            Member
            • Mar 2013
            • 58

            #35
            Originally posted by vectorman
            Подскажите, что поправить чтоб скрипт заработал, счас в логе сервера пишет /usr/share/zabbix/externalscripts/SMART.sh: line 10: [: zabbix_get -s $SRV -k "smarttest[-A,\"$i\"]" | sed 1,7d | wc -l: integer expression expected
            прототип элемента данных выглядит так SMART.sh[{HOST.IP},{#HDD},METRIC,Power_On]
            А zabbix_get что-нибудь вообще возвращает? Если, например, запустить ее из командной строки с реальными данными? ($SRV - IP адрес сервера, $i - название устройства (/dev/sda)

            Должен выводить полную таблицу SMART.

            zabbix_get -s $SRV -k "smarttest[-A,\"$i\"]" | sed 1,7d | wc -l

            Вот в этой строчке точно не пропущены апострофы (которые на букве ё на английской раскладке)?

            Очень на это похоже. И bash ее парсит не как единое целое, а пытается разобрать на элементы, и не находит тип данных integer.

            Comment

            • vectorman
              Junior Member
              • Aug 2013
              • 7

              #36
              да, действительно апострофы пропущены были
              но теперь проблема другая, не могу элементы данных создать
              SMART.sh[{HOST.IP},"/dev/ada1",HEALTH] возвращает 1, это понятно
              а как например время наработки в часах увидеть
              SMART.sh[{HOST.IP},"/dev/ada1",METRIC,Power_On] - ничего не дает
              SMART.sh[{HOST.IP},"/dev/ada1",Power_On] - тоже ничего не выводит

              Comment

              • v.goncharov
                Member
                • Mar 2013
                • 58

                #37
                Originally posted by vectorman
                да, действительно апострофы пропущены были
                но теперь проблема другая, не могу элементы данных создать
                SMART.sh[{HOST.IP},"/dev/ada1",HEALTH] возвращает 1, это понятно
                а как например время наработки в часах увидеть
                SMART.sh[{HOST.IP},"/dev/ada1",METRIC,Power_On] - ничего не дает
                SMART.sh[{HOST.IP},"/dev/ada1",Power_On] - тоже ничего не выводит
                Все просто. Пример вывода smartctl:
                ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
                1 Raw_Read_Error_Rate 0x000f 113 099 006 Pre-fail Always - 54008757
                3 Spin_Up_Time 0x0003 097 097 000 Pre-fail Always - 0
                4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 56
                5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
                7 Seek_Error_Rate 0x000f 090 060 030 Pre-fail Always - 956289989
                9 Power_On_Hours 0x0032 063 063 000 Old_age Always - 32638
                10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
                12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 28
                183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0
                184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
                187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
                188 Command_Timeout 0x0032 100 094 000 Old_age Always - 56
                189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0
                190 Airflow_Temperature_Cel 0x0022 067 060 045 Old_age Always - 33 (Min/Max 28/36)
                194 Temperature_Celsius 0x0022 033 040 000 Old_age Always - 33 (0 18 0 0 0)
                195 Hardware_ECC_Recovered 0x001a 044 026 000 Old_age Always - 54008757
                197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
                198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
                199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
                240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 35673998393275
                241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 769140475
                242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 2628539372
                Соответственно, для параметра PowerOn:
                SMART.sh[{HOST.IP},"/dev/ada1",Power_On_Hours]
                т.е. пишем метрику ПОЛНОСТЬЮ. и так с остальными. Например Reallocated_Sector_Ct, или Start_Stop_Count


                Хотя, конечно, надо было сразу скрипт делать не с именем метрики, а с номером... Как-нибудь на досуге исправлю.

                Comment

                • vectorman
                  Junior Member
                  • Aug 2013
                  • 7

                  #38
                  а как быть с устройствами "/dev/csmi0,0" ? такой параметр передается как "/dev/csmi0" соответственно smartctl его не понимает. хочется сделать один шаблон zabbix_agentd.conf для серверов с виндой, независимо от систем хранения.

                  Comment

                  • v.goncharov
                    Member
                    • Mar 2013
                    • 58

                    #39
                    Originally posted by vectorman
                    а как быть с устройствами "/dev/csmi0,0" ? такой параметр передается как "/dev/csmi0" соответственно smartctl его не понимает. хочется сделать один шаблон zabbix_agentd.conf для серверов с виндой, независимо от систем хранения.
                    Именно поэтому в скрипте обнаружения запрос выглядит как "zabbix_get -s $SRV -k "smarttest[-A,\"$HDD\"]"
                    где $HDD - имя жесткого диска, взятое в экранированные кавычки.

                    В результате в zabbix в элементе данных будет значится SMART.sh[{HOST.IP},"/dev/csmi0,0",HEALTH] (например)
                    Last edited by v.goncharov; 20-08-2013, 09:08.

                    Comment

                    • vectorman
                      Junior Member
                      • Aug 2013
                      • 7

                      #40
                      Originally posted by v.goncharov
                      Именно поэтому в скрипте обнаружения запрос выглядит как "zabbix_get -s $SRV -k "smarttest[-A,\"$HDD\"]"
                      где $HDD - имя жесткого диска, взятое в экранированные кавычки.

                      В результате в zabbix в элементе данных будет значится SMART.sh[{HOST.IP},"/dev/csmi0,0",HEALTH] (например)
                      я понимаю, но не работает у меня так почему-то, насколько я понял smartctl на целевой машине при этом получает только /dev/csmi0.
                      заббикс сервер 2.0 Appliance используется, агент 2.0.2, обновить агента попробую.

                      Comment

                      • vectorman
                        Junior Member
                        • Aug 2013
                        • 7

                        #41
                        ключ элемента данных при этом такой SMART.sh[{HOST.IP},"/dev/csmi0,0",Current_Pending_Sector]
                        в ошибке пишет Received value [] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]

                        Comment

                        • grommir
                          Senior Member
                          • Mar 2013
                          • 134

                          #42
                          обнаружение по этому скрипту у меня не отрабатывал (из-за лишней запятой после последнего диска), поэтому я слегка его дописал. Если кому интересно:


                          Code:
                          #!/bin/bash
                          
                          SRV=$1
                          n=0
                          
                          # LLD Список HDD
                          
                          
                          for i in `zabbix_get -s $SRV -k 'smart.discovery' | awk '{print $1}'`
                          do
                            if [ `zabbix_get -s $SRV -k "smarttest[-A,\"$i\"]" |  sed 1,7d | wc -l` -gt 0 ]
                             then
                              n=$[$n+1]
                               h[$n]=$i
                             fi
                          done
                          
                          if [ -z ${h[1]} ]
                              then
                              echo "smart not supported"
                              else
                          i=1
                          j=$[$n-1]
                          echo "{ \"data\":
                          ["
                              while [ $i -le $j ]
                              do
                              echo "{ \"{#HDD}\":\"${h[$i]}\" } ,"
                              i=$[$i+1]
                              done
                          echo "{ \"{#HDD}\":\"${h[$i]}\" } "
                          echo " ] } "
                          fi
                          Last edited by grommir; 21-02-2014, 12:39.

                          Comment

                          • v.goncharov
                            Member
                            • Mar 2013
                            • 58

                            #43
                            Да, в версии 2.2 допили JSON. Теперь ругается на отсутствие запятой в конце, пришлось переписывать все скрипты обнаружения (overоченьмного)

                            Comment

                            • askkostya
                              Junior Member
                              • Mar 2014
                              • 7

                              #44
                              Здравствуйте.
                              Подскажите пожалуйста а как передать параметры в случае если используется Intel Raid скажем, но не суть важна. Как передать несколько параметров агенту если необходимо передать например csmi0,0

                              Пробовал $1 взять в кавычки

                              UserParameter=uHDD.sn.[*],for /F "tokens=3" %a in ('C:\zabbix\smartctl.exe -i "$1" ^| find "Serial Number"') do @echo %a
                              не получается

                              Пробовал со стороны сервера в настройках элемента данных сделать вот так uHDD.sn.["csmi0,0"] результат аналогичный

                              При этом на клиенте из командной строки отлично отрабатывает
                              for /F "tokens=3" %%a in ('C:\zabbix\smartctl.exe -i "csmi0,0" ^| find "Serial Number"') do @echo %%a

                              Comment

                              • rostik
                                Junior Member
                                • Mar 2014
                                • 3

                                #45
                                Intel Raid, /dev/csmi2,0

                                Originally posted by askkostya
                                Здравствуйте.
                                Подскажите пожалуйста а как передать параметры в случае если используется Intel Raid скажем, но не суть важна. Как передать несколько параметров агенту если необходимо передать например csmi0,0
                                ....
                                При этом на клиенте из командной строки отлично отрабатывает
                                for /F "tokens=3" %%a in ('C:\zabbix\smartctl.exe -i "csmi0,0" ^| find "Serial Number"') do @echo %%a
                                Добрый день.

                                ситуация аналогична. Как правильно передать параметры /dev/csmi2,0?

                                Использовал ключ данных: uHDD["/dev/csmi2,0",Reallocated_Sector_Ct]
                                В настройках агента: UserParameter=uHDD[*],for /F "tokens=10" %a in ('C:\"Program Files (x86)"\smartmontools\bin\smartctl.exe -a $1 ^| findstr $2') do @echo %a

                                Причем с командной строки все прекрасно отрабатывает, а вот на сервере пишет что Received value [] is not suitable for value type [Numeric (unsigned)] and data type [Decimal]

                                забикс агент 2.0.4
                                забикс сервер 2.2.0

                                Comment

                                Working...