シェルスクリプト+rsyslog+graylogで死活監視

■ 死活条件
監視対象のサイトにアクセスできない状態が5分間続いたらアラートをあげる

■ 監視対象
自分で用意したOWASP BWA

■ 監視する側の設定(ubuntu)
① 監視対象にwgetを投げ、ステータスを取得するシェルスクリプトを設置する
□ 参考サイト
http://www.voodoomarketing.net/2007/07/post-313/

□	shikatu-shell.sh								
#!/bin/bash							
cd /var/log						
ADDRESS=http://192.168.56.aaa/						
MESSAGE=`wget --spider -nv $ADDRESS 2>&1`						
RESULTCODE=`echo $MESSAGE | grep -c "200 OK"`						
if [ $RESULTCODE -ne 1 ];						
then						
  logger -is -p user.info -t shikatu $MESSAGE						
fi						

□ shikatu-shell.shの解説
ADDRESS=http://192.168.56.aaa/
監視対象のアドレス
MESSAGE=`wget --spider -nv $ADDRESS 2>&1`
wgetでファイルのダウンロードをしない。詳細メッセージを出力しない。出力されたメッセージをMESSAGE変数に格納する
RESULTCODE=`echo $MESSAGE | grep -c "200 OK"`
MESSAGEに「200 OK」が含まれている数を数える
if [ $RESULTCODE -ne 1 ];
数えた結果が1以外だったら
logger -is -p user.info -t shikatu $MESSAGE
syslogに出力する。
-i: プロセスIDを出力
-s: 標準エラー出力にも出力
-p: 優先度設定
-t: タグ文字列設定
以下のような文言がsyslogに出力される。出力される場所は/var/log/syslog
Nov 23 16:11:01 ubuntu-snort shikatu[3592]: http://192.168.56.102a/ wget: ホストアドレス `192.168.56.102a' を解決できませんでした。

□ 作成したシェルスクリプトがcrontabから実行できるように権限を与える
# chmod 770 shikatu-shell.sh

② crontabを設定する
□ crontabが有効であるか確認する
# /etc/init.d/cron status

□ 1分に1回、①で作ったシェルスクリプトを実行するように設定する
# crontab -e
以下を追記
*/1 * * * * /root/test1/shikatu-shell.sh

③ rsyslogの設定
□ # /etc/rsyslog.conf
以下を追記
*.* @@192.168.56.105:10514;GRAYLOGRFC5424

□ rsyslogを再起動する
# service rsyslog restart


■ graylogの設定
① Streamを作成する
② Streamにルールを追加する
→ Field application_name must match exactly shikatu
③ pipelineを作成する
①で作成したStreamと紐づける
④ Alertを作成する
・ Condictionの設定
f:id:Saw84:20181123164604p:plain
f:id:Saw84:20181123164613p:plain

・ Notificationの設定
f:id:Saw84:20181123164657p:plain

これで、監視対象のサイトに毎分接続を試み、5分以上接続できない状態が続いたら、アラートメールが飛んでくるようになる。