AgentSkillsCN

grafana-azure

将 Grafana OSS 部署至 Azure 容器应用。适用于部署 Grafana 以实现指标、日志与追踪的可视化,并可选配 PostgreSQL 后端。

SKILL.md
--- frontmatter
name: grafana-azure
description: Deploy Grafana OSS to Azure Container Apps. Use when deploying Grafana for metrics, logs, and traces visualization with optional PostgreSQL backend.

Grafana Azure Deployment Skill

Deploy Grafana OSS to Azure Container Apps using Bicep and Azure Developer CLI (azd).

Reproducibility Verified: This deployment has been tested multiple times from scratch. Deploy time: ~2 minutes.

Overview

Grafana is an open-source observability platform for metrics, logs, and traces visualization. This skill deploys Grafana OSS (not Azure Managed Grafana) to Azure Container Apps.

Architecture

code
┌─────────────────────────────────────────────────────────┐
│                  Resource Group                         │
│  ┌─────────────────┐    ┌─────────────────────────────┐ │
│  │ Log Analytics   │───▶│ Container Apps Environment  │ │
│  │ Workspace       │    │                             │ │
│  └─────────────────┘    │  ┌───────────────────────┐  │ │
│                         │  │ Grafana Container App │  │ │
│                         │  │ - Port 3000           │  │ │
│                         │  │ - SQLite (default)    │  │ │
│                         │  │ - Scale 0-3 replicas  │  │ │
│                         │  └───────────────────────┘  │ │
│                         └─────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘

Quick Start (Verified)

bash
# 1. Register providers (one-time per subscription)
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

# 2. Create environment
azd env new my-grafana-env

# 3. Set required variables
azd env set AZURE_SUBSCRIPTION_ID "$(az account show --query id -o tsv)"
azd env set AZURE_LOCATION "westus"
azd env set GRAFANA_ADMIN_PASSWORD "$(openssl rand -base64 16)"

# 4. Deploy (~2 minutes)
azd up

# 5. Access Grafana
azd env get-value GRAFANA_URL
# Login: admin / <your GRAFANA_ADMIN_PASSWORD>

Deployment time breakdown:

  • Resource Group: ~4s
  • Log Analytics: ~25s
  • Container Apps Environment: ~38s
  • Grafana Container App: ~10s
  • Total: ~2 minutes

Parameters

ParameterDescriptionDefaultRequired
environmentNameEnvironment name (used for resource naming)-Yes
locationAzure regionwestusNo
grafanaImageContainer imagedocker.io/grafana/grafana:latestNo
grafanaAdminUserAdmin usernameadminNo
grafanaAdminPasswordAdmin password-Yes

Environment Variables

Grafana is configured via environment variables in the Container App:

VariableDescriptionValue
GF_SECURITY_ADMIN_USERAdmin usernameFrom parameter
GF_SECURITY_ADMIN_PASSWORDAdmin passwordFrom secret
GF_SERVER_HTTP_PORTHTTP port3000
GF_SERVER_ROOT_URLPublic URLAuto-configured
GF_AUTH_ANONYMOUS_ENABLEDAnonymous accessfalse

See config/environment-variables.md for full list.

Health Probes

TypePathPortInterval
Liveness/api/health300030s
Readiness/api/health300010s
Startup/api/health300010s (30 failures allowed)

Outputs

After deployment:

  • GRAFANA_URL: Public HTTPS URL
  • GRAFANA_FQDN: Container App FQDN
  • GRAFANA_ADMIN_USER: Admin username

Verification

bash
# Health check
curl https://<GRAFANA_FQDN>/api/health

# Admin login test
curl -u admin:YourPassword https://<GRAFANA_FQDN>/api/org

Scaling

  • Min replicas: 0 (scale to zero when idle)
  • Max replicas: 3
  • Scaling rule: HTTP concurrent requests (10 per replica)

Storage Considerations

By default, Grafana uses SQLite which stores data in the container. For production:

  1. Add Azure Files for persistent storage
  2. Or use PostgreSQL/MySQL backend

Tear Down

bash
azd down --force --purge

Note: Teardown takes 3-5 minutes (Container Apps environment deletion is slow).

Comparison with n8n Deployment

AspectGrafanan8n
DatabaseSQLite (default)PostgreSQL (required)
Port30005678
Resources0.5 CPU, 1GB RAM1 CPU, 2GB RAM
ComplexitySimpleModerate
Deploy Time~2 minutes~5 minutes

Troubleshooting

See troubleshooting.md for common issues and lessons learned.