Observabilidad No Intrusiva en Aplicaciones Go con Docker

Observabilidad No Intrusiva en Aplicaciones Go con Docker - Marketplace Insights - Imagen generada por IA

Observabilidad de Aplicaciones Go No Intrusiva Basada en Construcciones Multietapa de Docker

En el contexto actual de la adopción masiva de tecnologías nativas de la nube, el lenguaje de programación Golang ha ido ganando popularidad. Esto se debe a su naturaleza ligera y a la facilidad de aprendizaje que ofrece. A diferencia de Java, donde las aplicaciones suelen aprovechar la capacidad del JVM para recolectar datos de observabilidad mediante el mecanismo de mejora de bytecode, las aplicaciones Golang requieren una recompilación del código fuente para integrar capacidades de observación. Este artículo presenta un método de observabilidad de aplicaciones Go no intrusivo basado en construcciones multietapa de Docker, permitiendo a los usuarios inyectar capacidades de observabilidad sin modificar el código fuente ni las instrucciones de compilación.

Construcciones Multietapa de Docker

Docker permite dividir la creación de imágenes en múltiples etapas, donde las etapas posteriores pueden acceder a las salidas de las anteriores. Un Dockerfile típico para aplicaciones Golang podría verse así:

# etapa 1
FROM golang:1.22-alpine3.19 as builder

RUN go version
RUN go build -v -o /workspace/demo

# etapa 2
FROM alpine

COPY --from=builder /workspace/demo /demo
ENV ENV1=e1

# Especificar el comando de inicio por defecto.
CMD ["/demo"]

En este ejemplo, la primera fase se encarga de compilar el archivo binario, que se transfiere a la segunda fase para ser ejecutado. Para habilitar la observabilidad en esta imagen, es necesario realizar ciertas modificaciones.

Paso 1: Reemplazar la Imagen Base en la Etapa de Compilación

El primer paso para habilitar la observabilidad es reemplazar la imagen base en la etapa de compilación. Esto se puede lograr de la siguiente manera:

# etapa 1
FROM registry-cn-hangzhou.ack.aliyuncs.com/acs/golangbuilder-alpine-linux-amd64:0.0.1 as builder
RUN go version
RUN go build -v -o /workspace/demo

# etapa 2
FROM alpine

COPY --from=builder /workspace/demo /demo
ENV ENV1=e1

# Especificar el comando de inicio por defecto.
CMD ["/demo"]

Al realizar este cambio, se utilizará automáticamente la herramienta de compilación instgo de ARMS, que permite la compilación híbrida. Esto permite construir una imagen de aplicación Golang con capacidades de observabilidad.

Paso 2: Añadir Variables de Entorno para Imágenes de Ejecución

Una vez que la imagen de la aplicación ha sido construida, el siguiente paso es ejecutarla, por ejemplo, en el servicio de contenedores de Alibaba Cloud para Kubernetes (ACK). Antes de ejecutar la aplicación, es esencial especificar algunas configuraciones, como la región donde se reportarán los datos de observabilidad. Esto se puede realizar añadiendo variables de entorno al Dockerfile:

# etapa 1
FROM registry-cn-hangzhou.ack.aliyuncs.com/acs/golangbuilder-alpine-linux-amd64:0.0.1 as builder
RUN go version
RUN go build -v -o /workspace/demo

# etapa 2
FROM alpine

COPY --from=builder /workspace/demo /demo
ENV ENV1=e1

# Añadir manualmente variables de entorno de ejecución.
ENV ARMS_ENABLE=true
ENV ARMS_APP_NAME={AppName}
ENV ARMS_REGION_ID={regionId}
ENV ARMS_LICENSE_KEY={licenseKey}

# Especificar el comando de inicio por defecto.
CMD ["/demo"]

Sin embargo, este método puede resultar menos flexible si se necesitan realizar cambios en las variables de entorno. Para abordar esta limitación, se puede utilizar el componente ack-onepilot proporcionado por ARMS. Este componente se puede instalar desde la sección de gestión de componentes en la página de gestión de O&M de ACK.

Integración con ack-onepilot

Una vez instalado el componente ack-onepilot, se pueden añadir etiquetas al crear una carga de trabajo para integrar la aplicación Golang:

labels:
  aliyun.com/app-language: golang # Especificar una aplicación Go. 
  armsPilotAutoEnable: 'on'
  armsPilotCreateAppName: ""

Al añadir estas etiquetas, se puede visualizar la aplicación correspondiente en la consola de ARMS, facilitando la supervisión y el análisis de datos de observabilidad.

Perspectivas Futuras

La solución de observabilidad no intrusiva basada en construcciones multietapa de Docker no solo reduce el coste para los usuarios al integrar el agente de Golang, sino que también se ha lanzado comercialmente en Alibaba Cloud para ofrecer capacidades de monitorización robustas. Esta innovación se ha hecho de código abierto, promoviendo el intercambio técnico y la mejora continua en colaboración con la comunidad.

Para más información sobre esta solución, se puede visitar el siguiente enlace: OpenTelemetry.

Nota: Este contenido original ha sido modificado con IA y revisado por un especialista.

Deja una respuesta