こんにちは、前回の記事で監視ツールの技術選定について書きましたが、今回はSite24x7プラグインの自作方法を簡易的にお伝えしようと思います。
Site24x7とはなにか
Site24x7とは、Zoho社によって開発されたクラウド監視ツールです。
AWSなどのクラウド環境とオンプレミス環境の両方に対応しています。
Site24x7プラグインの自作方法
プラグインを自作する前に、まずは公式サイトのプラグイン紹介ページをざっと眺めてみて、自分の欲しい監視に近いプラグインが公開されていないか確認するのがよいでしょう。
MySQLやNginxなど、多くのサービスに対するプラグインが公開されています。
https://www.site24x7.jp/plugins.html
https://www.site24x7.jp/plugins.htmlよりキャプチャ
もし自分の必要な監視項目と一致するものがなかったとしても既存のプラグインは有用です。なぜなら、既存のプラグインを流用することでプラグインを一から書く手間を減らすことができます。例えば、MySQLのある設定値を取得する必要があり、ログインが必要だとします。既存のプラグインにログイン処理が書かれていれば、ログイン処理を自作しなくともそのプラグインのスクリプトを一部修正することで目当ての設定値を監視項目として取得することができます。
プラグインは、Pythonで書く方法とシェルスクリプトで書く方法の2種類があります。
Pythonによるプラグインの書き方
以下はプラグインのPythonによるコード例です。
#!/usr/bin/python
PLUGIN_VERSION = "1"
HEARTBEAT="true"
METRICS_UNITS={'attribute_sample1':'MB', 'attribute_sample2':'ms'}
def get_sample1():
# サーバ内で取得される測定値など、なんらかのメトリクスを返す
return 123
def get_sample2():
# サーバ内で取得される測定値など、なんらかのメトリクスを返す
return 456
def metricCollector():
data = {}
data['plugin_version'] = PLUGIN_VERSION
data['heartbeat_required'] = HEARTBEAT
data['units'] = METRICS_UNITS
data['attribute_sample1'] = get_sample1()
data['attribute_sample2'] = get_sample2()
return data
if __name__ == "__main__":
result = metricCollector()
print(json.dumps(result, indent=4, sort_keys=True))
Pythonで書く場合、最終的に辞書をjson形式でprint出力し、これらの値が監視項目としてSite24x7へ渡されます。
この辞書は以下の3つのキーを必ず含む必要があります。
plugin_version
プラグインのバージョンです。監視項目の増減や単位の変更をした場合はこの値をインクリメントしないと変更したと見做されないようです。
PLUGIN_VERSION = "1"
data['plugin_version'] = PLUGIN_VERSION
heartbeat_required
プラグイン自体を監視するかのフラグです。
HEARTBEAT="true"
data['heartbeat_required'] = HEARTBEAT
units
辞書形式です。単位がある監視項目があればここに記述します。
METRICS_UNITS={'attribute_sample1':'MB', 'attribute_sample2':'ms'}
data['units'] = METRICS_UNITS
独自の監視項目は、attribute_sample1, attribute_sample2のような形で記述します。名前は自由です。
data['attribute_sample1'] = get_sample1()
data['attribute_sample2'] = get_sample2()
ここでは中身は適当ですが、通常はコマンドを介してサーバから取得される値が入ります。
特に制限はないため、もしSite24x7のデフォルトの監視項目に目当ての監視がない場合でも任意の監視項目を追加できると思います。
プラグインの反映方法
以下のディレクトリの直下に、プラグインファイルと同名のディレクトリを作成し、その下にプラグインファイルを置きます。プラグインファイル以外に必要なファイルがある場合はプラグインファイルと同じ階層に置けば問題ありません。
/opt/site24x7/monagent/plugins
例として、sample.pyというプラグインの場合は以下のようになります。
/opt/site24x7/monagent/plugins/sample/sample.py
再起動しなくても反映されるはずですが、うまくいかない時は以下を試すとよいようです。
sudo /etc/init.d/site24x7monagent restart
プラグインの取得値がSite24x7の管理画面で正常に取得できていれば成功です。
アラートを受け取りたい場合には、取得値がしきい値を超えたら通知するように設定する必要があります。
プラグインの名前について
なお、監視プラグインの名前は自社のSite24x7全体でグローバルであるということに注意が必要です。
例えば今回の例ではsample.pyというプラグイン名にしていますが、このsample.pyを複数のサーバ監視に設定した場合、同一のプラグインとして扱われます。同一のプラグインとして扱われるということは閾値などの設定も共通になってしまいます。
もし、同一の監視項目だがサーバごとに閾値は分けたい場合には、異なったプラグイン名(ファイル名)にする必要があります。
最後に
mmjでは最近会社で使うチャットツールをChatworkからTeamsに移行しましたが、Site24x7の通知もTeamsへ飛ぶようにしています。この話もまた機会があれば書きたいと思います。読んでいただきありがとうございました。