Instalación, Configuración y Uso de Grafana con Prometheus

Grafana es una herramienta de visualización que recibe solicitudes del navegador, se conecta a Prometheus para consultar datos y, tras el procesamianto, los renderiza y muestra de forma estructurada. Es importante destacar que, al igual que con Zabbix, Grafana requiere plantillas personalizadas para la consulta de datos, las cuales pueden crearse manualmante o importarse.

La arquitectura fundamental de Grafana se compone de varios elementos clave:

  • Interfaz Web Frontend: Construida con JavaScript y React, permite a los usuarios acceder a través de un navegador web para ver datos, visualizar gráficos y diseñar dashboards.
  • Servicio Backend: Responsable de la consulta, procesamiento y almacenamiento de datos. Incluye plugins de fuentes de datos, motores de renderizado de gráficos y motores de alertas para manejar las solicitudes del usuario y generar las visualizaciones.
  • Plugins de Fuentes de Datos: Grafana soporta diversas fuentes de datos como InfluxDB, Prometheus y Elasticsearch. Estos plugins se encargan de la interacción con dichas fuentes para recuperar y devolver los datos.
  • Motor de Renderizado de Gráficos: Transforma los datos consultados en representaciones gráficas, ofreciendo una variedad de tipos como gráficos de líneas, barras y circulares.
  • Motor de Alertas: Facilita la monitorización del estado del sistema y el envío de notificaciones de alerta cuando se cumplen ciertas condiciones.

Estos componentes permiten a Grafana funcionar como una plataforma de visualización de datos flexible y escalable. Los usuarios pueden configurar distintas fuentes de datos y plugins para crear dashboards personalizados que permitan la monitorización y análisis en tiempo real de los datos del sistema. Su diseño arquitectónico prioriza el rendimiento, la fiabilidad y la facilidad de uso, consolidando a Grafana como una herramienta ampliamente utilizada en diversos ámbitos.

Instalación de Grafana

Versiones de Grafana

Grafana se ofrece en dos versiones:

  • Grafana OSS (Open Source Software)
  • Enterprise (versión comercial)

La versión Enterprise puede incluir funcionalidades avanzadas como gestión de permisos más robusta, políticas de retención de datos y capacidades de alerta mejoradas, que podrían ser más limitadas o inexistentes en la versión OSS. Además, la versión Enterprise podría estar más optimizada para requisitos de seguridad y cumplimiento corporativo, y algunos plugins específicos podrían estar disponibles o mejor soportados solo en esta versión.

Instalación mediante RPM

Para instalar Grafana mediante RPM, siga estos pasos:


# Descargar el paquete RPM (asegúrese de obtener la versión más reciente desde el sitio oficial)
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.1.4-1.x86_64.rpm

# Instalar dependencias necesarias
yum install -y fontconfig

# Instalar el paquete RPM
rpm -ivh grafana-enterprise-11.1.4-1.x86_64.rpm

# Recargar la configuración del sistema
systemctl daemon-reload

# Habilitar el inicio automático del servicio Grafana
systemctl enable grafana-server.service

# Iniciar el servicio Grafana
systemctl start grafana-server.service

# Verificar que el puerto 3000 esté escuchando
netstat -tnlp|grep 3000

Por defecto, Grafana escucha en el puerto 3000 de todas las interfaces de red.

Instalación en Kubernetes

Puede desplegar Grafana en Kubernetes utilizando los siguientes manifiestos:


---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: monitoring
  labels:
    app: grafana
  name: grafana
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: registry-vpc.cn-shanghai.aliyuncs.com/zdbl-base/grafana-enterprise:11.1.4
          ports:
            - containerPort: 3000
              name: http-grafana
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /robots.txt
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 2
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 3000
            timeoutSeconds: 1
          resources:
            requests:
              cpu: 500m
              memory: 1500Mi
          volumeMounts:
            - mountPath: /var/lib/grafana
              name: grafana-data
      volumes:
        - name: grafana-data
          persistentVolumeClaim:
            claimName: grafana-data
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: monitoring-grafana
  namespace: monitoring
spec:
  ingressClassName: nginx
  rules:
   - host: t1-grafana.xxxx.com
     http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: grafana
            port:
              number: 3000
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: grafana-data
  namespace: monitoring
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100G
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
  labels:
    app: grafana
spec:
  ports:
    - port: 3000
      targetPort: 3000
      protocol: TCP
  selector:
    app: grafana

Si no se utiliza un Ingress, el Service puede configurarse con tipo NodePort para acceder directamente.

Acceso a Grafana

Tras la instalación mediante RPM, acceda a Grafana a través de su navegador web, introduciendo la dirección IP del host y el puerto 3000. Si lo instaló en Kubernetes, acceda mediante el dominio configurado en el Ingress o el puerto NodePort del Service. Las credenciales de acceso por defecto son admin / admin.

Al iniciar sesión por primera vez, se le solicitará que cambie la contraseña del usuario administrador.

Configuración del Archivo

Rutas de Instalación Relevantes

  • Directorio de instalación: /usr/share/grafana/
  • Herramienta CLI: /usr/share/grafana/bin/grafana-cli
  • Archivo de configuración global: /etc/grafana/grafana.ini
  • Archivo de configuración por defecto: /usr/share/grafana/conf/defaults.ini
  • Directorio de instalación de plugins: /var/lib/grafana/plugins/
  • Ruta por defecto para el almacenamiento de datos: /var/lib/grafana/grafana.db
  • Ruta de almacenamiento de logs: /var/log/grafana/
  • Ruta por defecto para plantillas de correo electrónico: /usr/share/grafana/public/emails/
  • Directorio de configuración de provisionamiento: /etc/grafana/provisioning

