« [OpsJAWS: やってみようシリーズ] Splunk Cloud をはじめてみた | メイン | [OpsJAWS: やってみようシリーズ] Billing Data × Zabbix連携によるAWS課金情報監視の実現 »

[OpsJAWS: やってみようシリーズ] CloudWatch × Zabbix連携による統合監視実現

Partner SA 酒徳です。こんにちは。今週のやってみようシリーズは、Zabbix利用者にとって嬉しい、ZabbixとCloudWatchの連携についてご紹介させて頂きます。Zabbixに関するお問い合わせは、よく受ける質問の一つでもあるので、これを機にAWS上でZabbixを利用する際のTipsを整理頂ければと思います。本日はTIS株式会社 池田様にご紹介頂きます。

AWSxZabbix1_zabbixlogo

TIS株式会社の池田です。TISから提供しているTISエンタープライズOSSサポートサービスの取り組みの一環として行っているAWSとZabbixの効果的な連携検証の結果を連載にてご紹介します。初回はCloudWatchとの連携です。

CloudWatch x Zabbix連携の紹介・特徴

CloudWatchは各EC2インスタンスのメトリクス情報やインスタンス内のログ(CloudWatch Logs)、ELBやRDS等のサービスの情報、さらには課金情報まで幅広く監視できるAWSが提供する監視マネージド サービスです。

このCloudWatchのサービスを利用するだけで十分なシステムもあります。しかし、例えば以下のようなシステムの場合、CloudWatchと別の監視ツール(今回はZabbix)を連携し、クラウドデザインパターン「Monitoring Integrationパターン」の実装が有効となります。

 ・AWSだけでなく、他の環境(他のクラウドサービスやオンプレミス環境等)の監視も統合的に管理したい場合

 ・AWS EC2インスタンス内のOSやミドルウェア、アプリケーションの情報も含めた監視を統合的に管理したい場合

 ・監視結果に対して長期的な分析を行いたい場合(CloudWatchでは過去2週間分のデータしか保存できない制約あり)

様々な連携手法が考えられますが、以下のやり方で実現する方法を紹介します。

  1. 各CloudWatchのメトリクス情報一覧を自動収集、Zabbixの監視アイテムとしてローレベルディスカバリ(以降、LLDと呼ぶ)で自動登録
  2. 各監視アイテムに対して統計情報をZabbix Senderを使って効率よく自動登録

この連携手法により、動的に変化するメトリクス情報を自動的にZabbixに連携し、APIのコール数やZabbix Serverに与える負荷も最小限に抑えて連携が実現できます。

設定(構築)する内容

以下の構成でCloudWatchの監視結果データをZabbixに連携します。

AWSxZabbix1_architecture

① 監視アイテム設定を自動化する(Zabbix LLDの活用)

