サーバーのシステム状態を定期的に確認したいけどツールを入れる程でもないので
cronを使ってshellファイルを自動的に実行するようにしました
ついでにSlackのIncomingWebhooksを使ってBotが自動的に呟いてくれるようにしてみました
Slack Incoming Webhookの登録
まずはSlackのIncoming Webhookを準備します
Slackの設定にある その他管理項目
というところから App管理
を選択してください
ブラウザが開いて管理画面が出るので検索窓で Incoming
と入力すると一番上に Incoming Webhook
という項目があると思うので選択してください
Incoming Webhookアプリの詳細画面の Slackに追加
を選択します
Botがつぶやくチャンネルを選択して Incoming Webhookインテグレーションの追加
を選択してください
追加した時に Webhook URL
というものが生成されます
このURLにhttpアクセスしたのをトリガーにBotが呟く仕組みになっています
Slack連携Shellファイルの作成
次にSlackにhttpアクセスを飛ばすShellを用意します
基本的にコピペでいいと思います
以下の3つだけは自分の情報に書き換えてください
- 生成したWebhook URL
- slack 送信チャンネル
- slack 送信名
# !/bin/sh
set -eu
# Incoming WebHooksのURL
WEBHOOKURL="生成したWebhook URL"
# メッセージを保存する一時ファイル
MESSAGEFILE=$(mktemp -t webhooksXXXX)
trap "
rm ${MESSAGEFILE}
" 0
usage_exit() {
echo "Usage: $0 [-m message] [-c channel] [-i icon] [-n botname]" 1>&2
exit 0
}
while getopts c:i:n:m: opts
do
case $opts in
c)
CHANNEL=$OPTARG
;;
i)
FACEICON=$OPTARG
;;
n)
BOTNAME=$OPTARG
;;
m)
MESSAGE=$OPTARG"\n"
;;
\?)
usage_exit
;;
esac
done
# slack 送信チャンネル
CHANNEL=${CHANNEL:-"#送信するチャンネル名"}
# slack 送信名
BOTNAME=${BOTNAME:-"送信するBotの名前"}
if [ -p /dev/stdin ] ; then
#改行コードをslack用に変換
cat - | tr '\n' '\\' | sed 's/\\/\\n/g' > ${MESSAGEFILE}
else
echo "nothing stdin"
exit 1
fi
WEBMESSAGE='```'`cat ${MESSAGEFILE}`'```'
# Incoming WebHooks送信
curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"text\": \"${WEBMESSAGE}\" }" ${WEBHOOKURL} >/dev/null
このファイルを任意の場所に作成しましょう
今回は /etc/webhook.sh
に作成しました
基本的にパイプで渡せるものはすべて出力できるはずです
以下コマンドで動作を確認してみましょう
$ sudo echo test | /etc/webhooks.sh
cronの登録
cronの登録は簡単です
/etc
に移動して cron
の設定を開きます
$ cd /etc
$ sudo crontab -e
cronの設定が開いたら任意の処理を記入してください
今回は1時間毎に vmstatコマンド
を実行したいので以下のように記入して :wq
で編集を終了します
0 * * * * vmstat | /etc/webhooks.sh
以下コマンドを実行して登録が完了しているか確認できます
$ sudo crontab -l