Grafana Alerting vs AlertManager: Una Comparación de Dos Herramientas de Monitoreo Líderes

Grafana Alerting vs AlertManager: Una Comparación de Dos Herramientas de Monitoreo Líderes

Introducción

Las capacidades de Grafana Alerting continúan mejorando en cada nueva versión que el equipo de GrafanaLabs realiza. Especialmente con los cambios realizados en Grafana 8 y Grafana 9, se han planteado muchas preguntas sobre su uso, las capacidades soportadas y la comparación con otras alternativas.

Queremos comenzar estableciendo el contexto sobre Grafana Alerting basado en el stack habitual que desplegamos para mejorar la observabilidad de nuestras cargas de trabajo. Grafana se puede usar para cualquier carga de trabajo; hay una preferencia por algunas específicas siendo la solución más utilizada cuando hablamos de cargas de trabajo en Kubernetes.

En este tipo de despliegue, el stack que usualmente desplegamos es Grafana como la herramienta de visualización y Prometheus como el núcleo para recopilar todas las métricas, de modo que todas las responsabilidades están diferenciadas. Grafana dibuja toda la información utilizando sus excelentes capacidades de paneles, recopilando la información de Prometheus.

Grafana Alerting vs AlertManager: Una Comparación de Dos Herramientas de Monitoreo Líderes

Cuando planeamos comenzar a incluir alertas, ya que no podemos aceptar que necesitamos tener un equipo específico solo observando paneles para detectar dónde algo está fallando, necesitamos implementar una forma de enviar alertas.

Las capacidades de alerta en Grafana han estado presentes desde el principio, pero sus capacidades en las primeras etapas se han limitado a generar alertas gráficas centradas en los paneles. En lugar de eso, Prometheus actuando como el cerebro, incluye un componente llamado AlertManager que puede manejar la creación y notificación de cualquier alerta generada a partir de toda la información almacenada en Prometheus.

Las principales capacidades que Alert Manager proporciona son la definición de las alertas, agrupación de las alertas, reglas de desestimación para silenciar algunas notificaciones, y finalmente, la forma de enviar esa alerta a cualquier sistema basado en un sistema de plugins y un webhook para poder extenderlo a cualquier componente disponible.

Grafana Alerting vs AlertManager: Una Comparación de Dos Herramientas de Monitoreo Líderes

Entonces, esta es la etapa inicial, pero esto ha cambiado con las últimas versiones de Grafana en los últimos meses, como se comentó, y ahora la barrera entre ambos componentes es mucho más difusa, como vamos a ver.

¿Cuáles son las principales capacidades que Grafana Alerting ofrece hoy en día?

Grafana Alerting te permite definir reglas de alerta definiendo los criterios bajo los cuales esta alerta debería activarse. Puede tener diferentes consultas, condiciones, frecuencia de evaluación y la duración durante la cual se cumple la condición.

Esta alerta puede generarse desde cualquiera de las fuentes soportadas en Grafana, y ese es un tema muy relevante ya que no se limita a los datos de Prometheus. Con la eclosión del stack de GrafanaLabs con muchos nuevos productos como Grafana Loki y Grafana Mimir, entre otros, esto es especialmente relevante.

Una vez que cada una de las alertas se activa, puedes definir una política de notificación para decidir dónde, cuándo y cómo se enruta cada una de estas alertas. Una política de notificación también tiene un punto de contacto asociado con uno o más notificadores.

Además, puedes silenciar alertas para dejar de recibir notificaciones de una instancia de alerta específica y silenciar alertas cuando puedes definir un período en el que no se generarán o notificarán nuevas alertas.

Todo eso con poderosas capacidades de paneles utilizando todo el poder de las características de paneles de Grafana.

Grafana Alerting vs AlertManager: Una Comparación de Dos Herramientas de Monitoreo Líderes

Grafana Alerting vs Prometheus Alert Manager

