Tech Sketch Bucket of Technical Chips by TIS Inc.

Godのプロセス監視で独自の通知処理を行う

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの松尾です。

前回に引き続き、今回は、Godで監視するプロセスの状況に応じて、独自の通知処理をRubyで書き、通知する方法をご紹介します。

Godのバージョンは、記事執筆時点(2014年5月20日)で最新の 0.13.4 になります。


プロセスの状況に応じて、通知を行うには?

Godは、監視しているプロセスの状況に応じて通知を行うことができます。 通知を行うには、下記の2つの方法があります。

  1. 既にGodで実装されている機能を用いる
  2. 独自の処理を実装し、それを実行するように設定する

1. では、簡単に通知を行うことができますが、通知するメッセージの内容が限られてしまいます。 下記はHipChatを用いた通知の例になります。

メッセージの内容は、 [<時刻>] <ホスト名> - <Godに登録したプロセスの名前> <通知が行われた状況> のようになります。

2. では、Rubyで書いた独自の通知処理を行うことができます。 eXcaleでは、独自の処理を実装し、HipChatへの通知やAMQPでのメッセージの送信といったことを行っています。


独自の通知処理を行うには?

Godで監視しているプロセスの状況に応じて独自の通知処理を行うには、以下の作業を行います。

  1. Contactクラスを継承し、notifyメソッドをオーバーライドしたクラスを作成する
  2. 作成したクラスのnotifyメソッドを呼び出すように設定する

これらは全て、Godの設定ファイルを記述することで行うことができます。


Contactクラスを継承し、notifyメソッドをオーバーライドしたクラスを作成する

ここでは、Contactクラスを継承し、notifyメソッドをオーバーライドしたクラスを作成する方法を説明します。

以下のように記述することで、notifyメソッドをオーバーライドしたクラスを作成することができます。作成するクラスは、God::Contactsモジュール内に作成してください。

このように、実行したい通知処理をnotifyメソッド内で記述したクラスを作成します。


作成したクラスのnotifyメソッドを呼び出すように設定する

ここでは、作成したクラスのnotifyメソッドを呼び出すように設定する方法を説明します。

以下のように記述することで、先ほど作成したクラスのnotifyメソッドを呼び出すように設定します。

今回の設定では、前回と同様、プロセスが起動していない場合には、プロセスが起動するように設定されており、その際にnotifyメソッドに記述した通知処理が実行されるようになります。 priority、categoryに任意の文字列を指定し、notifyメソッドに渡す場合は、13行目を以下のように書き換えます。


独自の通知処理を実際に動かしてみる

冒頭で述べた通り、GodではHipChatに通知する機能が既にありますが、通知するメッセージの内容が決まっていて、メッセージにメンションを付けることができません。

そこで、独自の通知処理をRubyで書くことで、メンション付きの通知を行うようにしたいと思います。

前回と同様、監視するプロセスで実行されるhello.rbを作成します。

Godの設定ファイルを、以下のように記述します。HipChatのトークンを取得する場合はこちらの記事を参考にしてください。

設定は以上です。

$ god -c config.god  でGodを起動すると、プロセスが起動していない場合にはプロセスが起動し、HipChatにメンション付きのメッセージが送信されます。

以上が、独自の通知処理をRubyで書き、HipChatでメンション付きの通知を行う方法になります。


最後に

今回は、Godで監視するプロセスの状況に応じて、独自の通知処理をRubyで書き、通知する方法をご紹介しました。 皆さんもnotifyメソッドをオーバーライドして、いろいろとやってみてください。

エンジニア採用中!私たちと一緒に働いてみませんか?