24時間365日フルマネージドホスティングサービスのデイーネット

Redis-sentinelのイベントをメール通知してみた

どうも、こんにちは山田です。

今回は、前回のApache系とは打って変わってRedis-sentinelのイベント通知について紹介したいと思います。

Redis-sentinelとは?

簡単に言うと、マスタースレーブ構成されたRedisをモニタリングし、マスターが停止した場合など必要に応じてスレーブをマスターに昇格(フェイルオーバー)させて高可用性を実現してくれるアプリケーションです。

sentinelの監視について

sentinelが吐き出すログファイルを文言監視するとった手段が考えられますが、リアルタイムでの通知は行えないし、別途監視するための機構を用意する必要が出てきます。

そこで、sentinelが標準で持っている"notification-script"というパラメータにスクリプトを読み込ませイベントが発生したらスクリプトをキックしてもらいメール通知できないか設定を試みました。

notification-scriptについて

マニュアルを確認すると

Call the specified notification script for any sentinel event that is generated in the WARNING level (for instance -sdown, -odown, and so forth). This script should notify the system administrator via email, SMS, or any other messaging system, that there is something wrong with the monitored Redis systems.

The script is called with just two arguments: the first is the event type and the second the event description.

The script must exist and be executable in order for sentinel to start if this option is provided.

のように記載されており、指定したスクリプトの1つ目の引数にsentinelのイベントタイプ、2つ目の引数にイベントの詳細な内容が付けられる様になっています。

以上の仕様を理解した上で、設定するスクリプトを下記に用意しました。

設定するスクリプト内容

#!/bin/sh

MAIL_FROM="{メールの送信元アドレスを入力}"
MAIL_TO="{メールの通知先アドレスを入力}"
MAIL_TITLE="Redis Notification `uname -n`"

EXCLUDE_TYPE="{通知を省きたいイベントタイプを入力}"

## ARGUMENT CHECKING
if [ "$#" != "2" ]; then
  exit
fi

## EXCLUDE TYPE CHECKING
echo "${1}" | egrep -q "${EXCLUDE_TYPE}"
if [ "$?" != "0" ]; then
  exit
fi

## MAIL_BODY SETTING
MAIL_BODY=`cat << EOB
=============================================
Events occurred in Redis Sentinel.
=============================================

Event Type: ${1}
Event Description: ${2}

Please check the status of Redis.
EOB`

## MAIL SENDING
echo "${MAIL_BODY}" | mail -r "${MAIL_FROM}" -s "${MAIL_TITLE}" "${MAIL_TO}"

実際の設定について

①.先ほどのスクリプトを好きな場所(私は"/var/redis/notify.sh"に設置しました)に設置して実行権限を与えて下さい。

②.redis-sentinel.confに設定を追記して下さい。 ※例にならって、ご自身の環境に合わせて書き換えて下さい。

# sentinel notification-script <master-name> <script-path>

私の環境では以下のような設定をした

sentinel notification-script mymaster /var/redis/notify.sh

③.redis-sentinelを再起動して下さい。

動作確認

  • マスター稼動しているRedisを停止するなどして、イベントがメール通知されるか確認しましょう。

まとめ

  • 1つのイベント毎にメールが1通発砲されます。(汗)
  • 1つ目の引数に渡ってくるイベントタイプから自身の運用に不要なものは省くようにしましょう。

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar