[Managed by Monitoring Artist: DevOps / Docker / Kubernetes / AWS ECS / Zabbix / Zenoss / Terraform / Monitoring](http://www.monitoringartist.com 'DevOps / Docker / Kubernetes / AWS ECS / Zabbix / Zenoss / Terraform / Monitoring') # Grafana dashboards for AWS CloudWatch Set of AWS Grafana dashboards published on [grafana.com](https://grafana.com/dashboards?dataSource=cloudwatch) - 100k+ downloads. Doc: - [Cloudwatch datasource configuration](https://grafana.com/docs/features/datasources/cloudwatch/) - [Grafana doc](http://docs.grafana.org/) Feel free to create pull request for additional AWS resources/printscreens/... Please set your dashboard variables (`Region, ...`) after dashboard import. Empty dashboard variables are reason of initial *"Unable to call AWS API" or "Metric request error"* error. Import all Monitoring Artist AWS dashboards in one go (example script, `bash/curl/jq` required): ```bash #!/bin/bash jq --version >/dev/null 2>&1 || { echo >&2 "I require jq but it's not installed. Aborting."; exit 1; } ### Please edit grafana_* variables to match your Grafana setup: grafana_host="http://localhost:3000" grafana_cred="admin:admin" # Keep grafana_folder empty for adding the dashboards in "General" folder grafana_folder="AWS CloudWatch" ds=(1516 677 139 674 590 659 758 623 617 551 653 969 650 644 607 593 707 575 1519 581 584 2969 8050 11099 11154 11155 12979); folderId=$(curl -s -k -u "$grafana_cred" $grafana_host/api/folders | jq -r --arg grafana_folder "$grafana_folder" '.[] | select(.title==$grafana_folder).id') if [ -z "$folderId" ] ; then echo "Didn't get folderId" ; else echo "Got folderId $folderId" ; fi for d in "${ds[@]}"; do echo -n "Processing $d: " j=$(curl -s -k -u "$grafana_cred" $grafana_host/api/gnet/dashboards/$d | jq .json) payload="{\"dashboard\":$j,\"overwrite\":true" if [ ! -z "$folderId" ] ; then payload="${payload}, \"folderId\": $folderId }"; else payload="${payload} }" ; fi curl -s -k -u "$grafana_cred" -XPOST -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "$payload" \ $grafana_host/api/dashboards/import; echo "" done ``` Use [AWS Policy Generator](http://awspolicygen.s3.amazonaws.com/policygen.html), which fits your needs. Example of minimal IAM role for Grafana (CloudWatch + EC2 metrics): ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReadingMetricsFromCloudWatch", "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:ListMetrics", "cloudwatch:GetMetricStatistics", "cloudwatch:GetMetricData" ], "Resource": "*" }, { "Sid": "AllowReadingTagsInstancesRegionsFromEC2", "Effect": "Allow", "Action": [ "ec2:DescribeTags", "ec2:DescribeInstances", "ec2:DescribeRegions" ], "Resource": "*" }, { "Sid": "AllowReadingResourcesForTags", "Effect" : "Allow", "Action" : "tag:GetResources", "Resource" : "*" } ] } ``` You can also install this project as a Jsonnet library with [jsonnet-bundler](https://github.com/jsonnet-bundler/jsonnet-bundler): ```shell $ jb install github.com/monitoringartist/grafana-aws-cloudwatch-dashboards $ cat > aws-cloudwatch-dashboards.jsonnet <