From grafana-app-sdk
Configures and troubleshoots Grafana Cloud integrations for AWS, Azure, and Confluent Cloud using hosted exporters and AWS Firehose for metrics and logs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/grafana-app-sdk:cloud-integrationsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Grafana Cloud Integrations connect cloud provider monitoring APIs to your Grafana stack without
Grafana Cloud Integrations connect cloud provider monitoring APIs to your Grafana stack without running your own exporters. Hosted exporters scrape cloud APIs on your behalf and push metrics to your Grafana Cloud stack.
Supported hosted exporters:
/metrics endpoint behind authAWS Firehose receiver - ingests CloudWatch Logs and Metrics Streams pushed via Kinesis Firehose (near real-time, lower latency than API scraping).
In Grafana Cloud: Connections > Add new connection (or Connections > Cloud Provider).
Available paths:
The hosted exporter scrapes CloudWatch API every 60s. Latency: ~1-5 minutes.
Required IAM permissions (minimum):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics",
"tag:GetResources",
"ec2:DescribeInstances",
"ec2:DescribeRegions"
],
"Resource": "*"
}
]
}
Setup steps:
Supported namespaces: EC2, RDS, ELB/ALB, S3, Lambda, ECS, SQS, SNS, ElastiCache, Kinesis, DynamoDB, and 50+ others.
Near-real-time metrics and logs via CloudWatch Metric Streams and CloudWatch Logs subscriptions.
Architecture:
CloudWatch Metric Streams → Kinesis Firehose → Grafana Cloud Firehose Receiver
CloudWatch Logs (subscription filter) → Kinesis Firehose → Grafana Cloud Firehose Receiver
Setup:
OpenTelemetry 1.0Terraform for Firehose setup:
resource "aws_cloudwatch_metric_stream" "grafana_cloud" {
name = "grafana-cloud-metrics"
role_arn = aws_iam_role.firehose_role.arn
firehose_arn = aws_kinesis_firehose_delivery_stream.grafana.arn
output_format = "opentelemetry1.0"
# Optionally scope to specific namespaces
# include_filter { namespace = "AWS/EC2" }
# include_filter { namespace = "AWS/RDS" }
}
resource "aws_kinesis_firehose_delivery_stream" "grafana" {
name = "grafana-cloud-stream"
destination = "http_endpoint"
http_endpoint_configuration {
url = var.grafana_firehose_endpoint
access_key = var.grafana_firehose_access_key
name = "Grafana Cloud"
content_encoding = "GZIP"
s3_configuration {
role_arn = aws_iam_role.firehose_role.arn
bucket_arn = aws_s3_bucket.firehose_backup.arn
}
}
}
Required Azure permissions:
Create a service principal with the Monitoring Reader role on the subscription(s) to monitor.
# Create service principal
az ad sp create-for-rbac --name grafana-cloud-monitoring \
--role "Monitoring Reader" \
--scopes /subscriptions/<SUBSCRIPTION_ID>
# Output: appId (client ID), password (client secret), tenant
Setup in Grafana Cloud:
Supported resource types: Virtual Machines, App Service Plans, AKS, Azure SQL, CosmosDB, Storage Accounts, Event Hubs, Service Bus, Application Gateway, and others.
Required Confluent API credentials:
MetricsViewer roleSetup in Grafana Cloud:
Available metrics: Consumer lag, broker request rates, partition counts, replication lag, active controller count, and cluster-level health metrics.
# Check in Grafana Explore — query for the integration's job label
# For AWS:
{job="integrations/cloudwatch"}
# For Azure:
{job="integrations/azure-monitor"}
# Check metric arrival (replace with your stack's Prometheus endpoint)
curl -s -H "Authorization: Bearer <USER>:<API_KEY>" \
"https://prometheus-prod-XX-XX-X.grafana.net/api/prom/api/v1/labels" | \
jq '.data | map(select(startswith("aws_") or startswith("azure_")))'
The integration status is also visible in: Connections > [Integration name] > Status
Integration health indicators:
Last successful scrape - should be within the last 2 minutesSeries count - should be non-zero and stableError rate - should be 0%Every integration installs a set of pre-configured dashboards and alert rules automatically.
Find installed dashboards:
Find installed alert rules:
Modify without losing updates:
Hosted exporter not receiving data:
# Check the integration status via Grafana Cloud API
curl -s -H "Authorization: Bearer <STACK_ID>:<API_TOKEN>" \
"https://integrations-api.grafana.net/api/v1/integrations" | \
jq '.integrations[] | {name, status, lastScrapeTime, errorMessage}'
Common errors:
| Error | Cause | Fix |
|---|---|---|
AccessDenied (AWS) | IAM policy missing permissions | Add required actions to the IAM policy |
AuthorizationFailed (Azure) | Service principal missing role | Grant Monitoring Reader on the subscription |
401 Unauthorized (Confluent) | Wrong API credentials | Re-enter credentials; confirm Metrics API key (not Kafka key) |
No metrics found | Wrong namespace/resource type selected | Add the namespace in integration settings |
Scrape timeout | Network restriction | Ensure Grafana Cloud's IPs can reach the cloud provider API |
AWS-specific: CloudWatch API rate limiting
CloudWatch GetMetricData has a rate limit. If you have many resources, enable Metric Streams (Option B) instead of API polling to avoid throttling.
Hosted exporters scrape all metrics by default. Filter to reduce series count and cost.
AWS - select specific namespaces: In integration settings, switch from "All namespaces" to specific ones (e.g. EC2, RDS only).
AWS - filter by resource tags:
# In exporter configuration, add tag filters
discovery:
- type: AWS/EC2
filters:
- key: Environment
values: ["production"]
Azure - select specific resource types: Only enable the resource types you actually have dashboards for.
Use Adaptive Metrics to aggregate away unused label dimensions:
See the grafana-cloud/adaptive-metrics skill.
npx claudepluginhub grafana/skills --plugin grafana-app-sdkProvides expert guidance for Azure Managed Grafana: troubleshooting, security, configuration, data source wiring, alerts, private endpoints, and deployment.
Sends telemetry data (metrics, logs, traces, profiles) to Grafana Cloud using Prometheus remote write, OTLP, Loki push, or Alloy pipelines. Covers credentials management and ingestion method selection.
Deploys monitoring stacks like Prometheus, Grafana, Datadog with exporters, scrape targets, alerting rules, Grafana dashboards for Kubernetes or Docker.