Después de leer la sección anterior probablemente estés confundido porque la mayoría de las nuevas características añadidas son muy similares a las que tenemos disponibles en Prometheus AlertManager.

Entonces, en ese caso, ¿qué herramienta deberíamos usar? ¿Deberíamos reemplazar Prometheus AlertManager y comenzar a usar Grafana Alerting? ¿Deberíamos usar ambos? Como puedes imaginar, esta es una de esas preguntas que no tiene respuestas claras ya que dependerá mucho del contexto y tu escenario específico, pero permíteme darte algunas indicaciones al respecto.

  • Grafana Alerting puede ser muy poderoso si ya estás dentro del stack de Grafana. Si ya estás usando Grafana Loki (y necesitas generar alertas desde él), Grafana Mimir, o directamente Grafana cloud, probablemente Grafana Alert proporcionará un mejor ajuste para tu ecosistema.
  • Si necesitas alertas complejas definidas con consultas y cálculos complejos, Prometheus AlertManager proporcionará un ecosistema mucho más complejo y rico para generar tus alertas.
  • Si estás buscando un enfoque SaaS, Grafana Alerting también se proporciona como parte de Grafana Cloud, por lo que se puede usar sin la necesidad de ser instalado en tu ecosistema.
  • Si estás usando Grafana Alerting, necesitas considerar que el mismo componente que sirve los paneles está computando y generando las alertas, lo que requeriría capacidades adicionales de HA. Habrá una relación inevitable entre ambas características (paneles y alertas). Supongamos que eso no resuena bien contigo porque la criticidad de tu panel no es la misma que la de las alertas, o piensas que el uso de tu panel puede afectar el rendimiento de las alertas. En ese caso, Prometheus Alert Manager proporcionará un mejor enfoque ya que se ejecuta en un pod específico en aislamiento.
  • En este momento, Grafana Alerting utiliza una base de datos SQL para gestionar la duplicación entre otras características, por lo que dependiendo del número de alertas con las que necesites trabajar, podría no ser suficiente en términos de rendimiento, y el uso de la base de datos de series temporales de Prometheus puede ser una mejor opción.

Resumen

Grafana Alerting es un progreso increíble en el camino del equipo de Grafana Labs para proporcionar un stack de observabilidad de extremo a extremo con un gran ajuste en el resto del ecosistema con la opción de ejecutarlo en modo SaaS y centrarse en la facilidad de uso. Pero hay mejores opciones dependiendo de tus necesidades.

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Monitoreo de Prometheus en TIBCO Cloud Integration

Monitoreo de Prometheus en TIBCO Cloud Integration

En publicaciones anteriores, he explicado cómo integrar aplicaciones de TIBCO BusinessWorks 6.x / BusinessWorks Container Edition (BWCE) con Prometheus, uno de los sistemas de monitoreo más populares para capas en la nube. Prometheus es una de las soluciones más utilizadas para monitorear tus microservicios dentro de un clúster de Kubernetes. En esta publicación, explicaré los pasos para aprovechar Prometheus para integrarse con aplicaciones que se ejecutan en TIBCO Cloud Integration (TCI).

TCI es el iPaaS de TIBCO y principalmente oculta la complejidad de gestión de aplicaciones de una app para los usuarios. Necesitas tu aplicación empaquetada (también conocida como EAR) y manifest.json, ambos generados por el producto para simplemente desplegar la aplicación.

¿No es mágico? ¡Sí, lo es! Como expliqué en mi publicación anterior relacionada con la integración de Prometheus con BWCE, que te permite personalizar tus imágenes base, TCI permite la integración con Prometheus de una manera ligeramente diferente. Vamos a recorrer los pasos.

TCI tiene sus propias herramientas de monitoreo integradas (mostradas a continuación) para proporcionar información sobre la utilización de Memoria y CPU, además del rendimiento de la red, lo cual es muy útil.

