Appearance
Grafana
Esta herammienta nos brinda la posibilidad de tomar una fuente de datos, por ejemplo Prometheus u otra, y generar graficas que se actualizan interactivamente, reflejando algún estado de un micro-servicio, fundamental aspecto para monitorizarción de infraestructura de software moderna.
Instalación de Grafana
Grafana desde Docker
bash
docker run -d -p 3030:3000 --name=grafana grafana/grafana-ossEsto inicia un servicio que se puede consultar desde el navegador usando:
http://localhost:3030/login
La credeciales por defecto sonadmincomo usuario y contraseña (esta última se cambia al iniciar por primera vez)
Una vez se ha ejecutado el comando anterior, las siguientes veces que se requiera iniciar el servicio simplemente se ejecuta:
bash
docker start grafanaIniciando con fuentes de datos en Grafana
Una vez configurado e iniciado el entorno de Grafana, lo que se debe hacer a continuación es establecer o configurar una conexión a partir de una fuente de datos.
Actualmente, encontramos dentro del menú Connections la opción Add new connection, podemos elegir como Data source (fuente de datos) el conector Infinity para instalarlo (si no se tiene aún instalado). Luego de esto podemos usar, dentro del Data Source (Infinity) la opción Add data source (o simplemente buscamos esta opción a partir de Data Source). Allí procedemos a guardas las configuraciones (que correspondan por defecto). Esto muestra un enlace para crear un Dashboard así que damos clic en él. Seleccionamos el Data Source y podemos ver una pantalla de contrucción de Dashboard con uns parámetros para usar json.
Podrímo usar una url, que apunte a un json o API, pero en este caso usaremos como source la opción inline, esto con el fin de copiar un json.
Para el ejemplo, podríamos tener un json con el siguiente contenido:
json
[
{"name": "Argentina", "code": "AR", "group": 1, "points": 10},
{"name": "Australia", "code": "AU", "group": 6, "points": 0},
{"name": "Brazil", "code": "BR", "group": 1, "points": 6},
{"name": "Canada", "code": "CA", "group": 2, "points": 4},
{"name": "China", "code": "CN", "group": 6, "points": 1},
{"name": "Colombia", "code": "CO", "group": 1, "points": 9},
{"name": "France", "code": "AT", "group": 4, "points": 7},
{"name": "Germany", "code": "AT", "group": 4, "points": 5},
{"name": "Mexico", "code": "MX", "group": 5, "points": 2},
{"name": "Spain", "code": "ES", "group": 4, "points": 8},
{"name": "United States", "code": "US", "group": 2, "points": 3}
]Una vez copiamos nuestro json en la propiedad Data podemos visualizar los datos como una tabla. También podemos definir las columnas y atributos si se desea personalizar (por ejemplo: name y points), y quizás aplicar una gráfica de tipo Bar Chart (cuyas opciones se encuentra en la barra a la derecha). De este modo, podemos guardar el Dashboard y compartirlo o simplemente visualizarlo.
Loki para gestión de logs con Grafana
Loki es un sistema de agregación de logs desarrollado por Grafana Labs, diseñado para trabajar de forma nativa con Grafana. A diferencia de otras soluciones como Elasticsearch, Loki no indexa el contenido de los logs, sino solo las etiquetas (labels), lo que lo hace más eficiente y económico.
Características principales
- Inspirado en Prometheus: Usa el mismo modelo de etiquetas
- Eficiente: No indexa texto completo, solo metadatos
- Integración nativa: Funciona perfectamente con Grafana
- Escalable: Diseñado para manejar grandes volúmenes de logs
Instalación con Docker
Crea un archivo de configuración (loki.yml) con las siguientes sentencias:
bash
mkdir loki-config
cat > loki-config/loki.yml << EOF
auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb_shipper:
active_index_directory: /loki/boltdb-shipper-active
cache_location: /loki/boltdb-shipper-cache
shared_store: filesystem
filesystem:
directory: /loki/chunks
EOFPrepara el contendor para Loki ejecutando:
bash
docker run -d \
--name loki \
-p 3100:3100 \
-v $PWD/loki-config:/etc/loki \
-v loki-data:/loki \
grafana/loki:latest \
-config.file=/etc/loki/loki.ymlPromtail para recolección de logs
Promtail es el agente que envía logs a Loki. También requiere un archivo de configuración (promtail-config.yml) que puedes establecer con las siguientes sentencias:
bash
cat > promtail-config.yml << EOF
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
EOFPrepara el contendor para Promtail ejecutando:
bash
docker run -d \
--name promtail \
-v $PWD/promtail-config.yml:/etc/promtail/config.yml \
-v /var/log:/var/log:ro \
grafana/promtail:latest \
-config.file=/etc/promtail/config.ymlConfigurar Loki en Grafana
- En Grafana, ir a Configuration > Data Sources
- Agregar Loki como fuente de datos
- URL:
http://localhost:3100 - Guardar y probar la conexión
Consultas básicas en Loki
Loki usa LogQL, un lenguaje de consulta similar a PromQL. Aquí algunos ejemplos:
sql
{job="varlogs"}
{job="varlogs"} |= "error"
rate({job="varlogs"}[5m])
sum(rate({job="varlogs"} |= "error" [1m]))Las sentencias de arriba coresponden a las siguientes funciones:
- Ver todos los logs de un job
- Filtrar por contenido
- Métricas de rate
- Contar errores por minuto
Ventajas de Loki
- Costo-efectivo: Menor uso de almacenamiento que soluciones tradicionales
- Fácil configuración: Integración simple con Grafana
- LogQL: Lenguaje de consulta similar a PromQL
- Etiquetas: Organización eficiente usando labels
- Escalabilidad: Arquitectura distribuida opcional
Loki es ideal para equipos que ya usan Grafana y Prometheus, proporcionando una solución completa de observabilidad (métricas, logs y trazas) en un ecosistema unificado.