An external script for getting cloudwatch metrics into Zabbix
Usage: zabbix-cloudwatch
-h, --help This Message
-n, --namespace Namespace (AWS/Autoscaling, AWS/EC2, etc...)
-m, --metricname Metric Name (GroupInServiceInstances,EstimatedCharges, etc...)
-d, --dimensions Dimensions array (f.e.: [{ :name => 'dim1', :value => 'val1'}, { :name => 'dim2', :value => 'val2'}])
-t, --monitoring-type detailed|basic|manual Default: basic
--seconds-ago Start collecting data some seconds ago
-s, --statistic Minimum|Maximum|Average|Sum|SampleCount Default: Average
--aws-access-key AWS Access Key
--aws-secret-key AWS Secret Key
--aws-region AWS Region Default: us-east-1
- Currently tested against ruby 1.8.7, 1.9.3, and 2.0.0
- for some of the gem dependencies, you will need the ruby development packages, gcc, libxml2, and libxslt
Modify these steps to taste (examples given running on the Amazon AMI 2013.03):
yum install ruby ruby-devel rubygems gcc libxml2-devel libxslt-devel
gem install bundler zabbix-cloudwatch
ln -s $(which zabbix-cloudwatch) /var/lib/zabbixsrv/externalscripts/zabbix-cloudwatch
#We've made patches, lets fix the gem we just installed
gem contents zabbix-cloudwatch
#replace the bin/zabbix-cloudwatch & lib/zabbix-cloudwatch.rb in the gem files listed above with the local copies
#I'm not a ruby dev, so I'm not sure how to install this gem from a source dir
zabbix-cloudwatch -n AWS/EC2 \
-m CPUUtilization \
-d AutoScalingGroupName \
-v your-auto-scaling-group \
-t detailed \
-s Sum
or
zabbix-cloudwatch -n AWS/ELB \
-m HealthyHostCount \
-d LoadBalancerName \ #This is supposed to be a key for a key value filter, below you define the value
-v NGINX #This should be your ELB name
The following actions need to be allowed in IAM for this script to work with the keys you provide:
"cloudwatch:DescribeAlarms"
"cloudwatch:GetMetricStatistics"
There are (3) ways to get your AWS Credentials into zabbix-cloudwatch
.
Note that none of these options are "safe", so make sure you are using a set of IAM Keys with extremely restricted permissions.
export AWS_ACCESS_KEY_ID="YOUR ACCESS KEY"
export AWS_SECRET_ACCESS_KEY="YOUR SECRET ACCESS KEY"
export AWS_REGION="YOUR AWS REGION"
If you intend to do it this way, I suggest you make a copy of the binary and place it in your zabbix externalscript path (instead of the suggested symlink in the installation example).
Find the binary like this:
ls $(gem env gemdir)/gems/zabbix-cloudwatch-$(zabbix-cloudwatch --version)/bin/zabbix-cloudwatch
And place it in your externalscripts path like this (your zabbix path/user/group may be different):
cp $(gem env gemdir)/gems/zabbix-cloudwatch-$(zabbix-cloudwatch --version)/bin/zabbix-cloudwatch \
/var/lib/zabbixsrv/externalscripts/
chown zabbix:zabbix /var/lib/zabbixsrv/externalscripts/zabbix-cloudwatch
The class variables for this are at the very top of the file for your convenience.
zabbix-cloudwatch -n AWS/AutoScaling \
-m GroupInServiceInstances \
-d AutoScalingGroupName \
-v your-auto-scaling-group \
--aws-access-key 'YOUR ACCESS KEY' \
--aws-secret-key 'YOUR SECRET KEY' \
--aws-region 'YOUR AWS REGION'
zabbix-cloudwatch -n AWS/Billing \
-m EstimatedCharges \
--dimensions "[{:name =>'ServiceName',:value =>'AmazonEC2'},{:name =>'LinkedAccount',:value =>'0123456789'},{:name =>'Currency',:value =>'USD'}]" \
--aws-access-key 'YOUR ACCESS KEY' \
--aws-secret-key 'YOUR SECRET KEY' \
--aws-region 'YOUR AWS REGION' \
--monitoring-type 'manual' \
--seconds-ago=18000
The order of preference that this gem uses for the region and keys (individually) are:
- Commandline flag
- Within the binary
- Environment Variable