Aunque las métricas de monitoreo proporcionadas de fábrica por TCI son suficientes para la mayoría de los escenarios, hay casos de uso de conectividad híbrida (aplicación ejecutándose en las instalaciones y microservicios ejecutándose en tu propio clúster que podría estar en una nube privada o pública) que podrían requerir una vista unificada de monitoreo.

Paso uno es importar el plugin de Prometheus desde la ubicación actual de GitHub a tu espacio de trabajo de BusinessStudio. Para hacer eso, solo necesitas clonar el Repositorio de GitHub disponible aquí: https://github.com/TIBCOSoftware/bw-tooling O https://github.com/alexandrev/bw-tooling

Importa el plugin de Prometheus eligiendo la opción Importar → Plug-ins y Fragmentos y especificando el directorio descargado de la ubicación de GitHub mencionada anteriormente. (mostrado abajo)

Monitoreo de Prometheus en TIBCO Cloud Integration
Monitoreo de Prometheus en TIBCO Cloud Integration

Paso dos implica agregar el módulo de Prometheus previamente importado a la aplicación específica como se muestra a continuación:

Monitoreo de Prometheus en TIBCO Cloud Integration

Paso tres es simplemente construir el archivo EAR junto con manifest.json.

NOTA: Si el EAR no se genera una vez que agregas el plugin de Prometheus, por favor sigue los pasos a continuación:

  • Exporta el proyecto con el módulo de Prometheus a un archivo zip.
  • Elimina el proyecto de Prometheus del espacio de trabajo.
  • Importa el proyecto desde el archivo zip generado antes.

Antes de desplegar la aplicación BW en TCI, necesitamos habilitar un puerto adicional en TCI para extraer las métricas de Prometheus.

Paso cuatro Actualización del archivo manifest.json.

Por defecto, una app de TCI que usa el archivo manifest.json solo expone un puerto para ser consumido desde afuera (relacionado con servicios funcionales) y otro para ser usado internamente para verificaciones de salud.

Monitoreo de Prometheus en TIBCO Cloud Integration

Para la integración de Prometheus con TCI, necesitamos un puerto adicional escuchando en 9095, para que el servidor de Prometheus pueda acceder a los endpoints de métricas para extraer las métricas requeridas para nuestra aplicación TCI.

Nota: Este documento no cubre los detalles sobre la configuración del servidor de Prometheus (NO es necesario para este PoC) pero puedes encontrar la información relevante en https://prometheus.io/docs/prometheus/latest/installation/

Necesitamos modificar ligeramente el archivo manifest.json generado (de la app BW) para exponer un puerto adicional, 9095 (mostrado abajo).

Monitoreo de Prometheus en TIBCO Cloud Integration

Además, para decirle a TCI que queremos habilitar el endpoint de Prometheus necesitamos establecer una propiedad en el archivo manifest.json. La propiedad es TCI_BW_CONFIG_OVERRIDES y proporciona el siguiente valor: BW_PROMETHEUS_ENABLE=true, como se muestra a continuación:

Monitoreo de Prometheus en TIBCO Cloud Integration

También necesitamos agregar una línea adicional (propertyPrefix) en el archivo manifest.json como se muestra a continuación.

Monitoreo de Prometheus en TIBCO Cloud Integration

Ahora, estamos listos para desplegar la aplicación BW en TCI y una vez que esté desplegada podemos ver que hay dos endpoints

Monitoreo de Prometheus en TIBCO Cloud Integration

Si expandimos las opciones de Endpoints a la derecha (mostrado arriba), puedes ver que uno de ellos se llama “prometheus” y ese es nuestro endpoint de métricas de Prometheus:

Simplemente copia la URL de prometheus y añádela con /metrics (URL en la captura de pantalla a continuación) — esto mostrará las métricas de Prometheus para la aplicación BW específica desplegada en TCI.

Nota: añadir /metrics no es obligatorio, la URL tal cual para el endpoint de Prometheus también funcionará.

