cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 
cancel
944
Visitas
5
ÚTIL
2
Comentarios
Carlos Cardoza
Cisco Employee
Cisco Employee

Autor: @Leandro Ferreira 

Traducción del portugués: Carlos Cardoza 

OpenTelemetry, OTel para aquell@s más íntim@s, ha sido un tema creciente en varias industrias. Si aún no te has enterado, te recomiendo estos dos enlaces:

Documentación Oficial

¿Qué es OpenTelemetry?

CISCO ha estado invirtiendo mucho en el tema y ha hecho grandes contribuciones a la comunidad. Un buen ejemplo de esto es la instrumentación NGINX que utiliza OpenTelemetry. En esta publicación, mostraré cómo integramos AppDynamics en esta conversación.

AppDynamics, para quienes aún no han tenido el gusto de conocerla, es una excelente plataforma de observabilidad donde tenemos en un mismo contexto toda la información necesaria para entender cómo tu aplicación impacta directamente en tu negocio. Observabilidad “a la vena” usando Métricas, Eventos, Logs y Trazas (M.E.L.T). La recopilación de datos se realiza a través de agentes creados por el propio AppDynamics, pero, como una buena plataforma de observabilidad, también tenemos OTel como una de las formas de ingesta de datos.

Compartir conocimientos es una forma de aprender y por eso decidí escribir este tutorial combinando temas interesantes para mí NGINX + OTEL + AppDynamics. Espero que sea interesante para ti también. Sigue el hilo...

Para comenzar

Antes de empezar necesitarás:

  • git
  • docker
  • docker-compose
  • AppDynamics Controller SaaS
  • un editor de texto

¿Como funciona?

Antes de comenzar con las compilaciones, comprendamos cómo funciona todo esto.

CarlosCardoza_0-1669375976588.png

En NGINX tenemos un agente que recolectará información y la enviará a un recolector (OpenTelemetry Collector). Tanto el Agente como el Collector son desarrollados por la comunidad. Cuando el Collector recibe la información enviada por el Agente, realiza las transformaciones necesarias y la envía a AppDynamics.

Creando una imagen con NGINX e instalando el Agente

Comencemos construyendo una imagen con NGINX ya instrumentado. El primer paso es clonar el repositorio.

git clone https://github.com/lof000/appd-sample-apps-otel.git

Después de clonar el repositorio, todo lo que vamos a ejecutar lo encontraremos en la carpeta nginxotel. Primero, echemos un vistazo al archivo Docker solo para entender lo que estamos haciendo.

FROM nginx:1.18
RUN apt-get update ; apt-get install unzip

#DOWNLOAD OTEL NGINX AGENT
ADD https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/download/webserver%2Fv1.0.0/opentelemetry-webserver-sdk-x64-linux.tgz.zip /opt

#INSTALL OTEL AGENT
RUN cd /opt ; unzip opentelemetry-webserver-sdk-x64-linux.tgz.zip; tar xvfz opentelemetry-webserver-sdk-x64-linux.tgz
RUN cd /opt/opentelemetry-webserver-sdk; ./install.sh

#SET ENV VARIABLE FOR OTEL AGENT LIB
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/opt/opentelemetry-webserver-sdk/sdk_lib/lib

Ahora haremos el build

docker build -t nginx_otel

Configurando el Agente NGINX

Con la imagen lista, podemos configurar el funcionamiento del Agente editando el archivo opentelemetry_module.conf. En el ejemplo de git ya dejé todo listo, no es necesario editar nada. A continuación, se muestra un ejemplo para mejor comprensión.

NginxModuleEnabled ON;
NginxModuleOtelSpanExporter otlp;
NginxModuleOtelExporterEndpoint otel-collector:4317;
NginxModuleServiceName nginx_service;
NginxModuleServiceNamespace nginx_lab;
NginxModuleServiceInstanceId nginx_serviceID;
NginxModuleResolveBackends ON;
NginxModuleTraceAsError ON;

NginxModuleOtelSpanExporter: El agente NGINX envía los datos a un colector (OTEL COLLECTOR). Este campo indica qué protocolo de comunicación se está utilizando para “hablar” con el colector.

NginxModuleOtelExporterEndpoint: Aquí indicamos dónde está el colector (host y puerto). Al abrir el archivo docker-compose.yml, verá un servicio con este nombre

NginxModuleServiceNamespace: Aquí le damos el nombre del espacio de nombres

NginxModuleServiceName: Aquí le damos un nombre al servicio.

Podemos ver más detalles en la documentación.

Configurando la comunicación de OTel Collector con Appdynamics

Con NGINX instrumentado, configuraremos la comunicación entre OTel Collector y AppDynamics. No es nuestro enfoque profundizar en los detalles del colector en este momento.

Inicie sesión en el AppDynamics Controller y haga clic en la pestaña OTel

CarlosCardoza_1-1669376344178.png

Justo debajo, haga clic en mostrar para ver su token de acceso. Copie y guarde este token porque lo usaremos pronto.

CarlosCardoza_2-1669376409760.png

También necesitará su nombre de cuenta. Haga clic en la rueda dentada, luego en License y finalmente en la pestaña de la cuenta

CarlosCardoza_3-1669376409763.png

CarlosCardoza_4-1669376409766.png

Guarde este Account Name. Por último, obtengamos el OTel endpoint del AppDynamics Controller. Revisa la documentación y encuentra la URL según tu región:

OTel Endpoints por región

Por ejemplo, si su controlador está alojado en Virginia, la URL será:

https://pdx-sls-agent-api.saas.appdynamics.com

Ahora editemos el archivo otel-collector-config.yaml e ingresemos la información que acabamos de recopilar.

processors:
  resource:
    attributes:
      - key: appdynamics.controller.account
        action: upsert
        value: "<AccountName obtenido previamente>"
      - key: appdynamics.controller.host
        action: upsert
        value: "<hostname del AppD Controllr: micontroller.saas.appdynamics.com>"
      - key: appdynamics.controller.port
        action: upsert
        value: 443
.....
  otlphttp:
    endpoint: <OTEL ENDPOINT>
    headers: {"x-api-key": "<access key de la pestaña OTel>"}

 

Probando

Con todos los archivos configurados, subamos el servicio y veamos si todo salió bien.

docker-compose up -d

Comprobando si todo está bien

docker-compose ps
CarlosCardoza_5-1669376676978.png
docker logs nginx
CarlosCardoza_6-1669376707905.png
docker logs otel-collector

Finalmente, enviaremos solicitudes a NGINX.

./load.sh

Vuelva a verificar los registros del OTel Collector, debería ver mensajes como este que indican que está recibiendo la información del agente y enviando AppDynamics.

CarlosCardoza_7-1669376798987.png

 

Si deja que la carga se ejecute durante unos 5 minutos, verá la información en el AppDynamics Controller.

CarlosCardoza_8-1669376799009.png

 

¡Listo! Empezamos a ejercitar el uso de OTel junto con AppDynamics. En el próximo tutorial mostraré un ejemplo de monitoreo de NGINX y sus backends, estén atentos. 

Comentarios
Leandro Ferreira
Cisco Employee
Cisco Employee

@Carlos Cardoza  ¡Gracias por la traducción!

cviscont
Cisco Employee
Cisco Employee

excelente Carlos! Es muy importante que repliquemos este tipo de contenido en nuestros canales.

Vamos a comenzar

¡Conecte con otros expertos de Cisco y del mundo! Encuentre soluciones a sus problemas técnicos o comerciales, y aprenda compartiendo experiencias.

Queremos que su experiencia sea grata, le compartimos algunos links que le ayudarán a familiarizarse con la Comunidad de Cisco: