・エージェント側の 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 深刻度:任意