Monitoreo de Prometheus en TIBCO Cloud Integration

En la lista encontrarás el siguiente tipo de métricas para poder crear los dashboards y análisis más increíbles basados en ese tipo de información:

  • Métricas JVM sobre memoria utilizada, rendimiento de GC y conteos de pools de hilos
  • Uso de CPU por la aplicación
  • Conteos de ejecución de Procesos y Actividades por Estado (Iniciado, Completado, Fallido, Programado..)
  • Duración por Actividad y Proceso.

Con toda esta información disponible puedes crear dashboards similares al que se muestra a continuación, en este caso usando Spotfire como la herramienta de Dashboard:

Monitoreo de Prometheus en TIBCO Cloud Integration

Pero también puedes integrar esas métricas con Grafana o cualquier otra herramienta que pueda leer datos de la base de datos de series temporales de Prometheus.

Monitoreo de Prometheus en TIBCO Cloud Integration

Descubrimiento de servicios de Kubernetes para Prometheus

Descubrimiento de servicios de Kubernetes para Prometheus
En publicaciones anteriores, describimos cómo configurar Prometheus para trabajar con tus aplicaciones de TIBCO BusinessWorks Container Edition, y puedes leer más al respecto aquí. En esa publicación, describimos que había varias formas de actualizar a Prometheus sobre los servicios que están listos para monitorear. Y elegimos la más simple en ese momento que era la configuración de static_config, lo que significa:
No te preocupes Prometheus, te haré saber la IP que necesitas monitorear y no necesitas preocuparte por nada más.
Y esto es útil para una prueba rápida en un entorno local cuando quieres probar rápidamente tu configuración de Prometheus o quieres trabajar en la parte de Grafana para diseñar el mejor tablero posible para manejar tus necesidades. Pero, esto no es muy útil para un entorno de producción real, aún más, cuando estamos hablando de un clúster de Kubernetes donde los servicios están subiendo y bajando continuamente con el tiempo. Entonces, para resolver esta situación, Prometheus nos permite definir diferentes tipos de formas para realizar este enfoque de «descubrimiento de servicios». En la documentación oficial de Prometheus, podemos leer mucho sobre las diferentes técnicas de descubrimiento de servicios, pero a un nivel alto, estas son las principales técnicas de descubrimiento de servicios disponibles:
  • azure_sd_configs: Descubrimiento de Servicios de Azure
  • consul_sd_configs: Descubrimiento de Servicios de Consul
  • dns_sd_configs: Descubrimiento de Servicios de DNS
  • ec2_sd_configs: Descubrimiento de Servicios de EC2
  • openstack_sd_configs: Descubrimiento de Servicios de OpenStack
  • file_sd_configs: Descubrimiento de Servicios de Archivo
  • gce_sd_configs: Descubrimiento de Servicios de GCE
  • kubernetes_sd_configs: Descubrimiento de Servicios de Kubernetes
  • marathon_sd_configs: Descubrimiento de Servicios de Marathon
  • nerve_sd_configs: Descubrimiento de Servicios de Nerve de AirBnB
  • serverset_sd_configs: Descubrimiento de Servicios de Serverset de Zookeeper
  • triton_sd_configs: Descubrimiento de Servicios de Triton
  • static_config: IP/DNS Estático para la configuración. Sin Descubrimiento de Servicios.
E incluso, si todas estas opciones no son suficientes para ti y necesitas algo más específico, tienes una API disponible para extender las capacidades de Prometheus y crear tu propia técnica de Descubrimiento de Servicios. Puedes encontrar más información al respecto aquí: Pero este no es nuestro caso, para nosotros, el Descubrimiento de Servicios de Kubernetes es la elección correcta para nuestro enfoque. Así que, vamos a cambiar la configuración estática que teníamos en la publicación anterior:
- job_name: 'bwdockermonitoring'
  honor_labels: true
  static_configs:
    - targets: ['phenix-test-project-svc.default.svc.cluster.local:9095']
      labels:
        group: 'prod'
