LoginSignup
8
9

More than 3 years have passed since last update.

【AWS】cron実行結果をSlackに通知する

Last updated at Posted at 2019-10-25

サーバーのシステム状態を定期的に確認したいけどツールを入れる程でもないので
cronを使ってshellファイルを自動的に実行するようにしました

ついでにSlackのIncomingWebhooksを使ってBotが自動的に呟いてくれるようにしてみました

Slack Incoming Webhookの登録

まずはSlackのIncoming Webhookを準備します
Slackの設定にある その他管理項目 というところから App管理 を選択してください
スクリーンショット 2019-10-25 10.01.52.png
ブラウザが開いて管理画面が出るので検索窓で Incoming と入力すると一番上に Incoming Webhook という項目があると思うので選択してください
スクリーンショット 2019-10-25 10.02.43.png
Incoming Webhookアプリの詳細画面の Slackに追加 を選択します
スクリーンショット 2019-10-25 10.03.01.png
Botがつぶやくチャンネルを選択して Incoming Webhookインテグレーションの追加 を選択してください
スクリーンショット 2019-10-25 10.03.39.png

追加した時に Webhook URL というものが生成されます
このURLにhttpアクセスしたのをトリガーにBotが呟く仕組みになっています

Slack連携Shellファイルの作成

次にSlackにhttpアクセスを飛ばすShellを用意します
基本的にコピペでいいと思います
以下の3つだけは自分の情報に書き換えてください

  • 生成したWebhook URL
  • slack 送信チャンネル
  • slack 送信名
webhook.sh
#!/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
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9