Zabbix で smartctl の値を監視する

・エージェント側の smartctl で値を取得できることを確認

# smartctl -A /dev/sda | grep Temperature | awk '{print $10}'
# smartctl -A /dev/sda | grep Offline_Uncorrectable | awk '{print $10}'
# smartctl -A /dev/sda | grep Reallocated_Sector_Ct | awk '{print $10}'
# smartctl -A /dev/sda | grep Current_Pending_Sector | awk '{print $10}'

・エージェント側の zabbixユーザで、リモート/パスワードなしで sudo smartctl が実行できるように設定変更

# visudo
Defaults:zabbix !requiretty
※zabbixユーザにtty接続なしで sudo 実行を許可する

zabbix  ALL=(ALL) NOPASSWD: /usr/sbin/smartctl -A /dev/sd?
※zabbixユーザにパスワードなしで sudo smartctl を実行することを許可する

・エージェント側でzabbixユーザパラメータ設定

# vi /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
UserParameter=hdd.smart[*],sudo smartctl -A /dev/$1 | grep $2 | awk '{print $$10}'
※$$10 は $ のエスケープ処理

Zabbixバージョンによってはawkが動かないので、その場合は下記を使う。xargsはtrim用途。
UserParameter=hdd.smart[*],sudo smartctl -A /dev/$1 | grep $2 | xargs | sed 's/[\t ]\+/\t/g' | cut -f10


# systemctl restart zabbix-agent.service

・値取得テスト

エージェント側で実施
# zabbix_agentd -t hdd.smart[sda,Temperature]

サーバ側で実施
# zabbix_get -s <エージェントのIPアドレス> -k hdd.smart[sda,Temperature]

・Zabbix管理画面でアイテム設定

名前:$1 - Current_Pending_Sector
タイプ:Zabbixエージェント
キー:hdd.smart[sda,Current_Pending_Sector]

・Zabbix管理画面でトリガー設定

名前:sda Pre-fail
条件式
{host:hdd.smart[sda,Offline_Uncorrectable].last()}>0 | 
{host:hdd.smart[sda,Reallocated_Sector_Ct].last()}>0 |
{host:hdd.smart[sda,Current_Pending_Sector].last()}>0
深刻度:任意