21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

curl と cron でHTTPレスポンスを監視するシェルスクリプト (結果をSlack に飛ばす)

Last updated at Posted at 2018-11-29

2018.11.30 : スクリプトが要件どおり動かない箇所があったので修正

目標

インターネットに出られるけれど、インターネットから入ってこれないサーバの死活監視を、お気軽にしたい。

知識材料

今回のゴール

監視対象URLに対して、下記の要件で監視できるシェルスクリプトを作成

  • HTTP 200 OK 以外を返した時、エラー通知する
  • 1日一回、監視していることを通知するために HTTP 200 OK を返した時も通知する
  • (おまけ:通知先は Slack)

実践

監視シェルスクリプト

書式

check_http.sh [-f] target_url

オプション

-f target_url から HTTP 200 OK が返ってきた時も、通知する

スクリプト

check_http.sh
# !/bin/bash
## 引数が2つより多かったらスクリプトを実行しない
if [ $# -gt 2 ]; then
 exit 0
fi
## 検証するURL
target_url=""
## 通知するかどうかフラグ
NOTIFY=0

## スクリプトへの引数を確認
for arg in "$@" ; do
  case "$arg" in
    -f)
      NOTIFY=1;;
    *)
      target_url=$arg
  esac
done

## target_url へのアクセスを試みる
message=`curl -o /dev/null -s -w %{http_code} $target_url`

## 強制送信じゃない、またはcurl 結果 http_code が 200 だったらスクリプト終了
if [[ $NOTIFY -eq 0 &&  "$message" =~ 200 ]]; then
 exit 0
fi

 ... 以下、通知先へ飛ばす処理 ...

(おまけ:監視シェルスクリプト に Slack 送信部分追加)

check_http.shの続き
## 通知メッセージ整形
message="check URL:[$target_url]   status:[${message}]"
pre='```'
payload=`echo -e "> 死活監視\n${pre}\n${message}\n${pre}"`
payload="text=${payload}"

## Slack incomming webhook URL に送信
curl --data-urlencode "${payload}" \
 --data-urlencode "icon_emoji=:dizzy:" \
 --data-urlencode "username=webMaster" \
 "https://hooks.slack.com/services/TAAAAAAAA/BBBBBBBBBB/xxxxxxxxxxxxxxxxxxxxx" > /dev/null

cron 設定

  • 朝9時に、死活監視をしていることを通知。
  • 毎分、死活監視。異常があったら通知。
0 9 * * * /root/cron/check_http.sh -f https://qiita.com/
*/1 * * * * /root/cron/check_http.sh https://qiita.com/

朝9時に実行されるコマンドには -f をつけて HTTP 200 OK が返ってきても通知する。

まとめ

世の中に、便利なサーバー監視ツールは多数存在すると思いますが、最低限「動いているか」を確認できればいいと割りきったら、お手軽に実装できました。

POST して通知できる WebService がネットワーク内に存在していれば、slack だけでなく、いろいろな通知先に切り替えられると思います。

参考にさせていただきました

cURLでHTTPステータスコードだけを取得する- Qiita
SlackのIncoming Webhooksを使い倒す - Qiita
シェルスクリプトの基礎知識まとめ - Qiita

21
15
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
21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?