Configuraciones Comunes en /etc/grafana/grafana.ini

Rutas de Datos y Servicios


[paths]
data = /var/lib/grafana          ; Directorio para SQLite, archivos temporales, sesiones
temp_data_lifetime = 24h
logs = /var/log/grafana
plugins = /var/lib/grafana/plugins
provisioning = conf/provisioning

Configuración del Servidor Web


[server]
http_addr = 0.0.0.0              ; Dirección IP de escucha (por defecto 0.0.0.0)
http_port = 3000                 ; Puerto de escucha (por defecto 3000)
protocol = http                  ; Protocolo (http o https, por defecto http)
domain = localhost               ; Dominio público de acceso
enforce_domain = false           ; Forzar coincidencia de dominio
root_url = %(protocol)s://%(domain)s:%(http_port)s/ ; URL completa de acceso
router_logging = false           ; Habilitar logs de peticiones web
cert_file =                      ; Archivo de certificado SSL/TLS
cert_key =                       ; Archivo de clave privada SSL/TLS

Configuración de la Base de Datos

Por defecto, Grafana utiliza SQLite3. Se puede configurar para usar otras bases de datos como MySQL o PostgreSQL.


[database]
type = sqlite3                   ; Opciones: mysql, postgres, sqlite3
path =                           ; Solo para sqlite3: ruta al archivo de base de datos
host = 127.0.0.1:3306            ; Para mysql/postgres: host y puerto
name = grafana                   ; Nombre de la base de datos
user =                           ; Usuario para la conexión
password =                       ; Contraseña para la conexión
ssl_mode =                       ; Para postgres: modo SSL

Configuración de Seguridad


[security]
admin_user = admin               ; Usuario administrador por defecto
admin_password = admin           ; Contraseña administrador por defecto
login_remember_days = 30         ; Días para mantener la sesión iniciada
secret_key =                     ; Clave secreta para la firma de sesiones
disable_gravatar = false

Configuración de Usuarios


[users]
allow_sign_up = true             ; Permitir registro de usuarios
allow_org_create = true          ; Permitir creación de organizaciones
auto_assign_org = true           ; Asignar nuevos usuarios a la organización 1
auto_assign_org_role = Viewer    ; Rol por defecto para nuevos usuarios (Admin, Editor, Viewer)
default_language = en-US         ; Idioma por defecto de la interfaz (ej. zh-Hans para chino simplificado)

Configuración de Acceso Anónimo


[auth.anonymous]
enabled = false                  ; Habilitar acceso anónimo
org_name = Main Org.             ; Nombre de la organización para usuarios anónimos
org_role = Viewer                ; Rol para usuarios anónimos

Configuración del Servicio de Correo Electrónico (SMTP)


[smtp]
enabled = false
host = localhost:25
user =
password =
cert_file =
key_file =
skip_verify = false
from_address = admin@grafana.localhost

[emails]
welcome_email_on_sign_up = false
templates_pattern = emails/*.html

Configuración de Logs


[log]
mode = console,file              ; Modos de salida: console, file. Separar por coma para múltiples.
buffer_len = 10000
level = info                     ; Niveles: Trace, Debug, Info, Warn, Error, Critical

[log.console]
level =

[log.file]
level =
log_rotate = true                ; Habilitar rotación automática de logs
max_lines = 1000000              ; Máximo de líneas por archivo de log
max_lines_shift = 28             ; Máximo tamaño de archivo (en MB, por defecto 256MB)
daily_rotate = true              ; Rotación diaria de logs
max_days = 7                     ; Días de retención de logs

Instalación de Plugins Básicos

Instalación en Línea

Para instalar plugins directamente desde la línea de comandos:


# Instalar plugin de gráfico circular (piechart)
grafana-cli plugins install grafana-piechart-panel

# Instalar plugin de gráfico de dispersión (plotly)
grafana-cli plugins install natel-plotly-panel

# Instalar plugin de fuente de datos JSON simple
grafana-cli plugins install grafana-simple-json-datasource

# Instalar plugin de tema (boomtheme)
grafana-cli plugins install yesoreyeram-boomtheme-panel
# Ver temas disponibles: https://github.com/gilbN/theme.park/wiki/Themes#grafana-themes

Instalación sin Conexión

Para instalar plugins sin conexión, descargue el plugin (generalmente en formato zip), extráigalo en el directorio de plugins de Grafana y reinicie el servicio.


# Navegar al directorio de plugins
cd /var/lib/grafana/plugins

# Descomprimir el plugin (ejemplo con grafana-piechart-panel)
unzip grafana-piechart-panel-v1.3.8-0-g4f34110.zip

# Renombrar la carpeta si es necesario para estandarizar
mv grafana-piechart-panel-4f34110 grafana-piechart-panel

# Reiniciar el servicio Grafana
systemctl restart grafana-server

Configuración de Prometheus como Fuente de Datos

  1. En la interfaz de Grafana, navegue a la sección Data sources (en versiones antiguas, podría estar bajo Administration).
  2. Haga clic en Add data source.
  3. Seleccione Prometheus de la lista de fuentes de datos disponibles.
  4. Configure los detalles de conexión de su instancia de Prometheus, incluyendo la URL.
  5. Haga clic en Save & Test para verificar que la conexión sea exitosa.

Una vez configurada correctamente, podrá empezar a crear dashboards que consulten datos de Prometheus.

Recursos de Referencia:

Etiquetas: Grafana prometheus Visualización monitorización Kubernetes

Publicado el 8-3 22:06