Añadir una fuente de datos en Grafana¶
Grafana necesita una fuente de datos para consultar y representar la información almacenada en sistemas externos.
En este laboratorio se añadirá Prometheus como fuente de datos de Grafana. De esta forma, Grafana podrá ejecutar consultas PromQL y utilizar sus resultados en paneles y dashboards.
El flujo será:
La configuración final será:
Objetivos¶
Al finalizar esta práctica, el alumno podrá:
- Explicar qué es una fuente de datos.
- Identificar la función de Prometheus dentro de Grafana.
- Acceder al menú de fuentes de datos.
- Añadir Prometheus como fuente de datos.
- Configurar correctamente la URL de Prometheus.
- Diferenciar entre
localhostdel navegador, del servidor de Grafana y de un contenedor. - Probar la conexión entre Grafana y Prometheus.
- Interpretar los errores habituales de conexión.
- Ejecutar una consulta PromQL desde Grafana.
- Comprobar que Grafana recibe datos de Prometheus.
- Definir una fuente de datos predeterminada.
- Consultar la configuración mediante la API de Grafana.
- Utilizar el aprovisionamiento mediante ficheros YAML.
- Diagnosticar problemas de conectividad.
- Documentar las evidencias de la configuración.
Introducción¶
Una fuente de datos es un sistema externo al que Grafana se conecta para consultar información.
Ejemplos de fuentes de datos compatibles con Grafana:
- Prometheus.
- Loki.
- InfluxDB.
- Elasticsearch.
- MySQL.
- PostgreSQL.
- Tempo.
- OpenSearch.
- Azure Monitor.
- CloudWatch.
En este curso se utilizará Prometheus.
Prometheus almacena las métricas y ejecuta las consultas PromQL. Grafana utiliza esas consultas para mostrar los resultados en:
- Paneles.
- Gráficos.
- Tablas.
- Estadísticas.
- Indicadores.
- Dashboards.
- Alertas.
Grafana no copia normalmente todas las métricas de Prometheus. Cuando un usuario abre un dashboard, Grafana consulta la fuente de datos y representa el resultado.
Arquitectura del laboratorio¶
+---------------------+
| Servidor Linux |
| |
| Prometheus |
| Puerto 9090 |
| |
| Grafana |
| Puerto 3000 |
| |
| Node Exporter |
| Puerto 9100 |
+---------------------+
Flujo de una consulta¶
Requisitos previos¶
Antes de comenzar, deben estar activos Grafana y Prometheus.
Comprobar Prometheus¶
Resultado esperado:
Comprobar el endpoint de salud:
Resultado esperado:
Comprobar que Prometheus responde a una consulta:
Comprobar Grafana¶
Resultado esperado:
Comprobar el puerto:
Probar la API de Grafana:
Consultar el estado:
Resultado conceptual:
Comprobar Node Exporter¶
Si se instaló manualmente:
Si se instaló mediante un paquete de Ubuntu:
Comprobar el endpoint:
Conceptos fundamentales¶
¿Qué es una fuente de datos?¶
Una fuente de datos es una conexión configurada en Grafana para consultar un sistema externo.
En este laboratorio:
¿Qué es una URL de fuente de datos?¶
Es la dirección que Grafana utilizará para conectarse con Prometheus.
Ejemplo:
La URL debe ser accesible desde el servidor o contenedor donde se ejecuta Grafana.
¿Qué es una fuente de datos predeterminada?¶
Es la fuente que Grafana selecciona automáticamente cuando se crea un panel nuevo.
En este laboratorio se configurará Prometheus como fuente predeterminada.
¿Qué protocolo utiliza Grafana?¶
Grafana consulta Prometheus mediante HTTP o HTTPS utilizando la API de Prometheus.
Ejemplo conceptual:
¿Qué significa el modo de acceso?¶
El modo de acceso determina desde dónde se conecta Grafana a la fuente de datos.
| Modo | Lugar desde el que se realiza la conexión |
|---|---|
Server o Proxy |
Servidor de Grafana |
Browser o Direct |
Navegador del usuario |
Para esta práctica se utilizará el modo:
o, según la versión de Grafana:
Acceder a Grafana¶
Abrir un navegador y acceder a:
Si Grafana está instalado en otro servidor:
Ejemplo:
Iniciar sesión con la cuenta de administración definida durante la instalación.
En un entorno real no se deben utilizar credenciales por defecto. Después del primer acceso se debe establecer una contraseña segura.
Ubicación del menú de fuentes de datos¶
Según la versión y el diseño de Grafana, la opción puede encontrarse en:
o en:
El recorrido habitual es:
Seleccionar:
Añadir Prometheus mediante la interfaz web¶
Paso 1: abrir las fuentes de datos¶
- Acceder a Grafana.
- Abrir el menú principal.
- Entrar en Connections.
- Seleccionar Data sources.
- Pulsar Add new data source.
Paso 2: seleccionar Prometheus¶
Buscar:
Seleccionar el tipo de fuente de datos correspondiente.
Paso 3: configurar la URL¶
En el campo Prometheus server URL, introducir:
La configuración mínima será:
| Campo | Valor |
|---|---|
| Name | Prometheus |
| Type | Prometheus |
| URL | http://localhost:9090 |
| Access | Server o Proxy |
| Default | Activado |
Paso 4: guardar y probar¶
Pulsar:
Resultado esperado:
El texto puede variar ligeramente según la versión de Grafana, pero debe indicar que la conexión se ha realizado correctamente.
Configuración del modo de acceso¶
Server o Proxy¶
En este modo, Grafana realiza la conexión desde el servidor donde se ejecuta.
Es el modo recomendado para esta práctica:
o:
Flujo:
Ventajas:
- Evita problemas habituales de CORS.
- La URL solo debe ser accesible desde Grafana.
- Es adecuado para redes internas.
- Funciona correctamente con contenedores y servidores separados.
Browser o Direct¶
En este modo, algunas peticiones pueden realizarse desde el navegador del usuario.
Puede provocar problemas relacionados con:
- CORS.
- Resolución de nombres.
- Redes privadas.
- Direcciones no accesibles desde el equipo del alumno.
- Certificados TLS.
- Firewalls.
Para el laboratorio se utilizará:
o:
La importancia de localhost¶
localhost siempre hace referencia al equipo que realiza la conexión.
Grafana y Prometheus en el mismo servidor¶
Esta configuración es correcta:
El flujo es:
Grafana y Prometheus en servidores diferentes¶
Si Grafana está en grafana-01 y Prometheus en prometheus-01, esta configuración puede ser incorrecta:
Grafana intentará conectarse al puerto 9090 de grafana-01.
La configuración correcta sería, por ejemplo:
o:
Grafana y Prometheus en contenedores¶
Si ambos servicios están en la misma red Docker, normalmente se utiliza el nombre del servicio:
No utilizar necesariamente:
Dentro de un contenedor, localhost hace referencia al propio contenedor.
Ejemplo con Docker Compose¶
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
grafana:
image: grafana/grafana
ports:
- "3000:3000"
Desde Grafana, la URL interna será normalmente:
Configuración recomendada según el entorno¶
| Entorno | URL habitual |
|---|---|
| Mismo servidor físico o virtual | http://localhost:9090 |
| Prometheus en otro servidor | http://IP_DEL_SERVIDOR:9090 |
| Resolución DNS disponible | http://prometheus.example.local:9090 |
| Docker Compose | http://prometheus:9090 |
| Kubernetes | URL del Service de Prometheus |
| HTTPS mediante proxy | https://prometheus.example.local |
La URL correcta depende de dónde se ejecuten Grafana y Prometheus.
Opciones de configuración de Prometheus¶
La fuente de datos de Prometheus puede incluir opciones adicionales.
HTTP method¶
Grafana puede utilizar peticiones GET o POST según la consulta y la versión instalada.
En la mayoría de los casos se puede mantener el valor predeterminado.
Scrape interval¶
Grafana puede utilizar un intervalo mínimo relacionado con el intervalo de scraping de Prometheus.
Ejemplo:
Esto no cambia el intervalo con el que Prometheus recopila métricas. Solo ayuda a que Grafana construya consultas temporales coherentes.
Query timeout¶
Define cuánto tiempo puede esperar Grafana por una respuesta de Prometheus.
Ejemplo:
Un tiempo demasiado pequeño puede provocar errores en consultas complejas. Un tiempo excesivo puede ocultar problemas de rendimiento.
Prometheus type¶
Según la versión de Grafana, puede aparecer una opción para indicar el tipo o la versión de Prometheus.
Seleccionar la opción compatible con la instalación del laboratorio.
Default¶
Activar:
Esto hará que Prometheus aparezca seleccionado automáticamente al crear un panel.
Probar la fuente de datos¶
Después de pulsar Save & test, Grafana debe comprobar la conectividad.
La prueba verifica generalmente:
- Que la URL tiene un formato válido.
- Que Grafana puede resolver el nombre.
- Que el puerto está accesible.
- Que Prometheus responde.
- Que la API devuelve una respuesta válida.
- Que la fuente de datos puede realizar consultas.
Una prueba correcta indica que Grafana puede comunicarse con Prometheus, pero no garantiza que todos los paneles estén bien configurados.
Crear un panel de prueba¶
Después de añadir la fuente de datos:
- Abrir el menú Dashboards.
- Crear un dashboard nuevo.
- Añadir un panel.
- Seleccionar la fuente de datos
Prometheus. - Introducir una consulta.
Consulta de prueba:
Resultado esperado:
- Aparece una serie para Prometheus.
- Aparece una serie para Node Exporter, si está configurado.
- El valor normal es
1.
Probar una métrica de memoria¶
Probar el uso de CPU¶
Probar la carga del sistema¶
Configurar un panel de disponibilidad¶
Utilizar la consulta:
Configurar el panel como:
o como:
Interpretación:
| Valor | Estado |
|---|---|
1 |
Objetivo disponible |
0 |
Objetivo no disponible |
Para mostrar únicamente Node Exporter:
Para mostrar el número de objetivos disponibles:
Para mostrar el porcentaje de disponibilidad:
Consultar los paneles y las fuentes de datos¶
Mostrar la fuente de datos en el panel¶
Cada panel debe tener seleccionada una fuente de datos.
Comprobar:
Consultar el inspector del panel¶
Grafana dispone de un inspector que permite revisar:
- Consulta enviada.
- Respuesta recibida.
- Tiempo de respuesta.
- Errores.
- Datos transformados.
- Series devueltas.
Abrir el inspector desde el panel y revisar las pestañas de consulta, datos o estadísticas.
Esta función resulta útil para distinguir entre:
- Error de conexión.
- Consulta incorrecta.
- Consulta sin resultados.
- Problema de visualización.
- Problema de unidades.
Administrar la fuente de datos¶
Desde la página de fuentes de datos se pueden realizar acciones como:
- Editar la configuración.
- Probar la conexión.
- Cambiar el nombre.
- Establecerla como predeterminada.
- Consultar el UID.
- Eliminar la fuente de datos.
Eliminar una fuente de datos puede dejar dashboards sin conexión. Antes de eliminarla se deben revisar los dashboards que la utilizan.
Identificador y UID¶
Grafana asigna identificadores internos a las fuentes de datos.
El nombre visible puede ser:
El UID puede ser similar a:
El UID se utiliza en:
- Dashboards.
- Paneles.
- Provisioning.
- API de Grafana.
- Ficheros JSON exportados.
Para evitar referencias frágiles, se recomienda definir un UID estable cuando se utiliza aprovisionamiento:
Añadir la fuente de datos mediante provisioning¶
Grafana permite crear fuentes de datos automáticamente mediante un fichero YAML.
Esta opción es útil para:
- Laboratorios reproducibles.
- Automatización.
- Contenedores.
- Infraestructura como código.
- Recuperación de instalaciones.
- Entornos de pruebas.
- Configuraciones homogéneas.
Crear el directorio¶
Crear el fichero YAML¶
sudo tee /etc/grafana/provisioning/datasources/prometheus.yml > /dev/null <<'EOF'
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://localhost:9090
isDefault: true
editable: true
EOF
Reiniciar Grafana¶
Comprobar:
Acceder a:
La fuente Prometheus debe aparecer creada.
Explicación del fichero¶
| Propiedad | Función |
|---|---|
apiVersion |
Versión del formato de provisioning |
name |
Nombre visible en Grafana |
uid |
Identificador estable |
type |
Tipo de fuente |
access |
Forma de acceso |
url |
URL de Prometheus |
isDefault |
Establece la fuente como predeterminada |
editable |
Permite modificarla desde la interfaz |
Provisioning para Docker Compose¶
Si Grafana se ejecuta en Docker y Prometheus tiene el nombre de servicio prometheus:
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: true
La URL depende de la red donde se encuentren los contenedores.
Comprobar errores de provisioning¶
Consultar los registros:
Revisar el fichero:
Añadir la fuente mediante la API¶
Grafana proporciona una API HTTP para gestionar fuentes de datos.
El endpoint habitual es:
Crear un token¶
La creación del token depende de la versión y del sistema de autenticación de Grafana.
Guardar el token en una variable de entorno:
Crear una fuente de datos¶
Ejemplo conceptual:
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
http://localhost:3000/api/datasources \
-d '{
"name": "Prometheus",
"type": "prometheus",
"access": "proxy",
"url": "http://localhost:9090",
"isDefault": true,
"uid": "prometheus"
}'
Sustituir el valor de:
por un token válido con permisos suficientes.
No guardar tokens en scripts públicos ni en repositorios. Utilizar variables de entorno o un sistema seguro de gestión de secretos.
Consultar las fuentes existentes¶
Consultar una fuente por UID¶
curl -s \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
http://localhost:3000/api/datasources/uid/prometheus \
| jq
Eliminar la variable del token¶
La ruta exacta y los permisos necesarios pueden variar según la versión y la configuración de seguridad de Grafana.
Permisos y credenciales¶
Para consultar Prometheus localmente, la fuente puede no necesitar credenciales si Prometheus no tiene autenticación configurada.
En entornos protegidos pueden ser necesarios:
- Usuario y contraseña.
- Token Bearer.
- Certificado de cliente.
- CA personalizada.
- Verificación TLS.
- Proxy inverso.
- Cabeceras HTTP adicionales.
No guardar secretos en el fichero de provisioning¶
Evitar configuraciones como:
en ficheros accesibles por usuarios no autorizados.
Utilizar:
- Variables de entorno.
- Secretos de Docker.
- Secretos de Kubernetes.
- Vault.
- Gestores de credenciales.
- Permisos restrictivos.
Comprobar los permisos del fichero¶
Configuración con HTTPS¶
Si Prometheus está detrás de HTTPS:
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: https://prometheus.example.local
isDefault: true
Si utiliza un certificado interno, puede ser necesario configurar una CA.
No se recomienda desactivar la verificación TLS en producción. En un laboratorio controlado puede existir una opción equivalente a:
Debe utilizarse únicamente para prácticas concretas y documentarse claramente.
Diagnóstico de problemas¶
Error: connection refused¶
Síntoma habitual:
Comprobar Prometheus:
Comprobar el puerto:
Probar desde el servidor de Grafana:
Si Grafana y Prometheus están separados, probar con la dirección real:
Posibles causas:
- Prometheus está detenido.
- El puerto es incorrecto.
- La URL utiliza una dirección equivocada.
- Grafana y Prometheus están en servidores distintos.
- El firewall bloquea el acceso.
- Los contenedores no comparten red.
- Prometheus solo escucha en
127.0.0.1.
Error: no route to host¶
Posibles causas:
- Falta de conectividad.
- Ruta de red incorrecta.
- Servidor apagado.
- Red virtual mal configurada.
- Firewall.
- Dirección IP incorrecta.
Probar la conectividad:
Comprobar la ruta:
Probar el puerto:
Error de DNS¶
Comprobar la resolución:
Si no hay resultado, utilizar temporalmente la dirección IP o corregir el DNS.
Error al utilizar localhost¶
Si Grafana está en un contenedor:
apunta al propio contenedor de Grafana.
Usar el nombre del servicio:
La fuente se conecta, pero no devuelve datos¶
La conexión puede ser correcta aunque la consulta no tenga resultados.
Probar en Grafana:
Después:
Y finalmente:
Comprobar directamente Prometheus:
Posibles causas:
- Prometheus no tiene objetivos activos.
- Node Exporter está detenido.
- La métrica no existe.
- El rango temporal es incorrecto.
- El panel utiliza una fuente de datos distinta.
- La consulta contiene un filtro incorrecto.
- El dashboard tiene variables con valores incorrectos.
Error de permisos o autenticación¶
Comprobar:
- Usuario utilizado.
- Contraseña.
- Token.
- Certificados.
- Cabeceras.
- Proxy.
- Configuración de Prometheus.
- Registros de Grafana.
Consultar los registros:
La fuente aparece duplicada¶
Puede haberse creado:
- Desde la interfaz web.
- Mediante provisioning.
- Mediante la API.
- Durante una restauración.
Consultar las fuentes configuradas desde la interfaz o la API.
Revisar los ficheros de provisioning:
Consultar los registros de Grafana¶
Ver los últimos registros:
Seguir los registros:
Consultar errores:
Consultar los registros recientes:
Los registros pueden mostrar:
- Errores de provisioning.
- Fallos de conexión.
- Problemas de autenticación.
- Errores de consulta.
- Problemas de base de datos.
- Errores de plugins.
- Fallos de configuración.
Sesiones prácticas¶
Sesión 1: comprobar los servicios¶
Objetivo¶
Verificar que Grafana y Prometheus están disponibles antes de crear la fuente.
Comandos¶
Actividades¶
- Comprueba el estado de Prometheus.
- Comprueba el estado de Grafana.
- Comprueba el endpoint de salud de Prometheus.
- Consulta la API de salud de Grafana.
- Comprueba que el puerto
9090está disponible. - Comprueba que el puerto
3000está disponible.
Sesión 2: añadir Prometheus desde la interfaz¶
Objetivo¶
Crear una fuente de datos de forma manual.
Pasos¶
- Abrir:
- Acceder a Connections.
- Entrar en Data sources.
- Pulsar Add new data source.
- Seleccionar Prometheus.
- Introducir:
- Activar la opción de fuente predeterminada.
- Pulsar Save & test.
Resultado esperado¶
Grafana debe mostrar un mensaje indicando que la conexión se ha realizado correctamente.
Actividades¶
- Anota el nombre asignado a la fuente.
- Anota la URL configurada.
- Comprueba si se ha establecido como predeterminada.
- Consulta el UID generado.
- Captura la pantalla de confirmación.
Sesión 3: crear un panel de prueba¶
Objetivo¶
Comprobar que Grafana puede ejecutar consultas PromQL.
Pasos¶
- Abrir Dashboards.
- Crear un dashboard nuevo.
- Añadir un panel.
- Seleccionar la fuente
Prometheus. - Ejecutar:
- Seleccionar una visualización de tipo tabla.
- Guardar el panel.
Consultas adicionales¶
Actividades¶
- Ejecuta las consultas.
- Comprueba que devuelven resultados.
- Cambia la visualización a gráfico.
- Comprueba las etiquetas.
- Anota qué consultas devuelven datos.
Sesión 4: distinguir un error de conexión de un error de consulta¶
Objetivo¶
Diferenciar entre problemas de conectividad y problemas de PromQL.
Prueba 1: consulta correcta¶
Prueba 2: consulta de una métrica inexistente¶
Esta consulta puede devolver un resultado vacío sin que exista un problema de conexión.
Prueba 3: URL incorrecta¶
Editar temporalmente la fuente y cambiar:
por:
Pulsar Save & test.
Actividades¶
- Ejecuta una consulta correcta.
- Ejecuta una consulta de una métrica inexistente.
- Cambia temporalmente el puerto.
- Compara los mensajes mostrados.
- Restaura la URL correcta.
- Vuelve a probar la conexión.
Sesión 5: analizar el caso de servidores separados¶
Objetivo¶
Comprender el significado de localhost.
Escenario¶
Configuración incorrecta¶
Configuración correcta¶
Comprobar desde el servidor de Grafana¶
Actividades¶
- Identifica dónde se ejecuta Grafana.
- Identifica dónde se ejecuta Prometheus.
- Explica a qué equipo apunta
localhost. - Configura la URL correcta.
- Ejecuta Save & test.
- Comprueba que el panel puede consultar
up.
Sesión 6: configurar mediante provisioning¶
Objetivo¶
Crear la fuente de datos automáticamente mediante YAML.
Crear el fichero¶
sudo tee /etc/grafana/provisioning/datasources/prometheus.yml > /dev/null <<'EOF'
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://localhost:9090
isDefault: true
editable: true
EOF
Reiniciar Grafana:
Comprobar:
Actividades¶
- Crea el fichero de provisioning.
- Reinicia Grafana.
- Accede a la lista de fuentes de datos.
- Comprueba que Prometheus aparece configurado.
- Comprueba su UID.
- Ejecuta un panel con la consulta
up. - Consulta los registros de Grafana.
Sesión 7: consultar la fuente mediante la API¶
Objetivo¶
Identificar la fuente de datos mediante la API de Grafana.
Esta actividad requiere un token con permisos suficientes.
Definir el token en una variable:
Consultar las fuentes:
Consultar la fuente por UID:
curl -s \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
http://localhost:3000/api/datasources/uid/prometheus \
| jq
Eliminar la variable al terminar:
Actividades¶
- Consulta las fuentes configuradas.
- Identifica el nombre.
- Identifica el tipo.
- Identifica la URL.
- Identifica el UID.
- Comprueba si es la fuente predeterminada.
Sesión 8: crear un dashboard de verificación¶
Objetivo¶
Crear un dashboard básico utilizando Prometheus.
Panel 1: disponibilidad¶
Visualización:
Panel 2: uso de CPU¶
Visualización:
Panel 3: memoria utilizada¶
Visualización:
Panel 4: espacio utilizado¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
)
Visualización:
Actividades¶
- Crea los cuatro paneles.
- Selecciona Prometheus como fuente.
- Configura las unidades.
- Guarda el dashboard.
- Comprueba que los paneles muestran datos.
- Anota el nombre del dashboard.
Diagnóstico desde Grafana¶
Comprobar la fuente¶
Desde Grafana:
Pulsar:
Comprobar la consulta del panel¶
Abrir el panel y utilizar el inspector.
Revisar:
- Consulta PromQL.
- URL utilizada.
- Respuesta.
- Tiempo de respuesta.
- Número de series.
- Mensaje de error.
Comprobar Prometheus directamente¶
Si Prometheus devuelve datos pero Grafana no muestra resultados, revisar:
- Fuente de datos seleccionada.
- Rango temporal.
- Consulta del panel.
- Variables del dashboard.
- Transformaciones.
- Unidades.
- Filtros.
Seguridad y mantenimiento¶
No utilizar credenciales por defecto¶
Cambiar la contraseña inicial de Grafana.
Proteger el acceso a Grafana¶
Recomendaciones:
- Utilizar HTTPS.
- Limitar el acceso por red.
- Configurar usuarios y roles.
- Utilizar autenticación centralizada cuando proceda.
- Mantener Grafana actualizado.
- Revisar los registros.
- No compartir tokens.
- No guardar credenciales en repositorios.
Proteger la API¶
Los tokens deben:
- Tener los permisos mínimos necesarios.
- Tener una duración controlada.
- Guardarse de forma segura.
- Revocarse cuando ya no sean necesarios.
- No aparecer en capturas ni informes públicos.
Proteger la comunicación con Prometheus¶
En un entorno de producción pueden utilizarse:
- HTTPS.
- Proxy inverso.
- Autenticación.
- Redes privadas.
- Firewall.
- Certificados.
- VPN.
Informe de configuración¶
Crear un directorio para evidencias:
Guardar el estado de Grafana:
curl -s http://localhost:3000/api/health \
| jq \
> ~/laboratorio-grafana/evidencias/grafana-datasource/grafana-health.json
Guardar una prueba de Prometheus:
curl -s http://localhost:9090/-/healthy \
> ~/laboratorio-grafana/evidencias/grafana-datasource/prometheus-health.txt
Guardar una consulta de Prometheus:
curl -sG http://localhost:9090/api/v1/query \
--data-urlencode 'query=up' \
| jq \
> ~/laboratorio-grafana/evidencias/grafana-datasource/query-up.json
Guardar el fichero de provisioning, si se utiliza:
sudo cp \
/etc/grafana/provisioning/datasources/prometheus.yml \
~/laboratorio-grafana/evidencias/grafana-datasource/prometheus-datasource.yml
Guardar los registros de Grafana:
sudo journalctl -u grafana-server \
--since "15 minutes ago" \
--no-pager \
> ~/laboratorio-grafana/evidencias/grafana-datasource/grafana-logs.txt
Ejemplo de sesión completa¶
$ systemctl is-active prometheus
active
$ systemctl is-active grafana-server
active
$ curl http://localhost:9090/-/healthy
Prometheus is Healthy.
$ curl -s http://localhost:3000/api/health | jq
{
"database": "ok",
"version": "...",
"commit": "..."
}
En Grafana:
Configuración:
Después de pulsar Save & test:
En un panel nuevo se ejecuta:
Resultado conceptual:
Después se prueba una consulta calculada:
Resultado esperado:
- La fuente de datos responde.
- Grafana ejecuta PromQL.
- El panel recibe datos.
- Las métricas se representan correctamente.
- Prometheus aparece como fuente de datos predeterminada.
Actividad integradora¶
Objetivo¶
Añadir Prometheus como fuente de datos en Grafana y crear un dashboard de verificación.
Tareas¶
- Comprobar que Prometheus está activo.
- Comprobar que Grafana está activo.
- Acceder a Grafana.
- Crear una fuente de datos de tipo Prometheus.
- Introducir la URL correcta.
- Seleccionar el modo de acceso
ServeroProxy. - Establecer Prometheus como fuente predeterminada.
- Ejecutar Save & test.
- Crear un panel con la consulta
up. - Crear un panel con el uso de CPU.
- Crear un panel con el uso de memoria.
- Crear un panel con el espacio utilizado.
- Guardar el dashboard.
- Configurar la fuente mediante provisioning.
- Consultar los registros de Grafana.
- Guardar las evidencias.
Resultado esperado¶
Grafana: activo
Prometheus: activo
Fuente creada: sí
Conexión probada: correcta
Fuente predeterminada: sí
Consulta up: devuelve datos
Panel de CPU: muestra datos
Panel de memoria: muestra datos
Panel de almacenamiento: muestra datos
Evidencias: guardadas
Tabla de resultados¶
| Comprobación | Resultado | Observaciones |
|---|---|---|
| Grafana activo | ||
| Prometheus activo | ||
| URL configurada | ||
| Modo de acceso | ||
| Save & test | ||
| Fuente predeterminada | ||
Consulta up |
||
| Panel de CPU | ||
| Panel de memoria | ||
| Panel de almacenamiento | ||
| Provisioning | ||
| Registros revisados | ||
| Evidencias guardadas |
Puntos clave¶
- Grafana necesita una fuente de datos para consultar métricas.
- Prometheus será la fuente de datos utilizada en este laboratorio.
- La URL debe ser accesible desde Grafana.
localhosthace referencia al equipo desde el que se realiza la conexión.- Si Grafana y Prometheus están en contenedores, puede ser necesario utilizar el nombre del servicio.
- El modo
ServeroProxyes el más apropiado para esta práctica. - Save & test comprueba la comunicación con Prometheus.
- Una conexión correcta no garantiza que todas las consultas devuelvan datos.
- La consulta
upes una buena prueba inicial. - La fuente de datos puede establecerse como predeterminada.
- El provisioning permite automatizar la configuración.
- La API permite consultar y administrar fuentes de datos.
- Los tokens deben protegerse.
- Los paneles deben utilizar la fuente de datos correcta.
- El inspector de Grafana ayuda a diagnosticar consultas.
- Los registros de Grafana ayudan a detectar errores de conexión y provisioning.
- La configuración debe documentarse para poder reproducirla.
Preguntas de comprobación¶
- ¿Qué es una fuente de datos en Grafana?
- ¿Qué función cumple Prometheus dentro de Grafana?
- ¿Qué URL se utiliza normalmente si ambos servicios están en el mismo servidor?
- ¿Qué significa
localhostcuando Grafana y Prometheus están en servidores diferentes? - ¿Qué modo de acceso se utilizará en esta práctica?
- ¿Qué función cumple el botón Save & test?
- ¿Qué consulta PromQL se recomienda para realizar la primera prueba?
- ¿Qué significa establecer una fuente como predeterminada?
- ¿Qué problema puede producirse si Grafana y Prometheus están en contenedores separados?
- ¿Qué URL se utilizaría en una red Docker donde el servicio se llama
prometheus? - ¿Qué información permite revisar el inspector de un panel?
- ¿Qué diferencia existe entre un error de conexión y una consulta sin resultados?
- ¿Para qué sirve el provisioning?
- ¿Dónde se ubican normalmente los ficheros de provisioning de fuentes de datos?
- ¿Qué propiedad define el nombre visible de una fuente?
- ¿Qué propiedad define su identificador estable?
- ¿Por qué no se deben guardar tokens en repositorios?
- ¿Qué comprobarías si Grafana muestra
connection refused? - ¿Qué comprobarías si la conexión funciona pero el panel está vacío?
- ¿Cómo consultarías directamente la API de Prometheus?
- ¿Qué consulta utilizarías para probar Node Exporter?
- ¿Qué riesgos tiene eliminar una fuente de datos utilizada por dashboards?
- ¿Qué diferencia existe entre configurar la fuente desde la interfaz y utilizar provisioning?
- ¿Qué medidas aplicarías para proteger Grafana en producción?
- ¿Qué evidencias guardarías para documentar la configuración?
Criterios de finalización¶
La práctica se considera completada cuando el alumno puede:
- Acceder a Grafana.
- Comprobar el estado de Grafana y Prometheus.
- Crear una fuente de datos de tipo Prometheus.
- Configurar correctamente la URL.
- Explicar el significado de
localhost. - Seleccionar el modo de acceso adecuado.
- Probar la conexión.
- Establecer la fuente como predeterminada.
- Crear un panel de prueba.
- Ejecutar la consulta
up. - Ejecutar consultas de CPU y memoria.
- Diagnosticar un error de conexión.
- Diagnosticar una consulta sin resultados.
- Configurar la fuente mediante provisioning.
- Consultar los registros de Grafana.
- Guardar evidencias reproducibles.
Comprobación final¶
printf '%-40s %s\n' \
"Prometheus activo" \
"$(systemctl is-active prometheus)"
printf '%-40s %s\n' \
"Grafana activo" \
"$(systemctl is-active grafana-server)"
printf '%-40s ' \
"Prometheus saludable"
curl -fsS http://localhost:9090/-/healthy \
>/dev/null \
&& echo "sí" \
|| echo "no"
printf '%-40s ' \
"API de Grafana disponible"
curl -fsS http://localhost:3000/api/health \
>/dev/null \
&& echo "sí" \
|| echo "no"
printf '%-40s ' \
"Consulta up disponible"
curl -fsS http://localhost:9090/api/v1/query \
--get \
--data-urlencode 'query=up' \
| jq -e '.status == "success"' \
>/dev/null \
&& echo "sí" \
|| echo "no"
Resultado esperado:
Prometheus activo active
Grafana activo active
Prometheus saludable sí
API de Grafana disponible sí
Consulta up disponible sí
El flujo que debe dominar el alumno es: