やりたいこと
最近、ようやくAWSを触り始めました。いやー楽しいですね。全然わかんないけどw。
趣味のため、無料枠でAWSのいろいろなサービスを使って遊んでします。
が、何が無料枠か否か理解しておらずコストが突然跳ね上がったときに気付きたいと思い、
Zabbixで、一日に一回、AWSのコストをモニタリング(以下)するようにしました。
もうちょっと具体的に
- AWSのトータルコストと各サービスのコストをモニタリング(1日1回)
- トータルコストに対して、閾値(WARN/HIGH)のトリガーを設定できます。
- zabbix-agentとaws-cli(aws ce)を使用します。
- aws-cliの実行方法(awsコマンド+jq)は、以下URLを参考(ありがとうございます!)
注意事項
- AWSのCostExplorerを利用するためコストが発生します。
- CostExplorerを実行するたびに、0.01USD発生します(2020/06/24現在)
- 当機能を使用すると、1日に2回CostExplorerを呼び出すため、0.02USDの費用が発生します。
内容
作成物は以下の2ファイル (githubに登録,下図でいうオレンジ部分)
https://github.com/mishikawan/aws-getcost-zabbix-template
- zabbix-agentの設定ファイル
- zabbix_agentd.d/userparameter_awscli.conf
- zabbixのテンプレート
- zabbix_template/zbx_AWSCost_templates.xml
稼働条件
- Linuxサーバ(検証環境はオンプレのCentOS8)が稼働しており、以下が動いていること
- zabbixサーバ(検証環境は4.0)
- AWSCLI
- jqコマンド
導入手順
1.JQのインストール
yum install jq
2.AWSCLI導入(既に導入されていれば不要)
# pip3 install awscli
3.zabbixユーザでのAWSコンフィグ設定(既に設定されていれば不要)
3-1.zabbixユーザのホームディレクトリのパスを調べる
# egrep zabbix /etc/passwd
zabbix:x:2000:2000:Zabbix:/var/lib/zabbix:/sbin/nologin
3-2.zabbixユーザのホームディレクトリ(上記例で/var/lib/zabbix)が無い場合は作成します
# mkdir /var/lib/zabbix
3-3.AWSコンフィグ用のファイルを設置します
# mkdir /var/lib/zabbix/.aws
# cat > /var/lib/zabbix/.aws/config
[default]
output=json
^D
# cat > /var/lib/zabbix/.aws/credentials
[default]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXX
^D
# chown -R zabbix:zabbix /var/lib/zabbix/.aws
4.zabbix_angentファイルを/etc/zabbix/zabbix_agentd.d/配下に設置
# cp zabbix_template/zbx_AWSCost_templates.xml /etc/zabbix/zabbix_agentd.d/.
# systemctl restart zabbix-agent.service
5.設置したzabbix_agentが機能していることを確認します
5-1.zabbix_agentその1: aws.getcost
# zabbix_get -s 127.0.0.1 -k "aws.getcost"
{"AWS Config":"0"
,"AWS Cost Explorer":"0"
,"AWS Elemental MediaStore":"0"
,"AWS Key Management Service":"0"
,"AWS Lambda":"0"
,"AWS Systems Manager":"0"
,"Amazon API Gateway":"0"
,"Amazon CloudFront":"0"
,"EC2 - Other":"0"
,"Amazon Elastic Compute Cloud - Compute":"0"
,"Amazon Elastic Load Balancing":"0"
,"Amazon Simple Notification Service":"0"
,"Amazon Simple Queue Service":"0"
,"Amazon Simple Storage Service":"0"
,"Amazon Virtual Private Cloud":"0"
,"AmazonCloudWatch":"0"
,"Tax":"0"
}
5-2.zabbix_agentその2: aws.getcosttotal
# zabbix_get -s 127.0.0.1 -k "aws.getcosttotal"
{"Total":"0"}
6.zabbix_templateファイルをZABBIXにインポート
必要に応じて、template内のMacrosの内容(以下)を変更します。
Macro | Value | 備考 |
---|---|---|
{$BUDGET_HIGH} | 100 | コストの閾値 100USD超えればアラート(深刻度=HIGH) |
{$BUDGET_WARNING} | 10 | コストの閾値 10USD超えればアラート(深刻度=WARNING) |
{$COSTCHECK_DATETIME} | h11m00 | Cost Explorerを呼び出す時間 (h11m00 = 11:00) |