DEV Community

Guillermo Garcia
Guillermo Garcia

Posted on • Originally published at ahioros.info on

Monitoreo y Observabilidad: Instalando Grafana - Parte 2

Este post es continuación de Monitoreo y Observabilidad: Instalando Prometheus - Parte 1

¿Qué es Grafana?

Grafana es una herramienta open-source de análisis, almacenamiento y visualización de series de datos, ofreciendo una interfaz de usuario amigable y muy poderosa.

En el ejemplo que estoy usando Prometheus como nuestra fuente de información (Datasource).

Básicamente Prometheus es el que se encarga de recabar los datos, mientras que Grafana es el que se encarga de mostrar la información.

Nota: Debido a que yo lo estoy ejecutando desde un cluster de Kubernetes onpremise, he tenido que definir un PV, por lo que si tu intentas ejecutarlo en tu proveedor de nube no debería ser necesario ya que dicho almacenamiento te lo debe facilitar tu proveedor en la nube.

Aqui te dejo el video para que vayas realizándolo conmigo:

Instalación

Crear un namespace:

01-namespace.yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: grafana
---
Enter fullscreen mode Exit fullscreen mode

Crear de PV:

Nota: el path: lo puedes cambiar por cualquier directorio que exista (o lo puedes crear) en tus nodos y que tengas espacio mayor o igual a 1G.

02-grafana-pv.yaml

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: grafana-pv
  labels:
    type: local
  namespace: grafana
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/grafana"
---
Enter fullscreen mode Exit fullscreen mode

Image description

Crear de PVC:

03-grafana-pvc.yaml

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc
  namespace: grafana
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
Enter fullscreen mode Exit fullscreen mode

Image description

Creación del deployment:

04-grafana-deployment.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  labels:
    app: grafana
  namespace: grafana
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: grafana/grafana:latest
          imagePullPolicy: IfNotPresent
          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: 250m
              memory: 750Mi
          volumeMounts:
            - mountPath: /etc/grafana/provisioning
              name: grafana-pv
      volumes:
        - name: grafana-pv
          persistentVolumeClaim:
            claimName: grafana-pvc
---
Enter fullscreen mode Exit fullscreen mode

Creación del service:

05-grafana-service.yaml
Nota: Recuerda que en mi caso estoy usando metallb para crear un load balancer.

---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: grafana
spec:
  ports:
    - port: 80
      protocol: TCP
      targetPort: http-grafana
  selector:
    app: grafana
  sessionAffinity: None
  type: LoadBalancer
---
Enter fullscreen mode Exit fullscreen mode

Después de unos segudos podemos ver todo lo que se ha creado en el namespace grafana. Ahora podemos entrar (en mi caso) a grafana con la dirección que nos da el load balancer.

Image description

Yo he agredo la IP en mi /etc/hosts para poder entrar:

Image description

Vamos al navegador y ponemos la URL si usaste un port-forward adelante.

Image description

Las credenciales por default son:
username: admin
password: admin

Una vez presiones Log in , te pedirá introducir y confirmar un nuevo password.

Primero Pasos con Grafana

Vamos a agregar una nueva fuente de datos (Datasource):

1. En el panel de la izquierda vamos **Connections -> Data sources**.
2. Buscamos o escribimos Prometheus y damos click.
3. En la sección **Connection** debes ingresar la URL donde estás ejecutando Prometheus. por ejemplo en mi caso es esta:
Enter fullscreen mode Exit fullscreen mode

Image description

4. Vamos hasta la parte de abajo y le damos click en **Save & test**
5. Listo ya tienes la fuente de datos configurada.
Enter fullscreen mode Exit fullscreen mode

Dashboards con Grafana

Una de las grandes ventajas que tiene Grafana es su comunidad (como en todo proyecto de software libre/open-source) y es que no tenemos que reinventar la rueda, es decir, no hay necesidad de crear desde cero los dashboard, la comunidad ya comparte unos y muy buenos, los cuales después de importarlos los puedes modificar/editar a tus necesidades.

Para importar un dashboard hay que realizar los siguientes pasos:

1. En el panel de la izquierda vamos a **Dashboards**.
2. Damos click en el botón arriba a la derecha que dice **New -> Import**. También lo puedes hacer en el botón del centro de la pantalla que dice **+ Create dashboard** y en la siguiente pantalla le das click en import (es un poco más largo este camino).
3. Abre una pestaña nueva y ve al sitio donde se comparten los dashboards:
  http://grafana.com/dashboards
4. Busca el dashboard que quieres importar y le das click, por ejemplo yo elegí este:
Enter fullscreen mode Exit fullscreen mode

Image description

5. Ahora debes buscar en esa página donde dice ID, copia ese número.

  1. Regresa a la ventana de Grafana y pega el ID, después le das click en el botón Load. En esta ventana le puedes cambiar el nombre al dashboard (aunque lo puedes hacer después), mira que arriba del botón import dice Prometheus, dale click para que se desplieguen los datasources, en nuestro caso solo tenemos uno que es Prometheus, lo seleccionas y después le das click en Import.
  2. Listo ya tienes el dashboard importado.
Enter fullscreen mode Exit fullscreen mode

Grafana más que dashboards

Con Grafana también puedes crear tus alertas de una forma más sencilla que usando prometheus, dependiendo del dashboard, así puedes crear una alerta para cuando detecte problemas a partir del dashboard de "hardware" para que le lleguen al equipo de infraestructura y crear una alerta para cuando detecte problemas a partir del dashboard de la aplicación y que le llegue la notificación al equipo de desarrollo por mencionar un ejemplo.

De igual forma puedes incluir los yaml de Grafana dentro de un repositorio para que sean leídos por Argo CD y automatices la creación de un cluster de Kubernetes o el despliegue de una nueva versión.
Te dejo de tarea (enseño a pescar, no regalo un pez) como implementar Thanos para que guardes los datos y que puedas consultarlos en el futuro.

Conclusión

Hasta aquí he cubierto todo el esquema de CI/CD, de una manera sencilla usando Microsoft Azure DevOps. Estoy meditando si mostrar como usar Github Actions es otro estandar usado por las empresas. También tengo pensado implementar un poco de DevSecOps.

Espero que te sirvan esta serie de post, si tienes dudas déjalas abajo en los comentarios.

Aquí está el repositorio de Azure DevOps.

Top comments (0)