Go to content Go to menu Go to search

ZABBIX: мониторим состояние 3Ware RAID при помощи smartctl и tw_cli

Вступление

Имеется древний сервер на базе AMD Opteron, с hardware-raid 3Ware на борту.
Задача – мониторить состояние массива RAID (виртуальных дисков) и состояние физических дисков.

Для получения статуса будем использовать следующие утилиты командной строки:

  • smartctl для определения состояния физических дисков
  • tw_cli для определения состояния виртуальных дисков

Реализация

Установка драйверов 3dm2 и 3DM2_CLI остается за пределами статьи.

Настраиваем мониторинг через tw_cli

Для начала нам нужно разобраться какие и сколько физических дисков установлено, какие raid массивы сконфигурированы

Смотрим контроллеры в системе:

# tw_cli info

Ctl   Model        (V)Ports  Drives   Units   NotOpt  RRate   VRate  BBU
------------------------------------------------------------------------
c0    9550SX-8LP   8         8        2       0       1       1      OK
Смотрим информацию по дискам для контроллера:

# tw_cli info c0

Unit  UnitType  Status         %RCmpl  %V/I/M  Stripe  Size(GB)  Cache  AVrfy
------------------------------------------------------------------------------
u0    RAID-10   VERIFY-PAUSED  -       31%     64K     596.025   ON     ON     
u1    RAID-10   VERIFY-PAUSED  -       11%     64K     1862.62   ON     ON

Port   Status           Unit   Size        Blocks        Serial
---------------------------------------------------------------
p0     OK               u0     298.09 GB   625142448     WD-WCAPD3238373     
p1     OK               u0     298.09 GB   625142448     WD-WCAPD3238175     
p2     OK               u1     931.51 GB   1953525168    WD-WCAW36356801     
p3     OK               u0     298.09 GB   625142448     WD-WCAPD2763550     
p4     OK               u0     298.09 GB   625142448     WD-WCAPD3238222     
p5     OK               u1     931.51 GB   1953525168    WD-WCAW36356733     
p6     OK               u1     931.51 GB   1953525168    WD-WCAW36252351     
p7     OK               u1     931.51 GB   1953525168    WD-WCAW36329061

Name  OnlineState  BBUReady  Status    Volt     Temp     Hours  LastCapTest
---------------------------------------------------------------------------
bbu   On           Yes       OK        OK       OK       255    25-Jan-2012

Нас будет интересовать колонка Status.

Для получения статуса raid, дисков или батареи используются следующие команды:

tw_cli /c0 show unitstatus
tw_cli /c0 show bpustatus
tw_cli /c0 show drivestatus

Пользовательский параметр назовем raid_status[*] где в качестве параметра ключа будет передаваться unit, drive или bbu.

Для вычисления значений будем использовать такую строчку:

/usr/local/bin/tw_cli /c0 show $1status | awk '(! /^[[:space:]]*$/) && (NR>3)  {print $2 $3 $4}' | grep -v OK | grep -v VERIFY | wc -l

Эта команда отбрасывает пустые строки, отбрасывает первые три строки заголовка, и проверяет есть ли в полях 2, 3, 4 слово OK, если слова нет, то выдает количество таких строк.

Мониторинг через smartctl

Параметры дисков нужно смотреть вот примерно такой вот командой:

smartctl -a -d 3ware,0 /dev/twa0

Где 3ware,0 – это физический диск, twa0 – это контроллер.

Эта команда выведет все показатели smart. Нас интересует по сути только информация об общем состоянии диска и количество сбойных секторов:

# smartctl -a -d 3ware,0 /dev/twa0 | grep overall-health | awk '{print $6}'
PASSED

# smartctl -a -d 3ware,0 /dev/twa0 | grep Reallocated_Sector_Ct | awk '{print $10}'
0

Пользовательские параметры назовем smart_health[*] и smart_reallocated_sectors_count[*], где “*” – номер диска.

А теперь самое интересное.. для доступа к tw_cli и /dev/twa0 нужно обладать правами root. Поскольку мы не хотим, что бы zabbix имел доступ к этим жизненно важным файлам в системе, то будем использовать zabbix_trapper (запускать по cron скрипт, который будет передавать значения параметров в zabbix-сервер).

Итак, сделаем два скрипта:

/etc/zabbix/zabbix_raid_health.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#! /bin/bash

zabbix_sender='/usr/bin/zabbix_sender'
conf='/etc/zabbix/zabbix_agentd.conf'
tw_cli='/usr/local/bin/tw_cli'

controller='c0'

params="unit drive bbu"
for param in $params; do
status=`$tw_cli /$controller show $param"status"| awk '(! /^[[:space:]]*$/) && (NR>3)  {print $2 $3 $4}' | grep -v OK | grep -v VERIFY | wc -l`
$zabbix_sender -c $conf -k raid_status[$param] -o $status
done

/etc/zabbix/zabbix_smartctl.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#! /bin/bash

zabbix_sender='/usr/bin/zabbix_sender'
conf='/etc/zabbix/zabbix_agentd.conf'
smartctl='/usr/sbin/smartctl'

controller='twa0'

disks="0 1 2 3 4 5 6 7"
for disk in $disks; do
status=`smartctl -a -d 3ware,$disk /dev/$controller | grep overall-health | awk '{print $6}'`
reallocated_sectors=`smartctl -a -d 3ware,$disk /dev/$controller | grep Reallocated_Sector_Ct | awk '{print $10}'`
$zabbix_sender -c $conf -k smart_health[$disk] -o $status
$zabbix_sender -c $conf -k smart_reallocated_sectors_count[$disk] -o $reallocated_sectors
done

запихиваем эти скрипты в cron /etc/cron.d/zabbix (запускать каждый час):

echo "1 */1 * * * root /etc/zabbix/zabbix_raid_health.sh  > /dev/null 2>&1" >> /etc/cron.d/zabbix
echo "2 */1 * * * root /etc/zabbix/zabbix_smartctl.sh  > /dev/null 2>&1" >> /etc/cron.d/zabbix

Далее импортируем шаблон Template_3ware_RAID.xml в zabbix и подключаем к хосту.


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved