Estado | ✔ VIGENTE | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TAGS | ||||||||||||||||||
Tomada el |
| |||||||||||||||||
Responsable | ||||||||||||||||||
Documentación Asociada | ||||||||||||||||||
Solución Afectada | Todas las nuevas soluciones software a partir de la fecha de decisión. | |||||||||||||||||
Responsable | Aprobado por | Consultados | Informados | |||||||||||||||
Se Requiere una decisión respecto a la estrategia a seguir con respecto a la gestión de logs, en primera instancia, y a toda observabilidad en el escenario objetivo.
Hay que tener en cuenta algunos elementos de alto impacto en la solución que se plantee:
Ahora vamos a aquellas cosas que NO podemos hacer por poner en riesgo la estabilidad del sistema:
Estos puntos descartan el uso de los recursos de la solución entregada para la tarea de gestión de logs. Dicho de otra forma, tenemos entonces estas restricciones:
Teniendo claro que debemos sacar la información de la solución entregada mediante otro aplicativo tenemos las siguientes cuestiones:
Para el punto 1 tenemos las siguientes opciones como alternativas viables:
Estas dos alternativas envían la información a un elemento de infraestructura mediante un protocolo optimizado (habitualmente grpc) lo que nos daría el rendimiento que buscamos
Evaluemos ahora qué hacer con la información registrada:
Antes de entrar en detalle hay que contar con que la observabilidad en el escenario objetivo se plantea basada en el estándar Opentelemetry.
OpenTelemetry
OpenTelemetry es una colección de herramientas, API y SDK que ayudan a desarrollar y exportar datos de observabilidad, como trazas, métricas y registros, de manera estandarizada y compatible con múltiples sistemas de monitoreo y análisis. Diseñado para ser un estándar abierto
Se proponen (2) opciones para no saturar el sistema de gestión de la solución entregada:
Las alternativas se consideran en tres aspectos principales además de los aspectos secundarios que se consideren oportunos:
Kafka es un sistema distribuido altamente resiliente que permite tanto el registro de información siguiendo un patrón CQRS como una comunicación asíncrona mediante PUB/SUB.
En este caso de uso se debe disponer de un productor que permite la ingesta de los logs generados por la aplicación sobre la que se aplica la observación, publicando los registros en un topic de kafka para que sean consumidos en el sistema que deseemos utilizar para almacenar, indexar y/o consultar la información. Esto implica un productor que debe desplegarse en el Pod junto a la aplicación que se está monitorizando o que tenga acceso a los logs de dicha aplicación
Opentelemetry dispone de integración con distintos lenguajes mediante agentes. También está disponible la integración de Opentelemetry con Quarkus, en este caso sólo dispone de soporte a traza por lo que no cubre ni el MVP ni la plataforma objetivo.
Opentelemetry contempla dos opciones para la instrumentalización: Code-Based, aplicable a desarrollos donde se tiene el control total sobre el código, y Zero-Coded donde las funcionalidades desarrolladas para opentelemetry extraen la información de librerías y entornos de ejecución. Actualmente la opción Zero-coded está disponible para las tecnologías basadas en los siguientes lenguajes de programación:
Para establecer la observabilidad de herramientas desarrolladas en alguna de estas tecnologías sin impactar su implementación es necesario ir a la solución Zero-Coded.
Opentelemetry Zero-coded
En base al análisis de las opciones planteada se concluye que la mejor alternativa es el uso de OpenTelemetry mediante la instrumentación con opentelemetry-javaagent
Todas las opciones analizadas diferentes de Opentelémetry o bien amenazan la estabilidad del sistema o bien implican sobrecostes y desarrollos no reutilizables, por lo que los sobrecostes no se recuperarán.
Tabla de opciones/riesgos
Alternativas | Riesgos | N. riesgo | Observaciones | Agravantes/dependencias | Mitigaciones | Comentarios | |
A | Registro en kafka |
| Medio/Bajo | Existe un kafka en la organización. Es necesario abordar los desarrollos necesarios e integrarlo en keycloak |
| Requiere de desarrollos no reutilizables | |
B | Opentelemetry | Requiere de Infraestructura | Bajo | Es necesario incorporar la opción que aplique Zero-coded a la solución entregada y exportar a un colector de opentelemetry |
|
| Es necesario plantearse qué hacer con la salida. existen exportadores |
Riesgo | Tipo Riesgo Técnico | Riesgo Operativo | Riesgo Financiero | Riesgo de seguridad | Probabilidad baja | media |alta | Impacto baja | media |alta | Plan de Acción Aceptar | Mitigar | Propuestas Disparadoras | Propuestas Mitigadoras | ||||||
Riesgo por dependencia de infraestructura de la que no se dispone | Riesgo Técnico | alta | alto | Mitigar | E | E* | ||||||
Riesgo por trabajos no aprovechables | Riesgo Financiero | alta | medio | Aceptar | D | |||||||
Riesgo por retrabajos | Riesgo Financiero | alta | medio | Aceptar | D |
E*: Despliegue temporal de un collector de Opentelemetry propio y exporta la salida a un sistema por definir (file, ELK, EFK, Kafka...) puede ser necesario algún desarrollo si el sistema de explotación no dispone de exportador nativo. (los exportadores existentes están en la url https://github.com/open-telemetry/opentelemetry-collector-contrib/exporter). La complejidad de despliegue y configuración de un collector es baja
Con Kafka
Con OpenTelemetry:
La instrumentación mediante OpenTelemery se basa en tres partes bien diferenciadas:
instrumentation
: Code-based o Zero-Code . Esta pieza se ocupa de recopilar logs, trazas y métricas y exportarlas a un collectorTeniendo estos tres bloques claros Debemos tener claro que el primer bloque aplica a la solución entregada y los puntos 2 y 3 pertenecen CTI.
Todo lo indicado hasta ahora en este apartado implica que para desplegar la solución entregada:
Dependencias externas
La puesta en operación de la solución requiere de una provisión por parte de sistemas de mecanismos adecuados en el escenario ideal, si dicha provisión no es posible, este ADR podrá verse afectado por cambios.
El diseño final podría considerarse de la siguiente forma, donde la salida de los colectores es la que se decida aplicar ya que en este punto no está amenazada la estabilidad del sistema y es posible escalar para asumir el rendimiento necesario. Importante, en el punto anterior se indica el ámbito de responsabilidad de cada actor, esta imagen permite tener una perspectiva del objetivo: