Todo sistema que implantemos debería de tener su stack de monitorización que nos permita conocer qué es lo que está pasando, cómo se está comportando, si tiene un rendimiento óptimo, etcétera. Para ello, Open Service Mesh se integra con Prometheus, Grafana y Jaeger a día de hoy. En este artículo te cuento cómo configurarlos y cómo acceder a ellos.
Instalación de los componentes
Para este artículo me he basado en la instalación de Open Service Mesh, que te mostré en el primer artículo de la serie:
osm install \
--mesh-name "$osm_mesh_name" \
--osm-namespace "$osm_namespace" \
--set=osm.enablePermissiveTrafficPolicy=true \
--set=osm.deployPrometheus=true \
--set=osm.deployGrafana=true \
--set=osm.deployJaeger=true
En ella la instalación de los componentes se hace con el comando osm. También es posible configurar tu propia instancia de Prometheus e instancia de Jaeger, pero en este punto es más que suficiente instalarlo como un conjunto. Sin embargo, esto desplegará los recursos necesarios dentro del clúster pero no configurará la recolección de las métricas y trazas.
Recolectar métricas de Prometheus
Si bien los componentes ya están instalados, es necesario configurarlo para que los mismos comiencen a recolectar información. En el caso de Prometheus, podemos utilizar el comando osm para habilitar las métricas en uno o varios namespaces:
# Enable metrics scrapping
osm metrics enable --namespace stores
osm metrics enable --namespace bookbuyer
osm metrics enable --namespace bookthief
A partir de este momento el servidor de métricas comenzará a recolectar la información generada de los diferentes componentes que estén en esos namespaces.
Acceso a Grafana
Ahora que ya se está recolectando información sobre tus servicios, el siguiente paso es visualizarla. En la instalación que hice de Open Service Mesh también se ha desplegado una instancia con Grafana con Prometheus configurado como fuente. Para acceder a ella puedes hacerlo a través de este comando:
# Access to Grafana
osm dashboard
Este nos lanzará una nueva ventana del navegador donde podemos usar el usuario y contraseña por defecto de Grafana (admin/admin) y en la primera sección podrás ver que hay varios paneles ya preconfigurados.
De esta forma no tendrás que empezar desde cero para visualizar la información recolectada por Prometheus.

Recuperar y visualizar trazas con Jaeger
Al igual que otros service mesh, OSM también se integra con Jaeger para visualizar las trazas que están generando los diferentes componentes y su relación entre ellos. Por defecto, al igual que la recolección de métricas no está habilitado. Puedes comprobar su estado con este comando:
# Verify tracing configuration
kubectl get meshconfig osm-mesh-config -n osm-system -o jsonpath='{.spec.observability.tracing}{"\n"}'
Para activarlo puedes hacerlo de esta manera:
# Enable tracing after OSM control plane has already been installed
kubectl patch meshconfig osm-mesh-config -n osm-system -p '{"spec":{"observability":{"tracing":{"enable":true,"address": "jaeger.osm-system.svc.cluster.local","port":9411,"endpoint":"/api/v2/spans"}}}}' --type=merge
Por último, para acceder a la interfaz de Jaeger puedes hacerlo haciendo un port fowarding del pod que hospeda la instancia de la herramienta:
# View the Jaeger UI with Port-Forwarding
OSM_NAMESPACE="osm-system"
OSM_POD=$(kubectl get pods -n "$OSM_NAMESPACE" --no-headers --selector app=jaeger | awk 'NR==1{print $1}')
kubectl port-forward -n "$OSM_NAMESPACE" "$OSM_POD" 16686:16686
Según esta configuración, podrás acceder a la interfaz a través de http://localhost:16686/ y ver las trazas que comenzaron a llegar, una vez activada la configuración de Jaeger:

Otra sección muy interesante es la System Architecture donde puedes ver la relación entre los diferentes componentes, gracias a las trazas recopiladas hasta el momento:

¡Saludos!