Compartir a través de


Recomendaciones para instrumentar una aplicación

Se aplica a esta recomendación de lista de comprobación de excelencia operativa del marco de trabajo bien diseñado de Azure:

OE:07 Diseñe e implemente un sistema de supervisión para validar las opciones de diseño y basar las futuras decisiones empresariales y de diseño. Este sistema captura y expone datos de telemetría, métricas y registros operativos que emiten a partir de la infraestructura y el código de la carga de trabajo.

Guía relacionada: Recomendaciones para diseñar y crear un sistema de supervisión

En esta guía se describen las recomendaciones para habilitar la observabilidad de la aplicación mediante la instrumentación. Genere telemetría significativa que se pueda ingerir e integrar en el sistema de supervisión. Mediante el uso de la instrumentación, puede recopilar información sin iniciar sesión en un servidor de producción remoto para realizar manualmente el seguimiento o la depuración. Los datos de instrumentación incluyen métricas y registros que puede usar para evaluar el rendimiento, diagnosticar problemas y tomar decisiones de carga de trabajo.

Estrategias de diseño principales

Para optimizar la telemetría de la carga de trabajo, instrumente la aplicación para generar los datos siguientes:

  • Los registros son registros con marcas de tiempo de eventos discretos. Hay tres formas de registros: texto sin formato, estructurado y binario.

  • Los registros de seguimiento distribuido le permiten ver la ruta de acceso de una solicitud a medida que viaja a través de diferentes servicios y componentes.

  • Las métricas son valores numéricos que describen un aspecto de un sistema en un momento dado.

Nota:

Puede usar herramientas como Application Insights, Dynatrace y Elastic Application Monitor de rendimiento ing para instrumentar automáticamente la aplicación. Estas herramientas facilitan la instrumentación, pero también pueden limitarse. Si usa una herramienta de instrumentación automática, puede agregar más funcionalidades a través de la instrumentación manual según sea necesario.

Uso de registros estructurados y seguimiento

Use el registro estructurado para integrar fácilmente los registros en plataformas de supervisión y análisis. Instrumente la aplicación para que se puedan cambiar los niveles de detalle. El registro detallado constante puede desperdiciar recursos de almacenamiento, por lo que debe activarse y desactivarse según sea necesario para solucionar problemas.

Los registros de seguimiento contienen datos textuales o datos binarios creados a partir de un evento de seguimiento, si la aplicación usa seguimiento de eventos para Windows (ETW). Los registros del sistema generan contenido de registro de seguimiento a partir de eventos de la infraestructura, como el servidor web. El contenido del registro de texto está diseñado para ser legible por los seres humanos, pero debe asegurarse de que está escrito en un formato que un sistema automatizado también pueda analizar.

Clasifique los registros y use registros independientes para registrar la salida de seguimiento de cada aspecto operativo del sistema. Si clasifica los registros, puede filtrar rápidamente los mensajes de registro en lugar de procesar un único archivo largo. Nunca escriba información que tenga requisitos de seguridad diferentes, como la información de auditoría y los datos de depuración, en el mismo registro.

Nota:

Es posible que un registro se implemente como un archivo en el sistema de archivos o que se mantenga en algún otro formato, como un blob en Blob Storage. La información de registro también se puede mantener en el almacenamiento estructurado, como las filas de una tabla.

Captura de métricas de aplicación

Las métricas o ejemplos son un recuento de algún aspecto o recurso del sistema en un momento específico, con una o varias etiquetas o dimensiones asociadas. Una sola instancia de una métrica no es útil de forma aislada, las métricas se deben capturar a lo largo del tiempo. Tenga en cuenta qué métricas debe registrar y con qué frecuencia. Los datos que se generan con demasiada frecuencia pueden imponer una carga pesada en el sistema, pero la captura de datos poco frecuente puede hacer que se pierdan las circunstancias que conducen a un evento significativo. La frecuencia adecuada para capturar datos puede variar de métrica a métrica. Por ejemplo, el uso de CPU en un servidor puede variar significativamente de segundo a segundo, pero el uso elevado solo se convierte en un problema si es coherente durante muchos minutos.

Facilitar la correlación entre componentes

Puede supervisar fácilmente contadores de rendimiento individuales y de nivel de sistema, capturar métricas para recursos y obtener información de seguimiento de aplicaciones de varios archivos de registro. Algunas supervisión requieren correlación de datos durante la fase de análisis y diagnóstico de la canalización de supervisión. Estos datos pueden adoptar varias formas y el proceso de análisis debe proporcionarse con suficientes datos de instrumentación para asignar estos diferentes formularios. Por ejemplo, en el nivel del marco de trabajo de la aplicación, un identificador de subproceso podría identificar una tarea. Dentro de una aplicación, el mismo trabajo podría estar asociado al identificador de usuario para el usuario que completa esa tarea.

