xymonからhttpsで監視を試みるも、SSL_ERRORと出て監視できず、

xymonnet.logには

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

と出て監視できない状況。

コマンドラインからwgetやcurlではhtml取ってこられるのに。

調べたところsniの指定が抜けていたのが原因でした。

 

hosts.cfgに、

127.0.0.1   hogehoge                     # cont=https_string;https://www.example.com/test.html;test sni

とのように、末尾にsniを付けたら意図通り正常に監視できました。

SNIとは、Server Name Indication、ひとつのサーバで複数のSSL証明書を使う技術。

監視対象がAWSのCloudFrontでのSSLだったのですが、正確には不明です。原因わかれば追記します。

xymonのログ監視機能でmsgsアイコンがありますが、これだと複数のログの監視がひとつにまとめられてしまい、アラーム通報が細かく設定できないなど柔軟さに欠いています。

またログ検知から30分間が赤になるとの仕様も通知が複数回届いてしまう事象となったりGreenの復旧通知が遅れたりとわかりにくい場合があります。

 

自前でログ監視を行って回避させようとするシェルスクリプトっぽい擬似コードです。

ローテートの処理が完全ではないのと、タイミングによっては監視が漏れてしまう場合があるかもしれませんが。

前回実行時からの増加分の行数を数えていますが、IFSを変えて複数行の監視を実現しているところがポイント。

==============================================================

OLD_LINE=`cat /tmp/xymon_syslog_wc.txt`

NEW_LINE=`wc -l /var/log/messages | awk '{print $1}'`

echo $NEW_LINE > /tmp/xymon_syslog_wc.txt

TAIL_LINE=`expr $NEW_LINE - $OLD_LINE`

echo `date` "OLD: $OLD_LINE NEW:  $NEW_LINE TAIL: $TAIL_LINE"

if [ $TAIL_LINE -lt 0 ] ; then

  # log rotate

  cp /var/log/messages.log /tmp/messages

else

  tail -$TAIL_LINE /var/log/messages.log > /tmp/messages

fi

 

# change IFS to Only Return

ORG_IFS=$IFS

NEW_IFS="

"

IFS=$NEW_IFS

 

ここに/tmp/messagesを対象にログ監視の処理を入れる。

監視で見つかったらアラート。

IFS=$ORG_IFS

==============================================================

これでログを見つけたら、あとは普通に通知を上げれば良さそう。

Xymon関係無くcronからでもなんでも定期的に実行すればログ差分のみの監視ができます。

 

どなたかローテート対応など拡張してくれたら嬉しいです。