Por esta configuración de Kubernetes
- job_name: 'bwce-metrics'
  scrape_interval: 5s
  metrics_path: /metrics/
  scheme: http
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - default
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_label_app]
    separator: ;
    regex: (.*)
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_endpoint_port_name]
    separator: ;
    regex: prom
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_namespace]
    separator: ;
    regex: (.*)
    target_label: namespace
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_pod_name]
    separator: ;
    regex: (.*)
    target_label: pod
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_service_name]
    separator: ;
    regex: (.*)
    target_label: service
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_service_name]
    separator: ;
    regex: (.*)
    target_label: job
    replacement: 1
    action: replace
  - separator: ;
    regex: (.*)
    target_label: endpoint
    replacement: $1
    action: replace
Como puedes ver, esto es bastante más complejo que la configuración anterior, pero no es tan complejo como podrías pensar a primera vista, revisémoslo por diferentes partes.
- role: endpoints
    namespaces:
      names:
      - default
Dice que vamos a usar el rol para los endpoints que se crean bajo el namespace por defecto y vamos a especificar los cambios que necesitamos hacer para encontrar los endpoints de métricas para Prometheus.
scrape_interval: 5s
 metrics_path: /metrics/
 scheme: http
Esto dice que vamos a ejecutar el proceso de scrape en un intervalo de 5 segundos, usando http en la ruta /metrics/ Y luego, tenemos una sección de relabel_config:
- source_labels: [__meta_kubernetes_service_label_app]
    separator: ;
    regex: (.*)
    replacement: $1
    action: keep
  - source_labels: [__meta_kubernetes_endpoint_port_name]
    separator: ;
    regex: prom
    replacement: $1
    action: keep
Eso significa que nos gustaría mantener esa etiqueta para prometheus:
- source_labels: [__meta_kubernetes_namespace]
    separator: ;
    regex: (.*)
    target_label: namespace
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_pod_name]
    separator: ;
    regex: (.*)
    target_label: pod
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_service_name]
    separator: ;
    regex: (.*)
    target_label: service
    replacement: $1
    action: replace
  - source_labels: [__meta_kubernetes_service_name]
    separator: ;
    regex: (.*)
    target_label: job
    replacement: 1
    action: replace
  - separator: ;
    regex: (.*)
    target_label: endpoint
    replacement: $1
    action: replace
Eso significa que queremos hacer un reemplazo del valor de la etiqueta y podemos hacer varias cosas:
  • Renombrar el nombre de la etiqueta usando el target_label para establecer el nombre de la etiqueta final que vamos a crear basado en las source_labels.
  • Reemplazar el valor usando el parámetro regex para definir la expresión regular para el valor original y el parámetro replacement que va a expresar los cambios que queremos hacer a este valor.
Así que, ahora después de aplicar esta configuración cuando despleguemos una nueva aplicación en nuestro clúster de Kubernetes, como el proyecto que podemos ver aquí: Automáticamente vamos a ver un objetivo adicional en nuestra configuración de job-name “bwce-metrics”

📚 Want to dive deeper into Kubernetes? This article is part of our comprehensive Kubernetes Architecture Patterns guide, where you’ll find all fundamental and advanced concepts explained step by step.

Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

Prometheus se está convirtiendo en el nuevo estándar para la monitorización de Kubernetes y hoy vamos a cubrir cómo podemos hacer la monitorización de Prometheus TIBCO en Kubernetes.

Estamos viviendo en un mundo con cambios constantes y esto es aún más cierto en el mundo de las Aplicaciones Empresariales. No pasaré mucho tiempo hablando de cosas que ya conoces, pero solo diré que el enfoque de arquitectura de microservicios y las soluciones PaaS han sido un cambio de juego para todas las tecnologías de integración empresarial.

