LifeKeeperの動作をSlackに通知してみた

LifeKeeperからSlackへの通知
Pocket

こんにちは。
サイオステクノロジーの花島です。LifeKeeperのサポートや構築を担当しています。

LifeKeeper for Linuxでは標準機能として、メールやSNMPによる動作の通知機能があります。
今回はこの通知機能の処理を模倣し、SlackにLifeKeeperの動作を通知してみました。

■ Webhook URLの取得

SlackのApp DirectoryからIncoming WebHooksを検索し、設定ページに飛ぶことができます。
ここでデフォルトのポスト先チャンネルを設定し、Webhook URLを取得します。

※ ポスト先チャンネルはcurlコマンド実行時に任意のチャンネルを指定できます。

■ コマンドラインから通知してみる。

取得したWebhook URLでSlackにメッセージを通知してみます。
下記コマンドラインを実行することで、「TestMessage」というメッセージが送信されます。

  # /usr/bin/curl -f -X POST –data-urlencode ‘payload={“text”: “TestMessage”}’ <Webhook URL>

※ <Webhook URL>には設定ページから取得したWebhook URLが指定されます。

これだけで、Slackへメッセージを通知できます。

■ LifeKeeperの通知機能として作りこむ

LifeKeeper起動時の通知を例に必要な情報を変数として当てはめていくと以下のようになります。

  # 通知先となるWebhook URL
  SLACKWEBHOOK_URL=<Webhook URL>

  # 通知先となるチャンネル(例:”#cluster01″)
  SLACKWEBHOOK_CHANNEL=<チャンネル>

  # 通知時に表示するアイコン(例:”:bell:”)
  SLACKWEBHOOK_ICON=<emoji>

  # 通知元のサーバー名(lcdunameコマンドから取得)
  UNAME=`/opt/LifeKeeper/bin/lcduname`

  # 通知するメッセージ
  MESSAGE=”LifeKeeper startup complete on $UNAME”

これらの変数をcurlのコマンドラインに当てはめると以下のようになります。

  /usr/bin/curl -f -X POST –data-urlencode ‘payload={“channel”: “‘${SLACKWEBHOOK_CHANNEL}'”, “username”: “‘${UNAME}'”, “text”: “‘”${MESSAGE}”‘”, “icon_emoji”: “‘${SLACKWEBHOOK_ICON}'”}’ $SLACKWEBHOOK_URL

上記の変数・コマンドラインをスクリプトとしたものをLifeKeeper起動時に実行されるイベントディレクトリに配置し、LifeKeeperを起動するとSlackへはこのように通知されます。

 

LifeKeeperからSlackへの通知

■ ほかのメッセージも作りこむ

ほかのメッセージも作りこみ、リソース障害によるフェイルオーバを発生させた場合は、このように障害を検知したノードと、フェイルオーバ先のノードから通知されます。

 

障害を検知したノードと、フェイルオーバ先のノードから通知

上記の例ではアイコンで「1号機」「2号機」が判別できるよう、ノードごとでSLACKWEBHOOK_ICONをそれぞれ1号機は「:one:」、2号機は「:two:」としています。

■ 後記

今回の例ではチャンネルがクラスタ単位でアイコンはノード単位でしたが、運用によってはチャンネルがシステム単位でアイコンはクラスタ単位とする使い方もあると思います。

また、Slackには特定の投稿を受けてさらに別のシステムにHTTPリクエストを実行するという機能があるようですので、さらなるシステム連携の幅が広がると考えられます。

■ 本記事に関する注意事項(本記事公開時点におけるもの)

  • 既存の通知スクリプトの改変方法および改変後の動作につきましては、サポートをご提供することはできません。
  • お客様自身で通知スクリプトを作成される場合の作成方法、導入方法および動作につきましては、サポートをご提供することはできません。
  • 専用の通知スクリプト作成を行うサービスのご提供はございません。
  • 本記事で紹介し内容を機能として製品に取り込む予定はございません。

SNSでもご購読できます。