是否可以将 Debian 9 的 SMART 监控集成到 Slack 中?

是否可以将 Debian 9 的 SMART 监控集成到 Slack 中?

我最近在家庭服务器上设置了 Debian 9,我想对我的 HDD 运行一些 SMART 检查,然后在出现任何问题时收到警报。理想情况下,我希望警报进入我的 Slack 实例,因为我已将其连接到我的智能手机,并且发现它非常有用(我已经有针对我的 UPS 的警报,并且 ping 失败)。

我一直在研究 smartd/smartctl,但似乎找不到将通知发送到 Slack 的方法。

我希望能够在某处调用一些 bash 脚本来处理通知并调用另一个(python)脚本将通知发送到 Slack。

(编辑:只是为了澄清我已经有了用于 Slack 通知的 Python 脚本,因为我在其他地方使用它,所以我们在那里很好)

编辑 以下两种解决方案都经过测试并且对我来说效果很好。我选择了邮件+脚本解决方案,因为它可以在 Slack 由于某种原因无法工作的情况下保护我,但两者都很可靠,我感谢 RalfFriedl 为我添加了环境变量。

答案1

# /etc/smartd.conf
/dev/sda -a -m <nomailer> -M exec /my/script

这是为了sda.每个设备添加一行。或者,替换/dev/sdaDEVICESCAN以监视所有检测到的设备。

确保/my/script不会花费太长时间,因为它会挂起smartd直到完成。

/my/script将使用各种环境变量运行。搜索。man smartd.confSMARTD_DEVICE例如另一个变量:“SMARTD_FULLMESSAGE设置为来自 smartd 的整个电子邮件警告消息字符串的内容。”

要测试消息传递,请使用此临时配置文件启动 smartd,以发送测试消息:

# /etc/smartd.conf
/dev/sda -a -m <nomailer> -M exec /my/script -M test

我没有测试过以上任何一项。我假设您已经-d通过使用测试确定是否需要包含特定选项smartctl。 (我不知道如何-d和DEVICESCAN交互)。我还假设默认测试-a与您的设备所需的相匹配。例如,冗长的手册页中提到的一件事是,某些驱动器在重新分配坏扇区后会显示误报:https://superuser.com/a/539040/110495

答案2

如果您想smartd调用脚本,请参阅选项-w

-w 路径,--warnexec=路径

当 smartd 需要发送警告消息时,运行可执行路径而不是默认脚本。 PATH 必须指向可执行二进制文件或脚本。默认脚本是/etc/smartd_warning.sh.

该脚本通常用于发送电子邮件。它是用这些环境变量调用的:

SMARTD_MAILER
设置为 -M exec 的参数(如果存在),否则设置为“mail”(示例:/usr/local/bin/mail、mail)。

SMARTD_DEVICE
设置为设备路径(例如:/dev/sda)。

SMARTD_DEVICETYPE
设置为“-d”指令指定的设备类型,如果没有,则设置为“auto”。

SMARTD_DEVICESTRING
设置为设备描述。它以 SMARTD_DEVICE 开头,后面可能是可选的控制器标识(例如:/dev/sda [SAT])。该字符串可能包含空格且不带引号。

SMARTD_DEVICEINFO
设置为设备识别信息。它包含 smartctl -i 打印的大部分信息,但使用简短的单行格式。 smartd 启动时也会记录此设备信息。该字符串包含空格字符且未加引号。

SMARTD_FAILTYPE
给出警告或消息电子邮件的原因。它采用的可能值及其含义是:
EmailTest:这是电子邮件测试消息。
健康状况:SMART 健康状况表明即将发生故障。
用法:用法属性失败。
自检:自检失败次数增加。
ErrorCount:ATA 错误日志中的错误数量已增加。
CurrentPendingSector:多个磁盘扇区之一无法读取并被标记为重新分配(用备用扇区替换)。
OfflineUn CorrectableSector:在离线测试或自检过程中,无法读取一个或多个磁盘扇区。
温度:温度达到临界极限(参见-W指令)。
FailedHealthCheck:SMART 健康状态命令失败。
FailedReadSmartData:读取 SMART 属性数据的命令失败。
FailedReadSmartErrorLog:读取 SMART 错误日志的命令失败。
FailedReadSmartSelfTestLog:读取SMART自检日志命令失败。
FailedOpenDevice:设备的 open() 命令失败。

SMARTD_地址
由“-m”指令的地址参数 ADD 确定。如果 ADD 为 ,则未设置 SMARTD_ADDRESS。否则,它将设置为参数 ADD 给出的电子邮件地址的逗号分隔列表,其中逗号替换为空格(例如:[电子邮件受保护]根)。如果给出多个电子邮件地址,则该字符串将包含空格字符并且不带引号,因此要在 shell 脚本中使用它,您可能需要将其用双引号引起来。

SMARTD_MESSAGE
设置为来自 smartd 的一句话摘要警告电子邮件消息字符串。该消息字符串包含空格字符且未加引号。因此,要在 shell 脚本中使用 $SMARTD_MESSAGE,您可能应该将其用双引号引起来。

SMARTD_FULLMESSAGE
设置为来自 smartd 的整个电子邮件警告消息字符串的内容。该消息字符串包含空格和回车字符,并且不带引号。因此,要在 shell 脚本中使用 $SMARTD_FULLMESSAGE,您可能应该将其用双引号引起来。

SMARTD_TFIRST
是一个文本字符串,给出报告此类第一个问题的时间和日期。该文本字符串包含空格字符且不包含换行符,并且未加引号。例如:2003 年 2 月 9 日星期日 14:58:19 CST

SMARTD_TFIRSTEPOCH
是一个整数,它是 SMARTD_TFIRST 的 unix 纪元(自 1970 年 1 月 1 日以来的秒数)。

SMARTD_PREVCNT
是一个整数,指定之前发送的消息数。对于第一条消息,它设置为“0”。

SMARTD_NEXTDAYS
是一个整数,指定发送下一条消息之前的天数。它在“-M 一次”上设置为空,在“-M 每天”上设置为“1”。

有关详细信息,请参阅man smartdman smartd.conf

相关内容