ウェブサイト検索

サーバーのディスクスペースが不足している場合のSlack通知の設定方法


おそらく、サーバーのディスクスペースが不足しそうな時期を知りたいでしょう。簡単な解決策は、毎日実行されるcronジョブを設定し、問題が発生した場合にSlackで通知を送信することです。

dfコマンドでディスクスペースを取得する

Linuxでディスク容量を表示するためのコマンドはdf -hです(人間が読みやすい形式で出力されます):

これは、マウントされた各ファイルシステム、物理ディスクのサイズ、および使用されている量を一覧表示します。

出力を特定のファイルシステム(この場合はルート)に絞り込むには、次のコマンドを実行できます。

df /

しかし、これはヘッダー行を返しますので、それをフィルタリングすることができます。

grep

:

それから、5番目の列(パーセンテージ)を選択します。

awk

パーセント記号を削除し、

sed

これにより、メインディスクがどれだけ満杯であるかを表す数字を返すコマンドが1つ得られます:

df / | grep / | awk '{ print $5}' | sed 's/%//g'

この場合、"39"が返されます。このコマンドが監視するディスクを変更したい場合は、最初のdfステートメントを編集する必要があります。

コマンドラインのSlack通知を設定する

Slackの通知を動作させる最も簡単な方法は、ウェブフックを使用することです。ウェブフックを使用すると、ボットユーザーやOAuthを管理することなく、URLに対してPOSTリクエストとして通知を送信できます。メッセージをJSON形式に整形し、curlを使用してPOSTできます。

SlackのAPIポータルから新しいアプリを作成し、追加するワークスペースを選択して、名前を付けます。これはメッセージが届いたときに表示されるものなので、面白い名前を選んでください。

アプリを取得したら、「機能と機能の追加」の下にある「Incoming Webhooks」タブを見つけてください。

これにより、新しいウェブフックを作成でき、どのチャンネルに投稿するかを選択する必要があります。ボット通知用の新しいチャンネルを作成するか、自分のDMに追加することができます。

URLを取得したら、サンプルリクエストをコピーして、それが機能するか確認してください。選択したチャンネルに「Hello World!」と表示されるはずです。それが表示されれば、Slackは正常に動作しています。

全てをまとめる

サーバーが実際に通知を送るために、毎日実行できる cron ジョブで実行するスクリプトを作成します。通知コマンドを除いたスクリプトの骨組みは次のとおりです:

#!/bin/bash

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

THRESHOLD=90

if [ "$CURRENT" -gt "$THRESHOLD" ] ; then

fi

このスクリプトは2つの変数を設定します。CURRENT(上記のdfコマンドの出力に設定)とTHRESHOLD(設定可能な値に設定)です。その後、現在の値が閾値を超えているかどうかを確認し、超えている場合はコマンドを実行します。

通知はお好きなように設定できますが、こちらに例を示します---ウェブフックURLは含まれておらず、最後に貼り付ける必要があります(追加のフラグは不要です):

curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity."}"

これにより、サーバーのホスト名と現在のディスク容量を含む、適切にフォーマットされた通知があなたのウェブフックの指定されたチャンネルに送信されます。

このコマンドを上記のスクリプトのif文に貼り付けることで、全体がこのようにまとめられます:

#!/bin/bash

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

THRESHOLD=90

if [ "$CURRENT" -gt "$THRESHOLD" ] ; then

curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity."}"

fi

これをあなたのホームディレクトリにdiskspace.shとして保存し、chmod +x diskspace.shで実行権限を与えてください。crontab -eでcrontabを開き、以下の行を最後に追加してください:

0 * * * * ~/diskspace.sh

これにより、スクリプトは毎時実行されてディスクが満杯かどうかを確認します。ただし、ディスクが満杯の場合のみ通知が届くため、現在のディスク使用量よりも下に THRESHOLD を設定して手動で実行することで、スクリプトが機能するかどうかをテストできます。

詳細な通知を取得するには、スクリプトを更新して curl ステートメントを変更するだけで、df -h の結果をコードボックスに整形して送信するようにできます。

curl -X POST -H 'Content-type: application/json' --data "{"text":"Your server `$(hostname)` is currently at ${CURRENT}% disk capacity.n ```$(df -h)``` "}"

これはSlackに次のように表示されます:

スクリプトが実行するコマンドはあなたが望むものであれば何でもできるので、Postfixのようなメールハンドラーを使用したメール通知を設定したり、ウェブフックをサポートする他のフィードを設定することもできます。

関連記事: