Ejecuta Grafana con Docker Compose y una carpeta de provisioning
Inicia Grafana desde un archivo compose con toda la configuración montada como archivos.
Esta guía ejecuta Grafana y un data source de Prometheus en local con Docker Compose, con cada ajuste suministrado mediante archivos y variables de entorno. Nunca abres la interfaz para configurar nada. Necesitas Docker con el plugin Compose.
Estructura el proyecto
grafana-as-code/
├── compose.yaml
├── .env # secretos y versiones, no se sube a Git
├── grafana/
│ ├── grafana.ini
│ └── provisioning/
│ ├── datasources/
│ │ └── prometheus.yaml
│ ├── dashboards/
│ │ └── providers.yaml
│ ├── alerting/ # se añade en la guía de alertas
│ └── plugins/
├── dashboards/
│ └── overview.json
└── prometheus/
└── prometheus.yml
Mantén esto en Git. Añade .env a .gitignore y haz commit de un .env.example en su lugar.
El archivo compose
compose.yaml:
services:
grafana:
image: grafana/grafana:13.1.0 # fija una versión que hayas probado
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD}
GF_USERS_ALLOW_SIGN_UP: "false"
volumes:
- ./grafana/grafana.ini:/etc/grafana/grafana.ini:ro
- ./grafana/provisioning:/etc/grafana/provisioning:ro
- ./dashboards:/var/lib/grafana/dashboards:ro
- grafana-data:/var/lib/grafana
depends_on:
- prometheus
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
volumes:
grafana-data:
Los montajes importantes:
/etc/grafana/grafana.inies el archivo de configuración del servidor dentro de la imagen oficial./etc/grafana/provisioninges donde Grafana busca las carpetasdatasources,dashboards,alertingyplugins./var/lib/grafana/dashboardses una carpeta arbitraria para el JSON de dashboards. La ruta debe coincidir con la que definas en el proveedor de dashboards de abajo.grafana-dataes un volumen con nombre para la base de datos SQLite y los plugins de Grafana. Sin él, el estado se pierde cuando se recrea el contenedor.
Los montajes de configuración son de solo lectura a propósito: Grafana no necesita escribir en ellos.
.env:
GRAFANA_ADMIN_PASSWORD=change-me-before-sharing
Ten en cuenta que GF_SECURITY_ADMIN_PASSWORD solo se aplica la primera vez que Grafana crea su base de datos. Cambiarlo después en el archivo compose no tiene efecto sobre un volumen existente. Elimina el volumen para empezar de nuevo, o restablece la contraseña con la CLI.
Un grafana.ini mínimo
[server]
http_port = 3000
[analytics]
reporting_enabled = false
check_for_updates = false
[log]
mode = console
level = info
[auth]
disable_login_form = false
Todo lo que omitas recurre a los valores predeterminados de Grafana. La siguiente guía cubre las reglas completas de grafana.ini y las sobrescrituras GF_*.
Provisiona un data source
grafana/provisioning/datasources/prometheus.yaml:
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: false
El uid es lo que deberían referenciar los dashboards y las reglas de alertas, así que elige uno estable. Las siguientes guías explican cada campo.
Provisiona un proveedor de dashboards y un dashboard
grafana/provisioning/dashboards/providers.yaml:
apiVersion: 1
providers:
- name: default
type: file
updateIntervalSeconds: 30
allowUiUpdates: false
options:
path: /var/lib/grafana/dashboards
dashboards/overview.json (un dashboard mínimo; consulta la guía de dashboards para los detalles):
{
"uid": "overview",
"title": "Overview",
"schemaVersion": 39,
"panels": [
{
"id": 1,
"type": "timeseries",
"title": "Targets up",
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 },
"datasource": { "type": "prometheus", "uid": "prometheus" },
"targets": [
{ "refId": "A", "expr": "up", "datasource": { "type": "prometheus", "uid": "prometheus" } }
]
}
]
}
Y un pequeño prometheus/prometheus.yml para que haya datos que mostrar:
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
Arráncalo y comprueba sin la interfaz
docker compose up -d
docker compose logs grafana | grep -i provisioning
curl -s http://localhost:3000/api/health
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/datasources | jq '.[].name'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD "http://localhost:3000/api/search?type=dash-db" | jq '.[].title'
El endpoint de salud debería informar ok, la lista de data sources debería contener Prometheus y la búsqueda debería devolver Overview. Abre http://localhost:3000 si quieres ver el resultado, pero no se hizo clic en nada para llegar hasta aquí.
Cambia algo y observa cómo se aplica
- Edita
dashboards/overview.json. Dentro deupdateIntervalSecondsGrafana recoge el cambio sin reiniciar. - Edita el archivo del data source y reinicia:
docker compose restart grafana. Los data sources se leen al arrancar. - Elimina un archivo de dashboard. El dashboard se elimina a menos que el proveedor defina
disableDeletion: true.
Instala plugins desde la configuración
Los plugins pueden instalarse al arrancar el contenedor mediante una variable de entorno, así que permanecen en el archivo compose:
environment:
GF_PLUGINS_PREINSTALL: grafana-clock-panel
Las versiones antiguas usan GF_INSTALL_PLUGINS en su lugar. Consulta la documentación de tu versión, y ten en cuenta que el provisioning solo configura plugins que ya están instalados.
Limpia
docker compose down # conserva el volumen de datos
docker compose down -v # también elimina la base de datos de Grafana Guías populares
-
Opera Grafana como código: la visión de conjunto Qué puede vivir en archivos, qué necesita una API y cómo encajan las piezas. -
Configura el servidor de Grafana con grafana.ini y variables de entorno Sabe dónde viven los archivos de configuración, cómo se ordenan las sobrescrituras y cómo mantener los ajustes en Git. -
Provisiona dashboards desde archivos JSON Carga dashboards desde disco, asigna carpetas a partir de directorios y crea dashboards sin perder cambios. -
Provisiona reglas de alertas, contact points y políticas de notificación Define todo el pipeline de alertas en YAML para que se revise y versione como código. -
Despliega Grafana en Kubernetes con Helm y valores de provisioning Ejecuta Grafana desde un chart de Helm donde los data sources, dashboards y ajustes provienen de archivos de valores. -
Recarga, verifica y soluciona problemas de provisioning desde la línea de comandos Averigua qué cargó Grafana, recarga sin reiniciar y arregla los errores de provisioning más habituales.