システム運用

【OSS技術コラム】

第4回 外部システム連携時の通知設定におけるポイント

三宅 徹芳

こんにちは。この記事を書いている三宅です。

便利なOSSの監視ツールZabbixを使いこなして頂けるよう過去の経験から気づいた留意点や改善ポイントについてコラム形式で解説しています。

4回目になります今回は、③外部システム連携に関する知見として、監視システムの中でも管理者との重要な接点にあたる「通知」に関してポイントを絞って書きたいと思います。

1.Zabbixの外部通知
2.外部通知の例① JP1統合システム連携
3.外部通知の例② SNMPマネージャ連携
4.まとめ

1.Zabbixの外部通知

Zabbixの管理画面では、検知したアラートメッセージを確認する事ができますが、常に管理画面を開いて、アラートメッセージを目視監視する運用は現実的ではないと思います。

多くの環境では何らかの方法でアラートメッセージを外部のシステムに連携することにより、管理者に障害が発生した事を通知しています。

Zabbix における外部システムへの障害通知は、アクション設定より行うことが出来ます。

今回は、アクションの対象をアラートメッセージに絞り、障害を通知する事にフォーカスしてご説明します。その為、イベントソースはトリガーのみを扱います。

(アクションの実行条件は、検知したいトリガーに合わせて任意に設定します)

通知の方式は様々あると思いますが、一般的なeメールでの通知をZabbixでも取り扱う事ができます。

Zabbixのアクション設定で行う際には、「メッセージの送信」という項目を使用します。

eメールでの通知設定は、マニュアルに従い比較的容易に設定することが出来るため、この記事では、カスタムスクリプトという設定を使用する場合の解説をしていきます。

カスタムスクリプトは、単純にシェルスクリプトやその他スクリプトプログラムを呼び出す設定です。外部システムの仕様に合わせて作り込めば、様々な連携が可能です。



カスタムスクリプトを使用したスクリプトプログラムの呼び出し例

実行内容のタイプに「リモートコマンド」を選択し、タイプで「カスタムスクリプト」を選択するとコマンドを入力する事ができるので、ここではスクリプトプログラムの実行コマンドでスクリプトプログラムを呼び出す方式に則ってご説明をしたいと思います。

(「メッセージの送信」を使ってもスクリプトプログラムは呼び出せますが、今回は省かせていただきます。)

以下は実際のアクション設定画面です。



実行内容のタイプ欄でリモートコマンドを選択すると・・・



タイプの欄でカスタムスクリプトが選択できるようになりますので、コマンド欄へ以下の項目を入れていきます。

※個人の好みですが、スクリプトプログラムはPythonが便利かなと思います。

{}で囲っている文字列はマクロという変数でそれぞれ障害が発生した際にホストやトリガーに紐づく情報を取り扱います。

(ホスト名やイベント発生日時などそのまま表示できるものと障害レベルに紐づく値などプログラム内で判断に使うものがあります)

その中でも {TRIGGER.NAME}はトリガー名になりますが、日本語(2バイトコード)で作成している場合などスクリプトを動作させるサーバ側で受け取れない場合がある為、”(ダブルクォーテーション)でくくると良いと思います。

上記のpythonスクリプト側は、{HOST.NAME}以下を引数として受け取り情報を制御します。

カスタムスクリプトの中身は、連携先のツールやアプリケーションの仕様により書き方を変えます。

テキストファイルに障害ログを出力したり、インシデント管理ツールに連携してインシデント登録をしたりなど、様々です。

アクション設定で障害情報を引数にしてカスタムスクリプトで呼び出せるところはZabbixの利点の1つと思います。

2. 外部通知の例① JP1統合システム連携

例えば1つの例として、弊社でも対応している統合システム運用管理「JP1」と連携する場合は、統合管理の機能を持つJP1/IM2へ連携することにより、アラートメッセージの一元管理を行います。こうすることにより、JP1で実行しているジョブ管理のイベントとZabbixの検知したアラートメッセージを、JP1/IM2の統合コンソールで集中管理することが出来ます。

