Despliegue de 2 aplicaciones en OpenShift 4.6 que exponen métricas para prometheus en un proyecto definido por el usuario. La primera aplicación hace uso de la librería cliente de Prometheus del leguaje GO para exponer sus métricas en el contexto /metrics; en la cual se realiza la configuración de ServiceMonitor para habilitar el monitoreo a nivel de Servicio. La segunda aplicación hace uso del exporter MySQL oficial de Prometheus para realizar su exposición en el contexto /metrics y se hace uso de PodMonitor para habilitar el monitoreo a nivel de Pod. Existen pasos en los cuales se crean rutas, los cuales se pueden omitir, ya que son meramente de validación.
Una vez deplegadas ambas aplicaciones, es posible visualizar las métricas expuestas en la consola de OCP y Grafana (mediante la instalación del Operador Comunitario de Grafana).
Se debe habilitar el monitoreo de proyectos definidos por el usuario, instalar Grafana Operator y realizar las configuraciones necesarias para Grafana tenga acceso a las métricas en los proyecyor definidos por el usuario y de sistema.
Las siguientes actividades deberán ejecutarse con un usuario que tenga el rol cluster-admin.
- Habiltar el monitoreo de métricas en proyectos definidos por el usuario:
- Editar el configmap cluster-monitoring-config en el proyecto openshift-monitoring
Por Ejemplo:
enableUserWorkload: true
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true
Nota: En caso de que el config map cluster-monitoring-config no exista, deberá generarse con la estructura mostrada arriba.
-
Instalar Grafana Operator Comunitario:
Debido a que el Grafana instalado en la versión por defecto de OpenShift es de solo lectura, para conseguir visualizar las métricas en los proyectos definidos por el usuario y crear Dashboards personalizados, es necesario instalar la versión comunitaria de Grafana Operator desde Operator Hub.
-
Crear el proyecto en donde se instalará el operador (En este caso se configuro custom-grafana)
oc new-project custom-grafana
-
En la consola de OpenShift, navegar hacia OperatorHub y buscar Grafana
-
Seleccionar Operator Grafana, presionar Continue
-
Aceptar los términos
-
Presionar Install
-
Presionar nuevamente Install para aceptar la configuración por defecto y desplegar en el proyecto custom-grafana
-
Verificar la instalación en progreso
-
Verificar Operador Instalado Correctamente
- Configurar Grafana Personalizado para visualizar las métricas de sistema y las de proyectos definidos por el usuario:
-
En una terminal, crear el CRD grafana definido en el archivo grafana-intance.yaml; el cual generará la instancia de Grafana grafana-instance que tendra las credenciales root/secret
oc create -f grafana-instance.yaml
-
Asignar el rol de cluster cluster-monitoring-view al service account grafana-serviceaccount
oc adm policy add-cluster-role-to-user cluster-monitoring-view -z grafana-serviceaccount
-
Crear el secreto token-grafana-sa que incluye la variable TOKEN_SA, la cual contiene el TOKEN del Service Account grafana-serviceaccount
oc create secret generic token-grafana-sa --from-literal=TOKEN_SA=$(oc serviceaccounts get-token grafana-serviceaccount) -
Crear el origen de datos de Grafana prometheus-grafanadatasource mediante la definición del CRD GrafanaDataSource encontrada en el archivo grafana-datasource.yaml
oc create -f grafana-datasource.yaml
Este paso generará una configuración de Origen de Datos de Prometheus para grafana que apunte al servicio de thanos-querier en el proyecto openshift-monitoring; el cual es un punto central para la recolección de métricas de sistema y de proyectos definidos por el usuario, de acuerdo al diagrama siguiente:
-
Para validar que la configuración sea correcta, ingresar a Grafana, primero, obtener la ruta:
oc get routes -n custom-grafana
-
Acceder en un explorador web a la URL de Grafana, dar click en Sign In:
-
Ingresar como usuario administrativo con las credenciales root/secret:
-
Ir a Configuration->Data Sources:
-
Seleccionar el Origen de Datos Prometheus:
-
Validar configuración y sin modificar, hacer click en Save & Test:
Los pasos para desplegar una aplicación que hace uso de una librería cliente de Prometheus para exposición de métricas y habilitar su visualización en la consola de OpenShift a traves del CRD ServiceMonitor son los siguientes:
- Creación del proyecto metrics-demo como espacio de trabajo para el despliegue de las aplicaciones:
- En una terminal, crear el proyecto metrics-demo
oc new-project metrics-demo
- Despliegue de la aplicación:
- Crear los objetos Deployment y Service de acuerdo prom-app a la definición del archivo prom-app.yml
oc create -f prom-app.yml -n metrics-demo
- [Opcional] Validación de exposición de métricas en el contexto /metrics:
- Crear la ruta prom-app exponiendo el servicio prom-app
oc expose service prom-app -n metrics-demo
- Probar la aplicación
curl -w '\n' $(oc get routes prom-app --template={{.spec.host}} -n metrics-demo)
- Obtener las métricas expuestas
curl $(oc get routes prom-app --template={{.spec.host}} -n metrics-demo)/metrics
- Habilitar y Visualizar las métricas de la aplicación en OpenShift:
-
Crear el CRD ServiceMonitor prom-app-monitor de acuerdo a la definición del archivo sm-prom-app.yml
oc create -f sm-prom-app.yml -n metrics-demo
-
En la consola de administración de OpenShift, sleccionar la vista Developer e ir a Monitoring pestaña Metrics.
Asegurarse que el proyecto metrics-demo este seleccionado en la parte superior.
-
Seleccionar Custom Query, escribir un PromQL de Prometheus (En el ejemplo, se ejecuta la visualización de la métrica http_request_duration_seconds_count{code="200",handler="found",method="get"} y presionar Enter, se mostrará una gráfica si el PromQL esta correctamente formado.
Los pasos para desplegar una aplicación que hace uso de exporter de Prometheus de Prometheus para exposición de métricas y habilitar su visualización en la consola de OpenShift a traves del CRD PodMonitor son los siguientes:
- Asegurarse de trabajar en el proyecto metrics-demo:
- En una terminal, seleccionar el proyecto metrics-demo
oc project metrics-demo
- Despliegue de la base de datos:
- Crear la aplicación mariadb teniendo como fuenta la imagen de contenedor MariaDB de DockerHub; la creara la base de datos database con las credenciales user/user para usuario común y root/root para usuario privilegiado.
oc new-app --name=mariadb --docker-image=docker.io/library/mariadb -e MYSQL_USER=user -e MYSQL_PASSWORD=user -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=database -n metrics-demo
- Configurar Exporter de Prometheus:
-
Editar el despliegue mariadb, agrgando el contenedor con la imagen oficial del exporter de Prometheus para MySQL. En la definición se grega la variable de entorno DATA_SOYRCE que apunta la base de datos y se define el puerto por el cual será expuesto el servicio web que dará lugar al contexto /metrics.
oc edit deployment/mariadb -n metrics-demo
Se debera agregar a la sección containers:
- env: - name: DATA_SOURCE_NAME value: root:root@(127.0.0.1:3306)/database image: prom/mysqld-exporter name: mariadb-exporter ports: - containerPort: 9104 name: mariadb-metrics protocol: TCP
Por Ejemplo:
- [Opcional] Validación de exposición de métricas en el contexto /metrics:
- Crear el servicio mariadb-metrics que apunta al puerto 9104 del pod mariadb
oc expose deployment/mariadb --name=mariadb-metrics --port=9104 --target-port=9104 -n metrics-demo
- Crear la ruta mariadb-metrics exponiendo el servicio mariadb-metrics
oc expose service mariadb-metrics -n metrics-demo
- Obtener las métricas expuestas
curl $(oc get routes mariadb-metrics --template={{.spec.host}} -n metrics-demo)/metrics
- Habilitar y Visualizar las métricas de la base de datos en OpenShift:
-
Crear el CRD PodMonitor pod-mariadb-monitor de acuerdo a la definición del archivo pm-mariadb.yml
oc create -f pm-mariadb.yml -n metrics-demo
-
En la consola de administración de OpenShift, sleccionar la vista Developer e ir a Monitoring pestaña Metrics.
Asegurarse que el proyecto metrics-demo este seleccionado en la parte superior.
-
Seleccionar Custom Query, escribir un PromQL de Prometheus (En el ejemplo, se ejecuta la visualización de la métrica mysql_up y presionar Enter, se mostrará una gráfica si el PromQL esta correctamente formado.
En esta sección, se mostraá como configurar una alerta en la base de datos mariadb desplegada y configurada en la sección anterior. Los pasos para configurar alertas en las métricas de los proyectos definidos por el usuario, son los siguientes:
- Asegurarse de trabajar en el proyecto metrics-demo:
- En una terminal, seleccionar el proyecto metrics-demo
oc project metrics-demo
- Configuración de la alerta:
-
Crear el CRD PrometheusRule mariadb-alert-rules de acuerdo a la definición encontrada en los archivos alert{1,2}-mariadb-create-table.yml. La estructura especifica el disparo de una alarma de severidad crítica si se han ejecutado 2 ó más creaciones de tabla (Mediante el comando CREATE TABLE), para que sea disparada, la condición debera sostenerse por 1 segundo o más.
oc create -f alert1-mariadb-create-table.yml -n metrics-demo
ó
oc create -f alert2-mariadb-create-table.yml -n metrics-demo
Nota: Crear solo uno de las 2 definiciones mostradas. La diferencia entre alert1-mariadb-create-table.yml y alert2-mariadb-create-table.yml es que la primera regla se despliega para ser tratada por el componente thanos-ruler, mientras que la segunda, es desplegada directamente en Prometheus. La aplicación de la segunda es recomendada, cuando en ninguna de las regas es utilizada una métrica del sistema, lo que ayuda a mejorar el rendimiento de ejecución de la misma.
- Forzar Disparo de la Alarma:
-
En la consola de administración de OpenShift, sleccionar la vista Administrator e ir a Monitoring->Alerting . Eliminar el filtro Platform y agregar el filtro User. El resultado es que no exista ninguna alarma relacionada a la regla create-table-alert
-
En la terminal, hacer un port forward al puerto 3306 al pod de mariadb.
oc port-forward $(oc get pods --no-headers -o custom-columns=":metadata.name" -l deployment=mariadb -n metrics-demo) 3306:3306 -
En otra terminal, conectarse a la base de datos.
mysql -u root -proot -h 127.0.0.1 -P 3306 --protocol=TCP database
-
Crear dos tablas.
CREATE TABLE uno(uno INT); CREATE TABLE dos(dos INT); exit
-
En la consola de OpenShift, validar el disparo de la alerta.
Configuración de DashBoard en Grafana para visualización de métricas en proyectos definidos por el usuario
En esta sección, se mostraá como desplegar un dashboard en Grafana haciendo uso del CRD GrafanaDashboard.
- Asegurarse de trabajar en el proyecto custom-grafana:
- En una terminal, seleccionar el proyecto custom-grafana
oc project custom-grafana
- Creación y validación del Dashboard:
-
Crear el CRD GrafanaDashBoard create-tables-mysql de acuerdo a la definición encontrada en el archivo grafana-dashboard.yaml. La estructura especifica la definición de un dashboard simple que muestra el conteo de la ejecución del comando CREATE TABLE en una base de datos MariaDB, además, configura una alerta que se dispara cuando se ha ejecutado el comando más de 5 veces en un periodo sostenido de 1 minuto por una evaluación cada 30 segundos.
oc create -f grafana-dashboard.yml -n custom-grafana
-
En la interfaz de Grafana ir a Dashboargs->Manage:
-
Seleccionar el Dashboard create-tables-mysql, visualizar la recolección de la métrica de creación de tablas.
-
Seleccionar el nombre del DashBoard y Dar Click en Editar. Visualizar el query y la configración de la alarma.
- Forzar Disparo de la Alarma:
-
En la terminal, hacer un port forward al puerto 3306 al pod de mariadb.
oc port-forward $(oc get pods --no-headers -o custom-columns=":metadata.name" -l deployment=mariadb -n metrics-demo) 3306:3306 -
En otra terminal, conectarse a la base de datos.
mysql -u root -proot -h 127.0.0.1 -P 3306 --protocol=TCP database
-
Crear cuatro tablas.
CREATE TABLE tres(tres INT); CREATE TABLE cuatro(cuatro INT); CREATE TABLE cinco(cinco INT); CREATE TABLE seis(seis INT); exit
-
En la interfaz de Grafana, esperar al menos 1 minuto y validar el disparo de la alerta.
Se ha realizado la configuración de OpenShift para activar el monitoreo de métricas en los proyectos definidos por el usuario, y se ha realizado la visualización de métricas y configuración alertas tanto en la consola de OpenShift como en una instalación de Grafana haciendo uso del operator comunitario para dos aplicaciones desplegadas.
Documentación Oficial de Prometheus
Client Libraries de Prometheus


