CloudWatchの監視データを登録する先のZabbixの監視アイテム設定を自動化するフェーズです。ZabbixのLLDを使って自動化します。(参考URL: https://www.zabbix.com/documentation/3.0/manual/discovery/low_level_discovery)

後述するサンプルスクリプトを呼び出すことで以下のようなJSON形式でメトリクスの情報一覧の応答を返します。定期的にこのスクリプトを呼び出し(外部チェックスクリプト監視機能を利用)、最新のメトリクス一覧の情報にあわせて監視アイテムが自動同期されます。

LLD用JSONフォーマット

---

{

    "data": [

        {

            "{#METRIC.NAMESPACE}": "AWS/EC2",

            "{#METRIC.NAME}": "CPUCreditBalance",

            "{#METRIC.UNIT}": "Count"

        },

・・・省略

        {

            "{#METRIC.NAMESPACE}": "AWS/EC2",

            "{#METRIC.NAME}": "DiskReadOps",

            "{#METRIC.UNIT}": "Count"

        }

    ]

}

---

② 統計情報を登録する(Zabbix Senderの活用)

①で登録された監視アイテムは「Zabbixトラッパー」タイプとなります。このアイテムに対してプッシュ型で統計情報をZabbix Senderに登録するスクリプトを定期実行します。

Zabbix Senderについてはこちらを参照下さい。(参考URL: https://www.zabbix.com/documentation/2.2/jp/manual/concepts/sender)

設定手順 

以下の3ステップで連携が可能となります。

  1. 連携用Pythonスクリプトの配置(スクリプト稼働のための事前設定含む)
  2. Zabbix監視テンプレートのインポート
  3. Zabbixの監視ホスト登録&テンプレート割当

この連携手法の前提の環境(動作確認済み)としては以下となります。

* CentOS7.2 もしくは Amazon Linux 2016.03

* Python 2.7 (CentOS: 2.7.5, Amazon Linux 2016.03: 2.7.10)

 * boto3(AWS SDK for Python)

 * Zabbix2.2系および3.0系

1.連携用Pythonスクリプトの配置

スクリプトはこちらのものをダウンロードしてZabbix Serverの外部チェックスクリプト用ディレクトリに配置します。

外部チェックスクリプト用ディレクトリは、zabbix_server.confの「ExternalScripts」で指定されているディレクトリです。

例:

ExternalScripts=/usr/lib/zabbix/externalscripts

配置後、配置したスクリプト(cloudwatch_zabbix.py)をZabbix Server起動ユーザ(デフォルトではzabbixユーザ)が実行できる権限を付与してください。

コマンド実行例:

 chown zabbix:zabbix cloudwatch_zabbix.py

 chmod u+x cloudwatch_zabbix.py

このスクリプトを稼働するにはPythonの公式AWS SDKであるboto3が必要となります。pipコマンドが使える環境の場合は以下のようにインストールします。

コマンド実行例:

 pip install boto3

2.Zabbix監視テンプレートのインポート

次に、Zabbixの管理画面から監視設定のテンプレートを登録します。Zabbix3.0を利用の場合、監視テンプレートはこちらからダウンロードします。Zabbix2.2の場合は2.2用のテンプレートを利用します。

Zabbixの管理画面から[設定]→[テンプレート]→[インポート]と辿り、ダウンロードしたテンプレートを「インポートするファイル」に設定しインポートを実行します。

AWSxZabbix1_template_import

これにより以下のような監視テンプレートが登録されます。

テンプレート名

用途

Template AWS EC2

EC2関連のメトリクス監視

Template AWS EBS

EBS関連のメトリクス監視

Template AWS ELB

ELB関連のメトリクス監視

Template AWS RDS

RDS関連のメトリクス監視

※現状、上記のEC2,EBS,ELB,RDSの設定にのみ対応したスクリプトファイルとなっています。その他サービスのCloudWatch連携が必要な場合はご相談ください。

3. Zabbixの監視ホスト登録&テンプレート割当

最後に、監視ホストを登録して2.でインポートしたテンプレートを割り当てます。

ここではEC2インスタンスに関連したCloudWatchを監視する例を紹介します。本記事ではEC2インスタンスの情報を自動連携して設定を自動化する部分は対象外としているため以下を手動設定します。EC2インスタンス情報の自動設定については本連載の別記事としてまとめる予定なのでお楽しみに。

Zabbix管理画面の[設定]→[ホスト]から以下のような情報を登録します。

設定項目

設定内容

ホスト名

インスタンスのIDを設定(i-xxxxxx)

表示名

任意(Nameタグに設定した値等インスタンスを識別可能な値を推奨)

グループ

任意(最低でも1つのグループに登録する必要あり)

インタフェース

任意(本連携ではインタフェース情報は利用しませんが、最低でも1つのインタフェース登録が必要)

テンプレート

Template AWS EC2

マクロ

以下のマクロを登録

{$KEY}: AWSアクセスキーID

{$SECRET}:AWSシークレットアクセスキー

{$REGION}:リージョン名

※注意:

API操作に必要なクレデンシャル情報を上記の通り、マクロに設定する例となっています。複数ユーザでのZabbix環境ご利用の際には扱いにご注意ください。

AWSxZabbix1_host1

AWSxZabbix1_host2

AWSxZabbix1_host3

設定はこれで終了です。

あとは、各処理が定期実行され、自動的にCloudWatchの情報が連携されます。(※2処理のうち、1つ目の監視アイテムを自動設定する処理については標準で1時間に1回稼働するよう設定されています。初回早めに処理させたい場合にはディスカバリルールの監視間隔を調整いただくか、Zabbix3.0の場合、定期設定により指定の時間帯に臨時で処理が走るよう設定してください。)

AWSxZabbix1_latestdata

AWSxZabbix1_graph

まとめ

今回の記事ではCloudWatchの情報をZabbixにて収集する方法についてご紹介しました。連携でキーとなるのはZabbixのLLDとZabbix Sender機能です。これらの機能とAWS APIからの収集情報を連携させることで非常に効率の良い連携が実現できます。連携できることによりCloudWatchサービス単体の利用よりもより幅広い統合監視、より柔軟な監視運用が実現できます。ぜひお試しを!

また、今回ご紹介したCloudWatch連携機能についてはTISが提供するマネージドサービス『MOTHER』の障害監視サービスのアップデートとして近日お届けする予定です。

参考情報

・[スクリプト・テンプレート公開リポジトリ]

 https://github.com/tech-sketch/zabbix_aws_template

※ご紹介したスクリプト・テンプレートはすべてオープンソースとして公開しています。自由にご利用・ご活用ください。ご質問やサポートのご用命については以下5.お問い合わせ先よりご連絡お願いします。

・[AWS運用管理フォーカスセミナー資料:AWSの便利な監視サービスと Zabbix監視の融合による効果]

http://awsservicedocs.s3.amazonaws.com/Seminor/20150422_aws_sysops_forcus_seminar/TIS_Presentation.pdf

お問い合わせ先

本記事に関するお問い合わせは以下までお願いします。

TIS株式会社 OSS推進室

メール: oss@pj.tis.co.jp

電話: 03-5337-4588

◆『TISエンタープライズOSSサポートサービス』

TISでは本記事での紹介内容等も含め様々なノウハウを駆使したOSSのサポートサービスを提供しています。企業にて安心してOSSをご利用いただけるようにするため、設計や構築のご支援(技術コンサルティングサービス)や運用・保守時のトラブル対応のご支援(プロダクトサポートサービス)を提供しています。

http://www.tis.jp/r/oss/

◆マネージドサービス『MOTHER』
TISは、クラウドサービスの活用が本格化した時代にあわせ、AWSなどの
クラウドはもちろん、企業が持つプライベートクラウドやオンプレミスが
組み合わされたマルチプラットフォーム環境の統合管理、障害監視、性能
分析、運用自動化などのマネージドサービス『MOTHER』を提供して
います。

http://www.tis.jp/service_solution/mother/

****

OpsJAWS メインページはこちら

クラウド運用にご興味ある方は、こちらからOpsJAWSに登録ください。







 

 

コメント

Featured Event

2017年9 月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30