Este post es continuación de [Monitoreo y Observabilidad: Instalando Prometheus - Parte 1](https://www.ahioros.info/2024/08/monitoreo-y-observabilidad-instalando.html) ## ¿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](https://www.ahioros.info/2024/08/monitoreo-y-observabilidad-instalando.html) 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 --- 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" ---
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 ---
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 --- 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 --- 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.
Yo he agredo la IP en mi /etc/hosts para poder entrar:
Vamos al navegador y ponemos la URL si usaste un port-forward adelante.
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:
4. Vamos hasta la parte de abajo y le damos click en **Save & test** 5. Listo ya tienes la fuente de datos configurada. ## 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:
5. Ahora debes buscar en esa página donde dice ID, copia ese número. 6. 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**. 7. Listo ya tienes el dashboard importado. ## 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](https://dev.azure.com/guillermogarcialedezma/DockerHub%20Test/).
No hay comentarios.:
Publicar un comentario