Partner SA 酒徳です。やってみようシリーズはお楽しみ頂いていますでしょうか。本日はTIS三好様にAWS Billing DataのZabbixへの取り込み方についてご紹介頂きます。この辺りのTipsもZabbix on AWSユーザにとってはとても有益な情報になりますね!
TIS株式会社の三好です。TISから提供しているTISエンタープライズOSSサポートサービスの取り組みの一環として行っているAWSとZabbixの効果的な連携検証の結果を連載にてご紹介しています。第2回はBilling Dataとの連携です。
1.Billing Data × Zabbix連携の紹介・特徴
AWSのサービスでは、AWSマネジメントコンソールの通知機能で、確定した前月のサービス利用料をAWSアカウントのベースのメールアドレス宛てに通知することができます。また、CloudWatchでBilling Dataの監視を有効化することで、Alarmの閾値を設定しておけば、当月のサービス利用料が閾値を超えた場合に担当者宛てに通知することができます。
ですが、上記の機能以上のこと、たとえば「前月と当月で日々のサービス利用料を比較しながら監視する」などは、AWSのサービスだけでは実現することができません。
そこで、第2回では第1回の「CloudWatch x Zabbix連携による統合監視実現」で紹介したCloudWatch連携の仕組みを応用して課金情報を取得し、AWSのサービスだけでは実現できない監視機能をZabbixとの連携で実現する方法について紹介します。この連携を行うことで、サービス単位で収集できる課金情報をZabbixでサービスごとを監視できるだけでなく、次のようなメリットをもたらします。
過去のデータと比較できる
Zabbixの機能には、過去のデータと比較するための「タイムシフト監視機能」があります。このタイムシフト監視機能で過去の課金情報と現在の課金情報を比較するトリガーを作成し、「○日前と比較して利用料が△ドル増えていたら警告を通知する」といった形で過去と比較しながら監視することができます。
複合的な条件設定で詳細な通知ができる
たとえば、第1回のCloudWatch連携の仕組みと組み合わせ、「夜間で、EC2インスタンスのCPU使用率の平均値が低いにも関わらず、日中と同様にEC2インスタンスが稼働しており、サービス利用料が増加している」など、複合したトリガー発生条件を設定することにより、複雑・詳細な通知機能を実装することができます。
2. Billing Data × Zabbix連携の設定
連携スクリプトの説明
第1回と同様、監視アイテムはZabbix LLDにより各メトリックスの統計情報の登録先を自動設定し、統計情報はZabbix Senderの仕組みを利用してプッシュ型で登録するスクリプトを定期実行します。
課金情報はEC2,EBS,ELB,RDSとは異なり、メトリックス情報の名前空間はAWS/Billing、メトリック名はEstimatedChargesと固定になっています。そのため、どのサービスの課金情報かを区別して監視できるよう、連携スクリプトは以下のようにAmazonEC2,AmazonRDS,AWSLambda等のサービス名を含めた形のJSONフォーマットでメトリックス情報の応答を返します。
LLD用JSONフォーマット
---
{
"data": [
{ ★1ここから
"{#METRIC.UNIT}": "USD",
"{#METRIC.NAME}": "EstimatedCharges",
"{#METRIC.NAMESPACE}": "AWS/Billing",
"{#METRIC.SERVICENAME}": ""
},★1ここまではAWSアカウント全体の課金額を示すLLDのアイテム
・・・省略
{ ★2ここから
"{#METRIC.UNIT}": "USD",
"{#METRIC.NAME}": "EstimatedCharges",
"{#METRIC.NAMESPACE}": "AWS/Billing",
"{#METRIC.SERVICENAME}": "AWSLambda" ★サービス名
} ★2ここまではAWSLambdaサービスの課金額を示すLLDのアイテム
]
}
---
連携スクリプトとテンプレートの設定手順
以下の3ステップで、連携スクリプトとテンプレートの設定が可能です。
- 連携用Pythonスクリプトの配置
- Zabbix監視テンプレートのインポート
- Zabbixの監視ホスト登録とテンプレート割り当て
動作確認済みの環境は以下の通りです。
* CentOS7.2 もしくは Amazon Linux 2016.03
* Python 2.7 (CentOS: 2.7.8, Amazon Linux 2016.03: 2.7.10)
* boto3 (AWS SDK for Python)
* Zabbix2.2系および3.0系
事前準備
この連携スクリプトを稼働するには、Python用の公式AWS SDKであるBoto3が必要です。pipコマンドが使える環境の場合は、以下のようにインストールします。
コマンド実行例:
# pip install boto3
1.連携用Pythonスクリプトの配置
まず、連携スクリプトを配置します。スクリプトを以下のリンク先からダウンロードしてください。
https://github.com/tech-sketch/zabbix_aws_template/blob/master/scripts/cloudwatch_zabbix.py
ダウンロードしたスクリプトを、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
※第1回の記事で紹介した手順を実施済みで、連携スクリプトファイルが存在している場合は、上書きで配置してください。
2.Zabbix監視テンプレートのインポート
次に、Zabbixの管理画面から監視設定のテンプレートを登録します。テンプレートを以下のリンク先からダウンロードしてください。
Zabbix 3.0用テンプレート(https://github.com/tech-sketch/zabbix_aws_template/blob/master/templates/3.0/awsbilling_template.xml)
Zabbix 2.2用テンプレート(https://github.com/tech-sketch/zabbix_aws_template/blob/master/templates/2.2/awsbilling_template.xml)
Zabbixの管理画面から[設定]→[テンプレート]→[インポート]と辿り、ダウンロードしたテンプレートを「インポートするファイル」に設定し、インポートを実行します。
これにより以下の監視テンプレートが登録されます。
テンプレート名 |
用途 |
Template AWS Billing |
課金情報のメトリックス監視 |
※連携スクリプトファイルは、課金情報の他、EC2,EBS,ELB,RDSの設定に対応しています。課金情報の監視については、単体のAWSアカウントの監視のみに対応しています。EC2,EBS,ELB,RDS以外のサービスのCloudWatch連携や、連結したAWSアカウントでの連携が必要な場合はご相談ください。
3.Zabbixの監視ホスト登録とテンプレート割り当て
最後に、監視ホストを登録して、手順3.でインポートしたテンプレートを割り当てます。Zabbix管理画面の[設定]→[ホスト]から以下のような情報を登録します。
設定項目 |
設定内容 |
ホスト名 |
任意 |
表示名 |
任意(AWSアカウントと紐付けて確認しやすい表示名にすることをお勧めします) |
グループ |
任意(最低でも1つのグループに登録する必要があります) |
インタフェース |
任意(本連携ではインタフェース情報は利用しませんが、最低でも1つのインタフェースを登録する必要があります) |
テンプレート |
Template AWS Billing |
マクロ |
以下のマクロを登録 {$KEY}: AWSアクセスキーID {$SECRET}:AWSシークレットアクセスキー ※注意: 上記設定は、API操作に必要なクレデンシャル情報を、マクロで設定する例です。複数ユーザでZabbix環境をご利用の際には扱いにご注意ください。 |
設定は以上で終了です。
紹介したテンプレートでは、監視アイテムの自動設定処理は1時間おきに実行するよう設定しています。第1回は早めに処理したい場合には、ディスカバリルールの監視間隔を一時的に短く調整してください。Zabbix3.0の場合、定期設定により指定の時間帯に臨時で処理が走るよう設定してください。
3. 課金情報の監視例
グラフ化する
連携スクリプトが収集した課金情報は、自動的にサービスごとのアイテムとして登録され、Zabbixの管理画面で参照できるようになります。Zabbixの管理画面から[監視データ]→[最新データ]を開くと、サービスごとのアイテムが並び、[最新の値]欄に利用料が表示されます。また、同画面の[グラフ]を開けば、定期的に収集した課金情報の履歴がグラフ形式で参照できます。
もちろん、サービスすべての利用料をひとまとめにグラフ化して監視することもできます。Zabbixの管理画面から[設定]→[ホスト]→課金情報の監視ホスト名→[グラフ]→[グラフの作成]で、グラフのタイプや、まとめたいアイテムを選択してグラフ化します。
以下は積算グラフ化した例です。
タイムシフト監視機能で監視する
Zabbixのタイムシフト監視機能を利用して、過去の課金情報と比較します。ご紹介するテンプレートでは、デフォルトの[ヒストリ保存期間]を90日と設定していますので、最大で約3か月前の課金情報と比較することができます。さらに長期的な分析が必要な場合には、[ヒストリ保存期間]の設定を長めの日数に設定してください。
以下は比較対象が1日前と極端な例ですが、トリガー関数のlast()でEC2の利用料を比較し、過去データとの差額が+5ドルを超えている状態を検知するトリガーを作成しています。
このトリガーを実行条件としたアクションを作成すれば、条件式を満たす利用料の変動があった場合に、メールやSMS等で管理者に通知することができます。
Zabbix2.2系および3.0系でサポートされているトリガー関数については、以下のマニュアルを参照してください。
Zabbix2.2系
https://www.zabbix.com/documentation/2.2/jp/manual/appendix/triggers/functions
Zabbix3.0系
https://www.zabbix.com/documentation/3.0/manual/appendix/triggers/functions
まとめ
今回の記事では、CloudWatch連携を利用して課金情報を収集し、Zabbixで監視する方法についてご紹介しました。Zabbixで監視することで、AWSマネジメントコンソールでは実現できない、2か月、3か月前の過去データと比較して当月の課金情報を監視することも実現できます。また、Zabbix3.0であれば、予測関数の forecast()、timeleft()を利用して予測監視するといった作りこみも可能になりますので、Zabbixでの機能を活用した監視方法を試してみてはいかがでしょうか。
5. 参考情報
・[スクリプト・テンプレート公開リポジトリ]
https://github.com/tech-sketch/zabbix_aws_template
※ご紹介したスクリプト・テンプレートはすべてオープンソースとして公開しています。自由にご利用・ご活用ください。ご質問やサポートのご用命については以下6.お問い合わせ先よりご連絡をお願いします。
・[AWS運用管理フォーカスセミナー資料:AWSの便利な監視サービスと Zabbix監視の融合による効果]
6. お問い合わせ先
本記事に関するお問い合わせは以下までお願いします。
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に登録ください。