Debian 9のSMARTモニタリングをSlackに統合できますか?

Debian 9のSMARTモニタリングをSlackに統合できますか?

最近、ホームサーバーにDebian 9をインストールし、HDDでSMARTチェックを実行し、問題が発生した場合は警告を受けたいと思いました。理想的には、Slackインスタンスがスマートフォンに接続されていて非常に便利だと思うので、通知が私のSlackインスタンスに入るようにしたいと思います(すでにUPSに関する通知があり、pingが失敗します)。

smartd / smartctlを調べてみましたが、Slackに通知を送信する方法が見つからないようです。

通知を処理するためにどこかでbashスクリプトを呼び出し、Slackに通知を送信するために別の(Python)スクリプトを呼び出すことができるようにしたいです。

(編集:明確にするために、Slack通知用のPythonスクリプトはすでに他の場所で使用されているので大丈夫です。)

編集する 以下の両方のソリューションはテスト済みで、私にとってはうまくいきます。何らかの理由でSlackが機能しない場合は、私を保護してくれるので、メール+スクリプトソリューションを選択しました。しかし、両方とも信頼できる環境変数を追加してくれたRalfFriedlに感謝します。

答え1

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

これはsda、デバイスごとに1行を追加することです。または、検出されたすべてのデバイスを監視するには、/dev/sdaに置き換えますDEVICESCAN

完了するまで/my/script中断されますので、時間がかからないことを確認してください。smartd

/my/scriptさまざまな環境変数を使用して実行されます。探す。man smartd.confたとえば、SMARTD_DEVICE他の変数は次のようになります。 " SMARTD_FULLMESSAGEsmartdの完全な電子メール警告メッセージ文字列の内容に設定します。"

メッセージングをテストするには、次の一時設定ファイルでsmartdを起動してテストメッセージを送信します。

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

私は上記の何もテストしませんでした。-dtestを使用して、特定のオプションを含める必要があるかどうかをすでに決定しているとしますsmartctl。 (DEVICESCANと対話する方法がわかりません-d)。また、基本テストが-aデバイスに必要なものと一致すると仮定します。たとえば、長いマニュアルページに記載されている1つは、不良セクタを再割り当てした後に、一部のドライブが誤った肯定を示すことです。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で印刷されたほとんどの情報が含まれていますが、短い1行形式です。このデバイス情報は、smartd の起動時にも記録されます。文字列に空白文字が含まれており、引用されていません。

SMARTD_FAILTYPE
警告やメッセージメールの理由を教えてください。可能な値と意味は次のとおりです。EmailTest
:電子メールテストメッセージ。
ステータス:SMARTステータスは差し迫ったエラーを示します。
使用法:使用法属性が失敗しました。
セルフテスト:セルフテストの失敗回数が増えます。
ErrorCount:ATAエラーログのエラー数が増加しました。
CurrentPendingSector:複数のディスクセクタのうちの1つを読み取ることができず、再割り当てとしてマークされました(スペアセクタに置き換えます)。
OfflineUn CorrectableSector:オフラインテストまたはセルフテスト中に1つ以上のディスクセクタを読み取ることができません。
温度:温度が臨界限界に達しました(-Wディレクティブを参照)。
FailedHealthCheck:SMARTステータスコマンドが失敗しました。
FailedReadSmartData:SMART属性データを読み取るコマンドが失敗しました。
FailedReadSmartErrorLog:SMARTエラーログを読み取るコマンドが失敗しました。
FailedReadSmartSelfTestLog:SMARTセルフテストログを読み取るコマンドが失敗しました。
FailedOpenDevice:デバイスのopen()コマンドが失敗しました。

SMARTD_住所
「-m」コマンドのアドレス・パラメーターADDによって決定されます。 ADD がある場合、SMARTD_ADDRESS は設定されません。それ以外の場合は、ADDパラメータによって提供され、カンマはスペースで置き換えられたコンマで区切られたEメールアドレスのリストに設定されます。[Eメール保護]根)。複数の電子メールアドレスが指定されている場合、文字列には空白文字が含まれ、引用符で囲まれないため、シェルスクリプトで使用するには二重引用符で囲む必要があります。

SMARTD_MESSAGE
smartdの1つの文の要約警告電子メールメッセージ文字列に設定します。メッセージ文字列には空白文字が含まれており、引用しません。したがって、シェルスクリプトで$ SMARTD_MESSAGEを使用するには、二重引用符で囲む必要があります。

SMARTD_FULLMESSAGE
smartdの完全な電子メール警告メッセージ文字列の内容に設定します。メッセージ文字列には空白とキャリッジ戻り文字が含まれており、引用しません。したがって、シェルスクリプトで$ SMARTD_FULLMESSAGEを使用するには、二重引用符で囲む必要があります。

SMARTD_TFIRST
このタイプの最初の問題が報告された日時を提供するテキスト文字列。テキスト文字列には空白文字が含まれ、改行はなく、引用符はありません。例:2003年2月9日日曜日14:58:19 CST

SMARTD_TFIRSTEPOCH
SMARTD_TFIRST の unix epoch (1970 年 1 月 1 日以降の秒数) の定数です。

SMARTD_PREVCNT
以前に送信されたメッセージの数を指定する整数です。最初のメッセージの場合は「0」に設定されます。

SMARTD_NEXTDAYS
次のメッセージが送信されるまでの日数を指定する整数。 「-M Once」では空、「-M daily」では「1」に設定されています。

詳しくは、およびman smartdを参照してくださいman smartd.conf

関連情報