Esta vez me gustaría hablar sobre la monitorización y las capacidades de integración que tenemos al usar Prometheus para monitorear nuestros microservicios desarrollados bajo la tecnología TIBCO. Tampoco me gusta pasar demasiado tiempo hablando sobre qué es Prometheus, ya que probablemente ya lo sepas, pero en resumen, esta es una plataforma de monitorización distribuida de código abierto que ha sido el segundo proyecto lanzado por la Cloud Native Computing Foundation (después de Kubernetes en sí) y que se ha establecido como un estándar de facto de la industria para la monitorización de clústeres K8S (junto con otras opciones en el mercado como InfluxDB, etc.).

Prometheus tiene muchas características excelentes, pero una de ellas es que tiene conectores para casi todo y eso es muy importante hoy en día porque es tan complicado/no deseado/inusual definir una plataforma con un solo producto para la capa PaaS. Así que hoy, quiero mostrarte cómo monitorear tus aplicaciones de TIBCO BusinessWorks Container Edition usando Prometheus.

La mayor parte de la información que voy a compartir está disponible en el repositorio de GitHub bw-tooling, por lo que puedes ir allí si necesitas validar alguna declaración específica.

¿Ok, estamos listos? ¡¡Empecemos!!

Voy a asumir que ya tenemos un clúster de Kubernetes en su lugar y Prometheus instalado también. Entonces, el primer paso es mejorar la imagen base de BusinessWorks Container Edition para incluir la integración de capacidades de Prometheus. Para hacer eso, necesitamos ir a la página del repositorio de GitHub y seguir estas instrucciones:

  • Descargar y descomprimir la carpeta prometheus-integration.zip.
  • Abrir TIBCO BusinessWorks Studio y apuntarlo a un nuevo espacio de trabajo.
  • Hacer clic derecho en Project Explorer → Importar… → seleccionar Plug-ins y Fragmentos → seleccionar el botón de radio Importar desde el directorio
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Navegar a la carpeta prometheus-integration (descomprimida en el paso 1)
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Ahora hacer clic en Siguiente → Seleccionar el plugin de Prometheus → hacer clic en el botón Agregar → hacer clic en Finalizar. Esto importará el plugin en el estudio.
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Ahora, para crear el JAR de este plugin, primero necesitamos asegurarnos de actualizar com.tibco.bw.prometheus.monitor con ‘.’ (punto) en el campo Bundle-Classpath como se indica a continuación en el archivo META-INF/MANIFEST.MF.
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Hacer clic derecho en Plugin → Exportar → Exportar…
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Seleccionar tipo como archivo JAR y hacer clic en Siguiente
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Ahora hacer clic en Siguiente → Siguiente → seleccionar el botón de radio para usar el archivo MANIFEST.MF existente y buscar el archivo manifest
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!
  • Hacer clic en Finalizar. Esto generará prometheus-integration.jar

Ahora, con el JAR ya creado, lo que necesitamos hacer es incluirlo en tu propia imagen base. Para hacer eso, colocamos el archivo JAR en <TIBCO_HOME>/bwce/2.4/docker/resources/addons/jar

Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

Y lanzamos el comando de construcción de imagen nuevamente desde la carpeta <TIBCO_HOME>/bwce/2.4/docker para actualizar la imagen usando el siguiente comando (usa la versión que estés usando en el momento)

docker build -t bwce_base:2.4.4 .

Entonces, ahora tenemos una imagen con soporte para Prometheus! ¡Genial! Estamos cerca del final, solo creamos una imagen para nuestra Aplicación de Contenedor, en mi caso, esto va a ser un servicio de eco muy simple que puedes ver aquí.

Y solo necesitamos mantener estas cosas en particular cuando desplegamos en nuestro clúster de Kubernetes:

  • Debemos establecer una variable de entorno con BW_PROMETHEUS_ENABLE en “TRUE”
  • Debemos exponer el puerto 9095 desde el contenedor para ser usado por Prometheus para integrar.
Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