Zabbix で検知したアラートメッセージは、JP1/IM2で取り扱える形で転送する事ができます。

ZabbixからJP1/IM2への連携は、JP1/Baseが提供するイベント通知コマンド(jevsend)を用いることで実現します。前章で記載したカスタムスクリプトの中でメッセージを整形し、jevsendコマンドの引数として文字列を設定しコマンド発行すればJP1/IM2へアラートメッセージ連携が出来ます。

上記は、スクリプトプログラムを自作する必要がありますが、サイバートラスト社より「MIRACLE ZBX JP1/IM2連携プラグイン」がオプション製品として提供されています。

もちろん、スクリプトプログラム作成を含め、弊社 構築サービス で対応することも可能です。

 ※MIRACLE ZBX JP1/IM2連携プラグイン詳細はこちら(サイバートラスト社)

https://www.cybertrust.co.jp/zabbix/solutions/zbx-jp1im-plugin.html

3. 外部通知の例② SNMPマネージャ連携



特定のデータ転送の仕組みを持たないサーバなどにZabbixからデータ転送したい場合には、例えばsnmptrap コマンドで障害データを送ることも可能です。

カスタムスクリプト内でメッセージを整形するところなどは、これまでの例と同じですが、snmptrap コマンドでデータ転送する場合、snmptrapを受信する側とOIDの認識を合わせる必要があります。また、複数のデータをやりとりする為、varbind にて複数の情報を受け渡すなど工夫が必要です。

その際、何番に何の情報が含まれるか設計し受信する側の管理者とよく認識合わせする必要があります。

少し長くなってしまいますが具体的なsnmptrapコマンドの一例を示します。

※snmptrapコマンドの実行には、OSパッケージのnet-snmp-utilsが必要ですが忘れがちなので事前に入れておくとスムーズです。

ここまでご紹介しました、外部通知の例①、②からもお分かりになるように、最終的にデータ送信時に使用するツールやコマンドは受け取り側の仕様によって記述が変わります。

APIやwebhookが用意されているチャットツールやアプリケーションに対しては、マニュアルに従い障害情報をペイロードに詰めてPOSTすることによりデータ転送ができると思います。

4.まとめ

外部通知は、運用者にとって障害情報がダイレクトに伝わる箇所です。

設計段階では、監視システムの設計者が通知内容のサンプルを持ち込み、運用者や外部システムの担当者と協議する事が多いと思います。

私の経験上、サンプルを元に複数回の協議の上、顧客の運用スタイルに合わせて完成に向け何度か修正してFIXします。通知内容は、最初に思っていた内容のかけらも残らないくらい変化する事もあります。

例えば、通知先のシステムで使える文字数の仕様やその後の対応へつなげる為のルール、運用現場ごとの通知頻度の必要性など、実際に聞いてみないと分からない事、画面を見ながら話さないと双方の求める形にならないなど、定型的な形に落とし込みにくい範囲であると思います。昨今は直接会う事も難しいですが、Zoomを始めとしたWeb会議システムを活用して話し合いの場を設けるなど、設計者からヒアリング機会を作ることがおすすめです。すごく大事な過程である為、何度も変更が加わる事を前提に事に挑んでほしいなと思います。

4回に渡りお読みいただきありがとうございました。

Zabbixを使用した監視設計に関して語りましたが、似たような環境にいる方のお役に立つ話になったら幸いです。

<著者>
三宅 徹芳

<経歴>
プログラマ ⇒ CE ⇒ オペレータ ⇒ 運用管理 ⇒ SE …と、職種を変えつつ活動。現在はOSSの運用管理ツールの導入と保守を主業務にしており、効果的な使い方の研究や外部研修で成果発表などしています。

CTCシステムマネジメントコラム

ctcシステムマネジメントコラムでは、ITシステム運用の最新動向に関する特集・コラムがご覧いただけます。

ページトップへ