本日のやってみようシリーズは、Zabbix第5回目です。Lambdaをご利用頂きますとシンプルな条件によりアラートをあげることが出来ますが、Zabbixと連携することで、複合アラート(複雑な条件)を設定することが可能になります。本日はTIS佐藤様にご紹介頂きます!TIS株式会社の佐藤です。TISから提供しているTISエンタープライズOSSサポートサービスの取り組みの一環として行っているAWSとZabbixの効果的な連携検証の結果を連載にてご紹介します。第5回目はAmazonSNSとAWSLambdaとの連携をご紹介します。Zabbix連携の紹介・特徴[AmazonSNSとは]AWSが提供するサービスのひとつでPUSH型のメッセージングサービスです。HTTP(S)、Email、SMS、AmazonSQS、MobilePushなどへ通知を送信することができます。AWSLambda関数を呼び出すこともできます。AmazonSNSは、即時性があり、リアルタイムで他のAWSサービスと連携し通知させることが可能です。通知例を挙げると、AutoScalingであればインスタンス起動、削除時のステータス通知。RDSであれば、DBインスタンスのバックアップ開始、完了時の通知。セキュリティグループ、ストレージ、パスワードの設定変更情報も通知可能です。他にもたくさんのサービスのイベント情報をAmazonSNSへ集約させることができ、リアルタイムにユーザへ通知させることができます。functionと呼ばれるコードを自動的に実行させるコンピューティングサービスです。AWSサービスのイベントとの連携を設定し、指定したイベントを契機にAWSLambdaにアップロードしたコードを自動的に実行させる仕組みです。本連携では、実行契機としてAmazonSNSを設定し、AmazonSNSへ集約したイベント情報はAWSLambdaへ連携されます。Senderプロトコルにてプッシュ型でイベント情報をリアルタイムにZabbixに渡します。よって、Zabbix側ではリアルタイムに近い時間でイベント情報を監視することが可能になります。[Zabbixと連携することで]Zabbixでイベント情報を一元管理することで、以下のようなことが実現できます。・通常のSNS通知だと障害の発生・復旧のみの通知だけになってしまいますが、トリガーの複合条件を利用することで、より柔軟な通知の設定が可能になります。複数のトリガーの条件式を設定しておき、すべてのトリガーで障害となったら初めてユーザに通知を行うなどができます。・アクションのエスカレーション機能を利用して、ユーザ側の運用に合わせた繰り返し通知や、障害の継続時間に応じた通知フローを柔軟に設定することができます。[例]通知1回目:障害発生時に管理者Aに通知をする。通知2回目:障害が30分経過した場合には、再度同じ管理者Aへ繰り返し通知をする。通知3回目:障害が1時間経過した場合は別の管理者Bまたはユーザに通知をする。本連携スクリプトとテンプレートは、以下の環境で動作確認済みです。本連携スクリプトはAWSLambda上に配置してAmazonSNSからイベント情報が上がってきたことを契機にAWSLambda上のスクリプトが自動で実行されます。senderプロトコルでZabbixの各ホストへイベント情報を送信します。Zabbix監視テンプレートのインポートZabbixの管理画面から監視設定のテンプレートを登録します。テンプレートを以下のリンク先からダウンロードしてください。[インポート]と辿り、ダウンロードしたテンプレートを「インポートするファイル」に設定し、インポートを実施します。これにより以下のテンプレートが登録されます。Zabbixの監視ホスト登録とテンプレート割り当て各監視ホストを登録して、インポートしたテンプレートを割り当てます。[ホスト]から以下のような情報を登録します。各サービスと識別しやすい表示名にすることをお勧めします。最低でも1つのグループに登録する必要があります。本連携ではインターフェース情報は利用しませんが、最低でも1つのインターフェースを登録する必要があります。functionの設定とサンプルスクリプトを配置します。function]と辿り、以下項目を設定してください。runtime:Python2.7を選択し[Skip]をクリックしてください。triggers]AWSLambdaと連携をするためにAmazonSNSのトピックを指定しますが、現時点ではまだ作成していないため、Nextで次手順へ進みます。ファンクションにトピックの割り当て]で設定します。Name任意Description任意RuntimePython2.7既に設定されていた場合は変更不要です。inline]を選択しスクリプトを貼り付けます。スクリプトを以下のリンク先から全てコピーしてください。サンプルとして入力されているコードは全て削除し、コピーしたスクリプトを貼り付けてください。貼り付けた後にスクリプトを修正する場合は、画面上で修正できます。※貼り付けた後、各環境に合わせたZabbixのIPアドレスとポート番号に変更してください。Handlerlambda_function.lambda_handler既に設定がされていた場合は変更不要です。role既に設定がされていた場合は変更不要です。function」を選択してください。各種イベント情報をAmazonSNSへ集約するために、トピックの作成とサブスクリプションの設定を行います。topic]と辿り、以下項目を設定してください。ARN]の値をコピーしてください。subscription]を選択し、以下項目を設定してください。ARNの値をペーストしてください。AWSLambdaの設定]で作成したファンクションを選択してください。AWSLambdaの設定]で作成したファンクションに対してトピックを割り当てます。trigger]と選択してください。[SNS]を選択し、以下項目を設定してください。AmazonSNSの設定]で作成したトピックを選択してください。イベントアラームの設定AmazonSNSへ通知させるイベントを設定します。例としてRDSイベントサブスクリプションの設定を紹介します。Subscription]と辿り、以下項目を設定してください。AutoScaling連携の設定こちらの記事でご紹介したAutoScalingのスクリプトと連携し、自動作成されたホストのイベント情報の監視設定を自動化することも可能です。ここからの説明はこちらの記事の連携手順が完了していることを前提とします。AutoScaling連携を設定することで、何処のグループで何という名前のインスタンスが作成され、削除されたのかといったステータスをイベント情報としてZabbixで管理することができます。EC2」のテンプレートを割り当てるためのタグを設定します。AmazonSNSの設定]で作成したトピックを設定してください。)を監視する場合は、”AutoScaling”というホストが、個別のAutoScalingグループで発生するイベント情報を監視する場合は、”AutoScalingグループ名と一致するホスト名のホスト”がZabbix側に登録されている必要があります。Alarmから発行されるSNSについては、AutoScaling連携で自動的に登録された各ホストの監視アイテムに自動登録されます。監視実行例*例1:AutoScalingが有効・無効時は以下のようにZabbixで管理することができます。辿り、対象のホストを選択してください。*例2:RDSサービスの再起動時のイベント情報も以下のようにZabbixで管理することができます。イベント情報はAutoScalingと同じく、Zabbixの[最新データ]で確認できます。*例3:CloudWatchから上がってくるEC2インスタンのイベント情報も以下のようにZabbixで管理することができます。イベント情報は上記2つと同じく、Zabbixの[最新データ]で確認できます。まとめ今回の記事では、AmazonSNSとAWSLambdaと連携をさせ、イベント情報をZabbixで監視する方法をご紹介しました。Zabbixのトリガー、アクション機能を利用することで、アラートメールの内容、送信間隔をユーザ側でカスタマイズすることが可能です。ユーザに合わせた、より柔軟な運用管理を実現できます。AmazonSNSから上がってくるイベント情報をLambdafuncion内でコードをカスタマイズしてZabbixへ送信することも可能ですので、是非お試しください。・[スクリプト・テンプレート公開リポジトリ]https://github.com/tech-sketch/zabbix_aws_template※ご紹介したスクリプト・テンプレートはすべてオープンソースとして公開しています。自由にご利用・ご活用ください。ご質問やサポートのご用命については以下[6.お問い合わせ先]よりご連絡をお願いします。本記事に関するお問い合わせは以下までお願いします。03-5337-4588◆『TISエンタープライズOSSサポートサービス』TISでは本記事での紹介内容等も含め様々なノウハウを駆使したOSSのサポートサービスを提供しています。企業にて安心してOSSをご利用いただけるようにするため、設計や構築のご支援(技術コンサルティングサービス)や運用・保守時のトラブル対応のご支援(プロダクトサポートサービス)を提供しています。本記事にて紹介しているAWSとの連携用の監視テンプレート「AWS監視テンプレート」についても保守サポートおよび拡張開発サービスを提供しています。マネージドサービス『MOTHER』を提供しています。メインページはこちら。クラウド運用にご興味ある方は、こちらからOpsJAWSに登録ください。