Ahora, solo necesitamos proporcionar este endpoint al sistema de scrapper de Prometheus. Hay varias maneras de hacer eso, pero nos vamos a centrar en la más simple.

Necesitamos cambiar el prometheus.yml para agregar los siguientes datos del trabajo:

- job_name: 'bwdockermonitoring'
  honor_labels: true
  static_configs:
    - targets: ['phenix-test-project-svc.default.svc.cluster.local:9095']
      labels:
        group: 'prod'

Y después de reiniciar Prometheus, tenemos todos los datos indexados en la base de datos de Prometheus para ser usados en cualquier sistema de panel de control.

Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

En este caso, voy a usar Grafana para hacer un panel de control rápido.

Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

Cada uno de estos componentes de gráfico está configurado en base a las métricas que están siendo extraídas por el exportador de Prometheus TIBCO.

Prometheus TIBCO Monitoring para Contenedores: ¡Rápido y Sencillo en 5 Minutos!

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

El mes pasado, durante el KubeCon 2019 Europa en Barcelona, OpenTracing anunció su fusión con el proyecto OpenCensus para crear un nuevo estándar llamado OpenTelemetry que estará disponible en septiembre de 2019.

Entonces, creo que sería increíble echar un vistazo a las capacidades relacionadas con OpenTracing que tenemos disponibles en TIBCO BusinessWorks Container Edition.

El mundo de hoy es demasiado complejo en términos de cómo se definen y gestionan nuestras arquitecturas. Nuevos conceptos en los últimos años como contenedores, microservicios, malla de servicios, nos dan la opción de alcanzar un nuevo nivel de flexibilidad, rendimiento y productividad, pero también viene con un costo de gestión con el que necesitamos lidiar.

Hace años, las arquitecturas eran más simples, el servicio era un concepto que estaba comenzando, pero incluso entonces comenzaron a surgir algunos problemas relacionados con el monitoreo, rastreo, registro, etc. Entonces, en esos días todo se resolvía con un Marco de Desarrollo que todos nuestros servicios iban a incluir porque todos nuestros servicios eran desarrollados por el mismo equipo, la misma tecnología, y en ese marco, podíamos asegurarnos de que las cosas se manejaban correctamente.

Ahora, confiamos en estándares para hacer este tipo de cosas, y por ejemplo, para el rastreo, confiamos en OpenTracing. No quiero pasar tiempo hablando sobre qué es OpenTracing, donde tienen una cuenta completa en Medium hablando ellos mismos mucho mejor de lo que yo podría hacerlo, así que por favor tómate unos minutos para leer sobre ello.

La única declaración que quiero hacer aquí es la siguiente:

El rastreo no es registro, y por favor asegúrate de entender eso.

El rastreo se trata de muestreo, es como cómo se están desempeñando los flujos y si todo está funcionando, pero no se trata de si una solicitud específica se ha realizado bien para el ID de cliente que sea… eso es registro, no rastreo.

Así que OpenTracing y sus diferentes implementaciones como Jaeger o Zipkin son la forma en que podemos implementar el rastreo hoy de una manera realmente fácil, y esto no es algo que solo podrías hacer en tu lenguaje de desarrollo basado en código, puedes hacerlo con nuestras herramientas sin código para desarrollar aplicaciones nativas de la nube como TIBCO BusinessWorks Container Edition y eso es lo que me gustaría mostrarte hoy. Así que, que comience el partido…

Lo primero que me gustaría hacer es mostrarte el escenario que vamos a implementar, y este va a ser el que se muestra en la imagen a continuación:

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Vas a tener dos servicios REST que se van a llamar entre sí, y vamos a exportar todos los rastros al componente externo Jaeger y luego podemos usar su interfaz para analizar el flujo de una manera gráfica y fácil.

Entonces, lo primero que necesitamos hacer es desarrollar los servicios que, como puedes ver en las imágenes a continuación, van a ser bastante fáciles porque este no es el propósito principal de nuestro escenario.

