[OpsJAWS: やってみようシリーズ] Auto Scaling × Zabbix連携によるEC2インスタンス監視自動化の実現
Partner SA 酒徳です。こんにちは。本日のやってみようシリーズはTIS株式会社三好様にZabbixとAutoScalingの連携についてご紹介頂きます。
TIS株式会社の三好です。TISから提供しているTISエンタープライズOSSサポートサービスの取り組みの一環として行っているAWSとZabbixの効果的な連携検証の結果を連載にてご紹介しています。第4回はAuto Scalingとの連携をご紹介します。
1.Auto Scaling × Zabbix連携の紹介・特徴
Auto Scalingは、EC2インスタンス群の使用率が高ければEC2インスタンスを拡張(追加)したり、逆に使用率が低ければ縮小(削除)したり、利用者が設定した閾値に応じたEC2インスタンスのスケーリングを行う機能です。
第4回では、Auto Scalingで自動拡張・縮小されるEC2インスタンス群の情報を周期的に監視して次のような設定を自動化し、Zabbixの監視対象ホストを自動登録・更新・自動無効化できる連携方法をご紹介します。
・Auto Scalingで追加されたEC2インスタンスを監視ホストに設定する。もしくはAuto Scalingで削除されたEC2インスタンスを監視ホストから除外(無効化)する。
・EC2インスタンスのIPアドレスを抽出して、監視ホスト設定の標準インタフェースに設定する。(シンプルチェック、Zabbixエージェント等で利用可能)
・ホストグループを作成し、監視ホストの所属グループを設定する。
・監視ホストにテンプレートを割り当てて、監視用アイテムを設定する。
もちろん、第1回の「CloudWatch × Zabbix連携による統合監視実現」でご紹介したテンプレートも割り当てることができるので、AWSのサービス監視に特化した、より詳細な監視設定の自動化を実現することもできます。
2. Auto Scaling × Zabbix連携の設定
連携スクリプトとテンプレートの説明
概要
Auto Scalingで管理しているEC2インスタンスのインスタンスID・Auto Scalingグループ名・タグ等を参照できるクライアント情報や、EC2インスタンスに割り当てられるインタフェースを参照できるリソース情報は、CloudWatchのメトリックス情報と同様にAWS SDKのBoto3のAPIを経由して参照できるようになっています。
本連携スクリプトでは、Boto3のAPIで受け取ったAuto ScalingとEC2インスタンスの情報をZabbix API のhostgroup, host, hostinterfaceに渡し、「ホストグループの追加」「ホストの追加・削除やホストグループ・テンプレートの割り当て」「ホストのインタフェース設定」を行っています。本連携スクリプトの処理を定期的に実行することで、Auto Scalingで管理しているEC2インスタンスの情報を自動的に連携します。具体的な設定手順は、後述の「連携スクリプトとテンプレートの設定手順」を参照してください。また、Zabbix APIについての詳細は、以下のドキュメントを参照してください。
[API参考]
https://www.zabbix.com/documentation/2.2/manual/api
[本連携スクリプトで利用しているAPI]
https://www.zabbix.com/documentation/2.2/manual/api/reference/host
https://www.zabbix.com/documentation/2.2/manual/api/reference/hostgroup
https://www.zabbix.com/documentation/2.2/manual/api/reference/hostinterface
動作環境
本連携スクリプトとテンプレートは、以下の環境で動作確認済みです。
* CentOS7.2 もしくは Amazon Linux 2016.03
* Python 2.7 (CentOS: 2.7.8, Amazon Linux 2016.03: 2.7.10)
* boto3 - 1.3.1
* zabbix-api - 0.4
* Zabbix2.2系および3.0系
連携スクリプトとテンプレートの設定手順
1.Auto Scalingグループ名の設定
本連携スクリプトでは、Auto Scalingグループのグループ名を元にホストグループを作成して監視ホストを所属させます。AWSマネジメントコンソールの[EC2ダッシュボード]>[AUTO SCALING]>[Auto Scaling グループ]を開き、Zabbix上のホストグループとして管理しやすいグループ名でAuto Scalingグループを作成してください。
※Zabbix上に存在するホストグループ名をAuto Scalingグループ名として設定することも可能です。
グループ名:任意
<グループ名の例>
Web servers group
2.Auto Scalingグループのタグ設定
監視ホスト登録時に自動でテンプレートを割り当てる場合は、Auto Scalingグループのタグを追加します。AWSマネジメントコンソールの[EC2ダッシュボード]>[AUTO SCALING]>[Auto Scaling グループ]を開き、Auto Scalingのグループに以下のタグを追加してください。複数のテンプレートを割り当てる場合は、テンプレート名をカンマ区切りで設定してください。
※テンプレートを割り当てる必要がない場合は、タグの追加は不要です。
※[Template Zabbix Agent]テンプレート等、Zabbixエージェントを利用するテンプレートを割り当てて監視する場合は、監視対象のEC2インスタンスにZabbixエージェントを別途インストールする必要があります。
キー:ZabbixTemplates
値:Zabbix上のテンプレート名
<値の例>
Template OS Linux (ひとつの場合)
Template OS Linux,Template AWS EC2 (複数の場合)
3.ライブラリのインストール
この連携スクリプトを動作させるには、以下のライブラリを事前にインストールする必要があります。
・boto3 (Python用の公式AWS SDK)
・zabbix-api (Python用のZabbix API)
pipコマンドが使える環境の場合は、以下のようにインストールします。boto3をインストール済みの場合は、zabbix-apiのみインストールしてください。
コマンド実行例:
# pip install boto3 zabbix-api
4.連携用Pythonスクリプトの配置
まず、連携スクリプトを配置します。スクリプトを以下のリンク先からダウンロードしてください。
https://github.com/tech-sketch/zabbix_aws_template/blob/master/scripts/autoscaling_zabbix.py
ダウンロードしたスクリプトを、Zabbix Serverの外部チェックスクリプト用ディレクトリに配置します。外部チェックスクリプト用ディレクトリは、zabbix_server.confの「ExternalScripts」で指定されているディレクトリです。
例:
ExternalScripts=/usr/lib/zabbix/externalscripts
配置したスクリプト(autoscaling_zabbix.py)に、Zabbix Server起動ユーザ(デフォルトではzabbixユーザ)が実行できる権限を付与してください。
コマンド実行例:
# chown zabbix:zabbix autoscaling_zabbix.py
# chmod u+x autoscaling_zabbix.py
5.Zabbix監視テンプレートのインポート
次に、Zabbixの管理画面から監視設定のテンプレートを登録します。テンプレートを以下のリンク先からダウンロードしてください。
Zabbix 3.0用テンプレート(https://github.com/tech-sketch/zabbix_aws_template/blob/master/templates/3.0/autoscaling_template.xml)
Zabbix 2.2用テンプレート(https://github.com/tech-sketch/zabbix_aws_template/blob/master/templates/2.2/autoscaling_template.xml)
Zabbixの管理画面から[設定]→[テンプレート]→[インポート]と辿り、ダウンロードしたテンプレートを「インポートするファイル」に設定し、インポートを実行します。
これにより以下のテンプレートが登録されます。
テンプレート名 |
用途 |
Template AWS Auto Scaling |
連携スクリプト(autoscaling_zabbix.py)を定期実行用監視アイテムに登録し、Auto Scalingで追加・削除するEC2インスタンスの監視ホスト自動登録・更新・自動無効化を実施します。 |
6.Zabbixの監視ホスト登録とテンプレート割り当て
最後に、監視ホストを登録して、手順4.でインポートしたテンプレートを割り当てます。Zabbix管理画面の[設定]→[ホスト]から以下のような情報を登録します。
設定項目 |
設定内容 |
ホスト名 |
任意 |
表示名 |
任意 Auto Scaling連携用であると確認しやすい表示名に設定することをお勧めします。 |
グループ |
任意 最低でも1つのグループに登録する必要があります。 |
インタフェース |
任意 連携スクリプト(autoscaling_zabbix.py)ではインタフェース情報は利用しませんが、最低でも1つのインタフェースを登録する必要があります。 |
テンプレート |
Template AWS Auto Scaling |
マクロ |
以下のマクロを登録します。 {$REGION}:AWSリージョン {$KEY}: AWSアクセスキーID {$SECRET}:AWSシークレットアクセスキー {$ZBX_URL}:Zabbix管理画面のURL(デフォルトはhttp://localhost/zabbix) {$ZBX_USER}:Zabbixのログインユーザ名(デフォルトはAdmin) {$ZBX_PASS}:Zabbixのログインパスワード(デフォルトはzabbix) {$SET_MACRO}:[Template AWS EC2]用ユーザマクロ ({$REGION},{$KEY},{$SECRET})の登録 [True か False](デフォルトはFalse) {$PREFFER_IF}: 監視ホストの標準インタフェースに設定する、EC2インスタンスのインタフェース [Private か Public](デフォルトはPrivate) |
[ホスト名・表示名・グループ・インタフェースの設定]
[テンプレートの設定]
[マクロの設定]
設定は以上で終了です。
ご紹介したテンプレートでは、Auto Scalingで追加・削除するEC2インスタンスの監視ホスト自動登録・更新・自動無効化処理を1800秒おきに実行するよう設定しています。EC2インスタンスの状態監視をより詳細に行いたい場合は、アイテム設定の更新間隔を短く設定してください。
CloudWatch連携の設定
第1回~第2回でご紹介したCloudWatch連携スクリプトを動かす場合には、[Template AWS EC2]をタグの[ZabbixTemplates]キーに設定する必要があります。AWSマネジメントコンソールで、[EC2]サービスの[Auto Scalingグループ]を開き、連携するグループにタグを追加してください。
以下は、[Template OS Linux]と[Template AWS EC2]のテンプレートを割り当てるためのタグ設定例です。Auto Scalingで起動したEC2インスタンスは、[Template OS Linux]と[Template AWS EC2]の監視アイテムを設定した状態になるため、CloudWatch連携スクリプトによる監視も自動的に開始できます。
以下は、CloudWatch連携も有効な状態に自動登録されたホストの表示例です。①がAuto Scalingグループの名前に対応する箇所、②がAuto Scalingグループのタグに対応する箇所です。
[AWSのAuto Scalingグループの設定]
[Auto Scalingで追加されたEC2インスタンス]
[Zabbix上に登録された監視ホストの所属グループ]
[Zabbix上に登録された監視ホストとテンプレートのリンク]
連携スクリプトの制限事項
本連携スクリプトでは、Zabbix上のインタフェースを設定する動作に制限事項があります。以下の点について、ご注意ください。
・ホスト自動登録後にEC2インスタンスのパブリックIPを削除すると、連携スクリプトではホスト設定の中でどのインタフェースが不要であるか判定できないため、ホスト設定に不要なインタフェースが残ります。不要なインタフェースを削除するには、Zabbix上のホスト設定から手動で削除する必要があります。
・ホスト自動登録後にZabbix上で新しいインタフェースを追加し、標準インタフェースを変更しても、連携スクリプトを定期実行する際に{$PREFFER_IF}マクロの設定に従って標準インタフェースを再設定します。EC2インスタンスのプライベートIPもしくはパブリックIPとは関係ないインタフェース(例:後から追加した127.0.0.1など)を標準インタフェースとして設定することはできません。
設定上の注意事項とIAMロール利用時の設定変更
これまでの設定は、API操作に必要なAWSアカウントのクレデンシャル情報をマクロで設定する例です。クレデンシャル情報がZabbix管理画面上で可視状態となるため、複数ユーザでZabbixをご利用の際には扱いにご注意ください。
EC2インスタンスには、クレデンシャル情報を用いずにリソースにアクセス権限を付与するIAMロールを適用することが可能です。ZabbixをEC2インスタンス上で稼働させる場合は、アクセスキーIDとシークレットキーがZabbix管理画面上に見えないよう、EC2インスタンスに[AmazonEC2ReadOnlyAccess]のポリシーをアタッチしたIAMロールを適用することをお勧めします。IAMロール適用後は、以下の手順で、ご紹介しているテンプレートのアクセスキーIDとシークレットキーに関するキーを変更してください。
1.Template AWS Auto Scalingの変更点
Zabbix管理画面の[設定]→[テンプレート]→[Template AWS Auto Scaling]→[アイテム]→[Collect Auto Scaling Instances]を開き、キーから『"-a","{$KEY}","-s","{$SECRET}",』を削除します。
2.Template AWS EC2の変更点
Zabbix管理画面の[設定]→[テンプレート]→[Template AWS EC2]→[アイテム]→[Collect CloudWatch metric stats EC2] を開き、キーから『"-a","{$KEY}","-s","{$SECRET}",』を削除します。
さらに、[ディスカバリルール]→[CloudWatch metrics list discovery EC2]を開き、同様にキーから『"-a","{$KEY}","-s","{$SECRET}",』を削除します。
3.ホスト設定の変更点
[Template AWS Auto Scaling]を割り当てたホストのマクロには、{$KEY}と{$SECRET}の値は設定不要です。値を空欄にするか、マクロ自体を削除してください。
3. まとめ
今回の記事では、Auto Scalingの情報とZabbix APIを利用して、EC2インスタンスの情報収集とZabbixの監視ホスト設定を自動化する方法についてご紹介しました。
「頻繁にスケーリングする」「管理するインスタンスの台数が非常に多い」「登録するテンプレートが多い」「グループごとにテンプレートを使い分けている」などなど、管理者が手作業で管理することが困難な環境であっても、連携スクリプトやAPIを活用することで設定・管理のコストを大幅に抑えることも可能になってきます。Auto Scalingを利用中もしくは利用を検討中で設定・管理にお悩みのかたは、監視ホスト登録から監視設定までの全自動化をぜひお試しください。
6.参考情報
・[スクリプト・テンプレート公開リポジトリ]
https://github.com/tech-sketch/zabbix_aws_template
※ご紹介したスクリプト・テンプレートはすべてオープンソースとして公開しています。自由にご利用・ご活用ください。ご質問やサポートのご用命については以下7.お問い合わせ先よりご連絡をお願いします。
・[AWS運用管理フォーカスセミナー資料:AWSの便利な監視サービスと Zabbix監視の融合による効果]
7.お問い合わせ先
本記事に関するお問い合わせは以下までお願いします。
TIS株式会社 OSS推進室
メール: [email protected]
電話: 03-5337-4588
◆『TISエンタープライズOSSサポートサービス』
TISでは本記事での紹介内容等も含め様々なノウハウを駆使したOSSのサポートサービスを提供しています。企業にて安心してOSSをご利用いただけるようにするため、設計や構築のご支援(技術コンサルティングサービス)や運用・保守時のトラブル対応のご支援(プロダクトサポートサービス)を提供しています。
◆マネージドサービス『MOTHER』
TISは、クラウドサービスの活用が本格化した時代にあわせ、AWSなどのクラウドはもちろん、企業が持つプライベートクラウドやオンプレミスが組み合わされたマルチプラットフォーム環境の統合管理、障害監視、性能分析、運用自動化などのマネージドサービス『MOTHER』を提供しています。
http://www.tis.jp/service_solution/mother/
****
OpsJAWS メインページはこちら。
クラウド運用にご興味ある方は、こちらからOpsJAWSに登録ください。
コメント