Es poco probable que sea un mapa 1:1 entre subprocesos y solicitudes de usuario, ya que las operaciones asincrónicas pueden reutilizar los mismos subprocesos para más de un usuario. Para complicar aún más las cuestiones, una única solicitud puede correlacionarse con más de un subproceso a medida que fluye a través del sistema. Si es posible, asocie cada solicitud a un id. de actividad único que se propague a través del sistema como parte del contexto de la solicitud. La técnica para generar e incluir identificadores de actividad en la información de seguimiento depende de la tecnología que se utiliza para capturar los datos de seguimiento.

Todos los datos de supervisión deben tener una marca de tiempo del mismo tipo. Para mantener la coherencia, registre todas las fechas y horas según la hora universal coordinada.

Nota:

Es posible que los equipos que operan en diferentes zonas horarias y redes no se sincronicen. No dependa solo de marcas de tiempo para correlacionar datos de instrumentación que abarcan varias máquinas.

Captura de datos relevantes

Tenga en cuenta los siguientes puntos cuando decida qué datos de instrumentación necesita recopilar.

Datos legibles para humanos

Asegúrese de que la información capturada por eventos de seguimiento sea legible tanto por máquina como por persona. Adopte esquemas bien definidos para esta información para ayudar a implementar el procesamiento automatizado de datos de registro entre sistemas y proporcionar coherencia para que el personal de operaciones e ingeniería lea los registros.

Incluya la siguiente información ambiental en los datos:

  • Entorno de implementación
  • Máquina de procesamiento
  • Detalles del proceso
  • Pila de llamadas

Invertir en rastreabilidad y correlación

Proporcione un contexto suficiente, como un identificador de actividad asociado a una instancia específica de una solicitud, para que el desarrollador o el administrador puedan determinar el origen de cada solicitud.

El contexto de datos también puede incluir información que se usa para correlacionar una actividad con el trabajo computacional realizado y los recursos usados. Este trabajo puede cruzar los límites del proceso y de la máquina.

Para la medición, el contexto debe incluir directa o indirectamente una referencia al cliente que provocó la solicitud. Este contexto ofrece valiosa información sobre el estado de la aplicación en el momento en que se capturaron los datos de supervisión.

Captura de todos los datos pertinentes

Registre todas las solicitudes y las ubicaciones o regiones donde se realizan. Puede usar esta información para ayudar a identificar zonas activas específicas de la ubicación. También puede ser útil para determinar si se van a volver a crear particiones de una aplicación o de los datos que utiliza.

Registre y capture los detalles de las excepciones con cuidado. La información de depuración crítica se pierde a menudo debido a un control deficiente de excepciones. Capture todos los detalles de excepción que produce la aplicación, incluidas las excepciones internas u otra información contextual, como la pila de llamadas, si es posible.

Búsqueda de coherencia de datos

Los datos coherentes pueden ayudarle a analizar eventos y correlacionarlos con las solicitudes de usuario. Considere la posibilidad de usar un paquete de registro completo y configurable para recopilar información. Los paquetes de registro pueden ayudarle a evitar la dependencia de los desarrolladores para adoptar su enfoque a medida que implementan diferentes partes del sistema.

Recopile datos, como el volumen de entrada y salida, el número de solicitudes y el uso de la memoria, la red y la CPU, a partir de contadores de rendimiento clave. Algunos servicios de infraestructura proporcionan sus propios contadores de rendimiento, como:

  • Número de conexiones a una base de datos.
  • Tasa de transacciones.
  • Número de transacciones que se realizaron correctamente o con errores.

Las aplicaciones también pueden definir sus propios contadores de rendimiento.

Considerar las dependencias externas

Registre todas las llamadas de servicio externas. Es posible que se realicen llamadas externas a:

  • Sistemas de base de datos.
  • Servicios web.
  • Otros servicios de nivel de sistema que forman parte de la infraestructura.

Registre información sobre la duración de cada llamada y el éxito o error de la llamada. Si es posible, capture información sobre todos los reintentos y errores de los errores transitorios que se produzcan.

Garantizar la compatibilidad del sistema de telemetría

En muchos casos, la información de instrumentación se genera como una serie de eventos y se pasa a un sistema de telemetría independiente para su procesamiento y análisis. Un sistema de telemetría suele ser independiente de cualquier aplicación o tecnología específica.