Una vez que tengamos nuestras imágenes de Docker basadas en esas aplicaciones, podemos comenzar, pero antes de lanzar nuestras aplicaciones, necesitamos lanzar nuestro sistema Jaeger, puedes leer toda la información sobre cómo hacerlo en el enlace a continuación:

Pero al final solo necesitamos ejecutar el siguiente comando:

docker run -d --name jaeger -e COLLECTOR_ZIPKIN_HTTP_PORT=9411  -p 5775:5775/udp  -p 6831:6831/udp  -p 6832:6832/udp  -p 5778:5778  -p 16686:16686  -p 14268:14268  -p 9411:9411  jaegertracing/all-in-one:1.8

Y ahora, estamos listos para lanzar nuestras aplicaciones y lo único que necesitamos hacer en nuestros desarrollos, porque como pudiste ver no hicimos nada extraño en nuestro desarrollo y fue bastante sencillo, es agregar las siguientes variables de entorno cuando lancemos nuestro contenedor

BW_JAVA_OPTS=”-Dbw.engine.opentracing.enable=true” -e JAEGER_AGENT_HOST=jaeger -e JAEGER_AGENT_PORT=6831 -e JAEGER_SAMPLER_MANAGER_HOST_PORT=jaeger:5778

Y… eso es todo, lanzamos nuestros contenedores con los siguientes comandos y esperamos hasta que las aplicaciones estén en funcionamiento

docker run -ti -p 5000:5000 — name provider -e BW_PROFILE=Docker -e PROVIDER_PORT=5000 -e BW_LOGLEVEL=ERROR — link jaeger -e BW_JAVA_OPTS=”-Dbw.engine.opentracing.enable=true” -e JAEGER_AGENT_HOST=jaeger -e JAEGER_AGENT_PORT=6831 -e JAEGER_SAMPLER_MANAGER_HOST_PORT=jaeger:5778 provider:1.0
Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition
docker run — name consumer -ti -p 6000:6000 -e BW_PROFILE=Docker — link jaeger — link provider -e BW_JAVA_OPTS=”-Dbw.engine.opentracing.enable=true” -e JAEGER_AGENT_HOST=jaeger -e JAEGER_AGENT_PORT=6831 -e JAEGER_SAMPLER_MANAGER_HOST_PORT=jaeger:5778 -e CONSUMER_PORT=6000 -e PROVIDER_HOST=provider consumer:1.0
Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Una vez que estén en funcionamiento, ¡generemos algunas solicitudes! Para hacer eso, voy a usar un proyecto SOAPUI para generar una carga estable durante 60 segundos, como puedes ver en la imagen a continuación:

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Y ahora vamos a ir a la siguiente URL para ver la interfaz de Jaeger y podemos ver lo siguiente tan pronto como hagas clic en el botón de búsqueda

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Y luego, si hacemos zoom en algún rastro específico:

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Eso es bastante asombroso, pero eso no es todo, porque puedes ver si buscas en la interfaz sobre los datos de estos rastros, puedes ver datos técnicos de tus flujos de BusinessWorks Container Edition, como puedes ver en la imagen a continuación:

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Pero… ¿qué pasa si quieres agregar tus etiquetas personalizadas a esos rastros? ¡También puedes hacerlo! Déjame explicarte cómo.

Desde BusinessWorks Container Edition 2.4.4 vas a encontrar una nueva pestaña en todas tus actividades llamada «Etiquetas» donde puedes agregar las etiquetas personalizadas que deseas que esta actividad incluya, por ejemplo, un id personalizado que se va a propagar a través de todo el proceso, podemos definirlo como puedes ver aquí.

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Y si echas un vistazo a los datos que tenemos en el sistema, puedes ver que todos estos rastros tienen estos datos:

Compatibilidad con OpenTracing en TIBCO BusinessWorks Container Edition

Puedes echar un vistazo al código en el siguiente repositorio de GitHub: