Importar
Cinco dashboards, todos en inglés, todos en el formato de exportación compartible
de Grafana: el datasource es un marcador ${DS_...} y el bloque __inputs pide
a quien importa que elija el suyo.
| Fichero | Paneles | Almacén |
|---|---|---|
ghchronicle- | 152 | InfluxDB 3, consultado con SQL |
ghchronicle- | 152 | Prometheus |
ghchronicle- | 152 | PostgreSQL o TimescaleDB, desde el destino SQL |
ghchronicle- | 152 | Graphite, desde el destino de Graphite |
ghchronicle- | 152 | Elasticsearch u OpenSearch, desde el destino de Elasticsearch |
Las cinco tienen los mismos paneles en el mismo orden. Lo que cambia es cuántos puede responder el almacén que hay detrás de cada una.

La cuenta de esa captura es la inventada que usan todas las capturas de esta
documentación, acme y cinco repositorios, descrita junto a lo que muestran
los paneles. Todas las secciones salvo el
Overview se envían plegadas, por eso Lifetime es ahí una cabecera.
Importar desde la interfaz
Sección titulada «Importar desde la interfaz»-
En Grafana, ve a Dashboards, luego New, luego Import.
-
Sube el
ghchronicle-<almacén>.jsondel almacén que estés usando. -
Elige el datasource que pide Grafana.
El datasource de InfluxDB 3 para la base de datos en la que escribe el destino, en modo SQL.
El Prometheus que consulta el exportador de ghchronicle.
El datasource de PostgreSQL para la base de datos a la que se enviaron las sentencias del destino SQL. TimescaleDB es el mismo datasource con el interruptor de TimescaleDB activado; las consultas no cambian.
El Graphite en el que escribe el destino. Las rutas suponen el prefijo por omisión,
github, y las funciones necesitan Graphite 1.1 o posterior.Un datasource de Elasticsearch cuyo patrón de índice sea
ghchronicle-*y cuyo campo de tiempo sea@timestamp. Un solo datasource sirve a todos los paneles, porque cada objetivo nombra su propio índice en la consulta. OpenSearch funciona con el mismo plugin.
Importar con la API
Sección titulada «Importar con la API»Nombra la entrada que declara el fichero:
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d "{\"dashboard\": $(cat ghchronicle-influxdb.json), \"inputs\": [ {\"name\":\"DS_INFLUXDB\",\"type\":\"datasource\",\"pluginId\":\"influxdb\",\"value\":\"<uid>\"}], \"overwrite\": true}" \ "$GRAFANA/api/dashboards/import"Las entradas son DS_INFLUXDB (influxdb), DS_PROMETHEUS (prometheus),
DS_POSTGRES (grafana-postgresql-datasource), DS_GRAPHITE (graphite) y
DS_ELASTICSEARCH (elasticsearch).
Cada fichero lleva un uid fijo (ghchronicle-<almacén>). Eso es deliberado
para una importación desde el repositorio, donde un uid estable significa una
URL estable y una reimportación actualiza en el sitio en vez de duplicar.
Importar dos de estos en un mismo Grafana no da problemas, porque los uid
difieren por almacén y no pueden chocar.
Son generados, nunca editados a mano
Sección titulada «Son generados, nunca editados a mano»cmd/internal/dashboards tiene una lista ordenada de secciones y paneles, y
cada panel lleva un conjunto de consultas por almacén. El generador elige un
conjunto y emite el JSON, así que todos los ficheros tienen los mismos paneles
en los mismos sitios con los mismos títulos, y se niega a escribir ficheros
cuyas disposiciones se hayan separado.
go run ./cmd/gen_dashboards # escribe los cinco ficherosgo run ./cmd/gen_dashboards -check # no escribe nada, falla si están caducosEdita cmd/internal/dashboards/sections_*.go, no el JSON. panels.go tiene
los constructores de panel que usa, query.go los ayudantes de consulta de
cada almacén, y stores.go solo elige un conjunto de consultas y un
datasource.
Publicar en el directorio de Grafana
Sección titulada «Publicar en el directorio de Grafana»Los ficheros ya tienen la forma que exige el directorio: __inputs declara el
datasource que quien importa debe elegir, __requires nombra la versión de
Grafana y el plugin, y no hay clave id, que el directorio asigna al publicar.
Conserva nombres de listado distintos, porque cinco dashboards con el mismo título son indistinguibles en los resultados de búsqueda: “ghchronicle for InfluxDB”, “ghchronicle for Prometheus”, “ghchronicle for PostgreSQL and TimescaleDB”, “ghchronicle for Graphite”, “ghchronicle for Elasticsearch and OpenSearch”.
Publicar de nuevo contra el mismo listado añade una revisión en vez de reemplazarlo, así que una regeneración que cambie paneles es una revisión nueva de los mismos cinco listados, no cinco listados nuevos.
Eso es lo que necesita saber quien lee. El paso a paso, con los nombres de los
listados, qué debe mostrar cada captura y qué hacer cuando rechazan una
revisión, es tarea de quien mantiene el proyecto y vive en
dashboards/PUBLISHING.md
dentro del repositorio.