Los sistemas de telemetría usan esquemas definidos para analizar la información. El esquema especifica un contrato que define los campos de datos y los tipos que el sistema de telemetría puede ingerir. Generalice el esquema para permitir que los datos lleguen desde varias plataformas y dispositivos. Un esquema común debe incluir campos relevantes para todos los eventos de instrumentación, como:

  • Nombre del evento.
  • Hora del evento.
  • Dirección IP del remitente.
  • Detalles necesarios para la correlación de eventos, entre los que se incluyen:
    • Id. de usuario
    • Id. de dispositivo
    • Identificador de la aplicación

Recuerde que muchos dispositivos pueden generar eventos para la misma aplicación, por lo que el esquema no debe depender del tipo de dispositivo. La aplicación debe admitir la distribución móvil o entre dispositivos. El esquema también puede incluir campos de dominio relevantes para un escenario determinado común entre aplicaciones, como:

  • Información sobre las excepciones.
  • Eventos de inicio y finalización de la aplicación.
  • Correcto o error de llamadas API de servicio web.

Establezca campos de dominio que produzcan el mismo conjunto de eventos para crear un conjunto de informes y análisis comunes entre aplicaciones. Es posible que tenga que configurar un esquema para contener campos personalizados para capturar los detalles de eventos específicos de la aplicación.

OpenTelemetry es una colección neutral del proveedor de API, SDK y otras herramientas. Puede usar OpenTelemetry para instrumentar aplicaciones y generar telemetría significativa de forma coherente en todos los lenguajes. OpenTelemetry es independiente de la herramienta, por lo que es compatible con muchas plataformas de observabilidad, incluidas las ofertas de código abierto y comercial. Microsoft está adoptando OpenTelemetry como herramienta estándar para la instrumentación.

Optimización del código de instrumentación

En la lista siguiente se resumen las prácticas recomendadas para instrumentar una aplicación distribuida que se ejecuta en la nube.

  • Haga que los registros sean fáciles de leer y de analizar. Use registros estructurados siempre que sea posible.

  • Sea conciso y descriptivo en los mensajes de registro.

  • Identifique el origen del registro.

  • Agregue información de marca de tiempo a medida que se escriba cada registro de registro.

  • Use el mismo formato y la misma zona horaria para todas las marcas de tiempo.

  • Clasifique los registros y escriba mensajes en el lugar adecuado.

  • No revelar información confidencial sobre el sistema o la información personal sobre los usuarios. Limgue esta información antes de que se registre, pero mantenga los detalles pertinentes.

  • Registre todas las excepciones críticas, pero habilite al administrador para activar y desactivar el registro según sea necesario para menos excepciones y advertencias.

  • Capture y registre toda la información lógica de reintentos. Estos datos son útiles para supervisar el estado transitorio del sistema.

  • Realice un seguimiento de las llamadas de proceso, como las solicitudes a bases de datos o servicios web externos.

  • No mezcle mensajes de registro con distintos requisitos de seguridad en el mismo archivo de registro.

  • Asegúrese de que todas las llamadas de registro sean operaciones desencadenadas y olvidadas que no bloqueen el progreso de las operaciones empresariales. Excluya los eventos de auditoría de esta regla porque son críticos para la empresa.

  • Asegúrese de que el registro es extensible y no tiene dependencias directas en un destino concreto.

  • Asegúrese de que todo el registro es seguro para errores y no desencadena errores en cascada.

  • Trate la instrumentación como un proceso iterativo en curso y revise los registros con regularidad.

Uso de la generación de perfiles de aplicaciones

  • Implemente la generación de perfiles solo cuando sea necesario porque puede imponer una sobrecarga significativa en el sistema. Mediante la instrumentación, la generación de perfiles registra un evento, como una llamada al método, cada vez que se produce. Sin embargo, el muestreo registra solo los eventos seleccionados.

  • Las selecciones de generación de perfiles pueden basarse en el tiempo, como una vez cada n segundos o en función de la frecuencia, como una vez cada n solicitudes. Si los eventos se producen con frecuencia, la generación de perfiles podría provocar demasiada carga en el sistema y afectar al rendimiento general. En este caso, es preferible el enfoque de muestreo. Sin embargo, si la frecuencia de eventos es baja, el muestreo podría perderlos. En este caso, la generación de perfiles podría ser el mejor enfoque.

Facilitación de Azure

La implementación automática está disponible para muchos tipos de aplicaciones locales y de Azure supervisadas con Application Insights. La función autoinstrumentation configura automáticamente la aplicación para proporcionar telemetría enriquecida a Application Insights y proporciona un acceso sencillo a experiencias como el panel de la aplicación y el mapa de aplicaciones. Para conocer las plataformas de hospedaje y los lenguajes de desarrollo admitidos, consulte Entornos, lenguajes y proveedores de recursos admitidos.

Lista de comprobación de excelencia operativa

Consulte el conjunto completo de recomendaciones.