Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Hola a todos!

Nuestra empresa se dedica al desarrollo de software y posterior soporte técnico. El soporte técnico requiere no sólo corregir errores, sino también monitorear el rendimiento de nuestras aplicaciones.

Por ejemplo, si uno de los servicios falla, entonces debe registrar automáticamente este problema y comenzar a resolverlo, y no esperar a que los usuarios insatisfechos se comuniquen con el soporte técnico.

Tenemos una empresa pequeña, no tenemos los recursos para estudiar y mantener soluciones complejas para aplicaciones de monitoreo, necesitábamos encontrar una solución simple y efectiva.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Estrategia de seguimiento

Comprobar la funcionalidad de una aplicación no es fácil; esta tarea no es trivial, incluso se podría decir creativa. Es especialmente difícil verificar un sistema multienlace complejo.

¿Cómo puedes comer un elefante? ¡Solo en partes! Utilizamos este enfoque para monitorear aplicaciones.

La esencia de nuestra estrategia de seguimiento:

Divida su aplicación en componentes.
Crear controles de control para cada componente.

Un componente se considera operativo si todas sus comprobaciones de control se realizan sin errores. Una aplicación se considera saludable si todos sus componentes son funcionales.

Por tanto, cualquier sistema se puede representar como un árbol de componentes. Los componentes complejos se dividen en otros más simples. Los componentes simples tienen controles.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Los puntos de referencia no están destinados a realizar pruebas funcionales, no son pruebas unitarias. Las comprobaciones de control deben comprobar cómo se siente el componente en el momento actual, si existen todos los recursos necesarios para su funcionamiento y si hay algún problema.

No existen milagros; la mayoría de las comprobaciones deberán desarrollarse de forma independiente. Pero no se asuste, porque en la mayoría de los casos una verificación requiere de 5 a 10 líneas de código, pero puede implementar cualquier lógica y comprenderá claramente cómo funciona la verificación.

Sistema de monitoreo

Digamos que dividimos la aplicación en componentes, ideamos e implementamos comprobaciones para cada componente, pero ¿qué hacer con los resultados de estas comprobaciones? ¿Cómo sabemos si algún cheque falló?

Necesitaremos un sistema de seguimiento. Ella realizará las siguientes tareas:

  • Reciba resultados de pruebas y utilícelos para determinar el estado de los componentes.
    Visualmente, esto parece resaltar el árbol de componentes. Los componentes funcionales se vuelven verdes, los problemáticos, rojos.
  • Realice comprobaciones generales listas para usar.
    El sistema de seguimiento puede realizar algunas comprobaciones por sí mismo. Por qué reinventar la rueda, usémoslos. Por ejemplo, puede comprobar que se está abriendo una página de un sitio web o que el servidor está haciendo ping.
  • Enviar notificaciones de problemas a los interesados.
  • Visualización de datos de seguimiento, suministro de informes, gráficos y estadísticas.

Breve descripción del sistema OMAPE

Lo mejor es explicarlo con un ejemplo. Veamos cómo se organiza el seguimiento del desempeño del sistema OMAPE.

ASMO es un sistema automatizado de apoyo meteorológico. El sistema ayuda a los especialistas del servicio vial a comprender dónde y cuándo es necesario tratar la carretera con materiales descongelantes. El sistema recopila datos de los puntos de control de la carretera. Un punto de control viario es un lugar de la vía donde se instalan equipos: una estación meteorológica, una cámara de vídeo, etc. Para predecir situaciones peligrosas, el sistema recibe pronósticos meteorológicos de fuentes externas.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Entonces, la composición del sistema es bastante típica: sitio web, agente, equipo. Empecemos a monitorear.

Descomponer el sistema en componentes

En el sistema OMAPE se pueden distinguir los siguientes componentes:

1. Cuenta personal
Esta es una aplicación web. Como mínimo, debe comprobar que la aplicación esté disponible en Internet.

2. Base de datos
La base de datos almacena datos que son importantes para la generación de informes y debe asegurarse de que las copias de seguridad de la base de datos se creen correctamente.

3 Servidor
Por servidor nos referimos al hardware en el que se ejecutan las aplicaciones. Es necesario comprobar el estado del HDD, RAM, CPU.

4. Agente
Este es un servicio de Windows que realiza muchas tareas diferentes según una programación. Como mínimo, debe comprobar que el servicio se esté ejecutando.

5. Tarea del agente
No basta con saber que un agente está trabajando. Un agente puede trabajar, pero no realizar las tareas que le han sido asignadas. Dividamos el componente del agente en tareas y verifiquemos si cada tarea del agente funciona correctamente.

6. Puntos de control vial (contenedor de todos los MPC)
Hay muchos puntos de control en la carretera, así que combinemos todos los MPC en un solo componente. Esto hará que sea más conveniente leer los datos de monitoreo. Al ver el estado del componente del “sistema ASMO”, inmediatamente quedará claro dónde están los problemas: en las aplicaciones, el hardware o en el sistema de control máximo.

7. Punto de control vial (un límite máximo)
Consideraremos que este componente es reparable si todos los dispositivos en este MPC son reparables.

8. Dispositivo
Se trata de una cámara de vídeo o estación meteorológica que se instala en el límite máximo de concentración. Es necesario comprobar que el dispositivo funciona correctamente.

En el sistema de seguimiento, el árbol de componentes tendrá este aspecto:

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Monitoreo de aplicaciones web

Entonces, hemos dividido el sistema en componentes, ahora necesitamos realizar comprobaciones para cada componente.

Para monitorear una aplicación web utilizamos las siguientes comprobaciones:

1. Comprobando la apertura de la página principal.
Esta verificación la realiza el sistema de monitoreo. Para ejecutarlo indicamos la dirección de la página, el fragmento de respuesta esperado y el tiempo máximo de ejecución de la solicitud.

2. Consultar la fecha límite de pago del dominio
Un control muy importante. Cuando un dominio no se paga, los usuarios no pueden abrir el sitio. Resolver el problema puede tardar varios días, porque... Los cambios de DNS no se aplican inmediatamente.

3. Comprobación del certificado SSL
Hoy en día, casi todos los sitios web utilizan el protocolo https para acceder. Para que el protocolo funcione correctamente, necesita un certificado SSL válido.

A continuación se muestra el componente "Cuenta personal" en el sistema de seguimiento:

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Todas las comprobaciones anteriores funcionarán para la mayoría de las aplicaciones y no requieren codificación. Esto es genial porque puedes comenzar a monitorear cualquier aplicación web en 5 minutos. A continuación se detallan comprobaciones adicionales que se pueden realizar para una aplicación web, pero su implementación es más compleja y específica de la aplicación, por lo que no las cubriremos en este artículo.

¿Qué más puedes comprobar?

Para monitorear más completamente su aplicación web, puede realizar las siguientes comprobaciones:

  • Número de errores de JavaScript por período
  • Número de errores en el lado de la aplicación web (back-end) para el período
  • Número de respuestas fallidas de la aplicación web (código de respuesta 404, 500, etc.)
  • Tiempo promedio de ejecución de consultas

Monitoreo de un servicio de Windows (agente)

En el sistema ASMO, el agente desempeña el papel de programador de tareas, que ejecuta tareas programadas en segundo plano.

Si todas las tareas del agente se completan correctamente, el agente está funcionando correctamente. Resulta que para monitorear a un agente, es necesario monitorear sus tareas. Por tanto, dividimos el componente “Agente” en tareas. Para cada tarea, crearemos un componente separado en el sistema de monitoreo, donde el componente "Agente" será el "padre".

Dividimos el componente Agente en componentes secundarios (tareas):

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Entonces, hemos dividido un componente complejo en varios simples. Ahora necesitamos realizar comprobaciones para cada componente simple. Tenga en cuenta que el componente principal "Agente" no tendrá ninguna verificación, porque el sistema de monitoreo calculará su estado de forma independiente en función del estado de sus componentes secundarios. En otras palabras, si todas las tareas se completan exitosamente, entonces el agente se está ejecutando exitosamente.

Hay más de cien tareas en el sistema OMAPE. ¿Es realmente necesario realizar comprobaciones únicas para cada tarea? Por supuesto, el control será mejor si ideamos e implementamos nuestras propias comprobaciones especiales para cada tarea del agente, pero en la mayoría de los casos es suficiente utilizar comprobaciones universales.

El sistema OMAPE utiliza únicamente controles universales para las tareas y esto es suficiente para monitorear el desempeño del sistema.

Comprobando el progreso
La verificación más simple y efectiva es la verificación de ejecución. La verificación verifica que la tarea se completa sin errores. Todas las tareas tienen esta verificación.

Algoritmo de verificación

Después de cada ejecución de tarea, debe enviar el resultado de la verificación de ÉXITO al sistema de monitoreo si la ejecución de la tarea fue exitosa, o ERROR si la ejecución se completó con un error.

Esta verificación puede detectar los siguientes problemas:

  1. La tarea se ejecuta pero falla con un error.
  2. La tarea ha dejado de ejecutarse, por ejemplo, se ha congelado.

Veamos cómo se resuelven estos problemas con más detalle.

Problema 1: la tarea se ejecuta pero falla con un error
A continuación se muestra un caso en el que la tarea se ejecuta pero falla entre las 14:00 y las 16:00.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

La figura muestra que cuando una tarea falla, se envía inmediatamente una señal al sistema de monitoreo y el estado de la verificación correspondiente en el sistema de monitoreo se convierte en alarma.

Tenga en cuenta que en el sistema de seguimiento, el estado del componente depende del estado de verificación. El estado de alarma de la verificación cambiará todos los componentes de nivel superior a alarma; consulte la figura siguiente.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Problema 2: la tarea dejó de ejecutarse (congelada)
¿Cómo entenderá el sistema de seguimiento que una tarea está estancada?

El resultado de la verificación tiene un período de validez, por ejemplo, 1 hora. Si pasa una hora y no hay nuevos resultados de la prueba, el sistema de monitoreo establecerá el estado de la prueba en alarma.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

En la imagen de arriba, las luces se apagaron a las 14:00 p.m. A las 15:00, el sistema de seguimiento detectará que el resultado de la prueba (a partir de las 14:00) está podrido, porque El tiempo de relevancia ha expirado (una hora), pero no hay ningún resultado nuevo y la verificación cambiará al estado de alarma.

A las 16:00 las luces se encendieron nuevamente, el programa completará la tarea y enviará el resultado de la ejecución al sistema de monitoreo, el estado de la prueba nuevamente será exitoso.

¿Qué tiempo de relevancia de verificación debo usar?

El tiempo de relevancia debe ser mayor que el período de ejecución de la tarea. Recomiendo establecer el tiempo de relevancia entre 2 y 3 veces más que el período de ejecución de la tarea. Esto es necesario para evitar recibir notificaciones falsas cuando, por ejemplo, una tarea tomó más tiempo de lo habitual o alguien recargó el programa.

Comprobando el progreso

El sistema OMAPE tiene una tarea de “Cargar pronóstico”, que intenta descargar un nuevo pronóstico desde una fuente externa una vez cada hora. Se desconoce la hora exacta en que aparece un nuevo pronóstico en el sistema externo, pero se sabe que esto sucede 2 veces al día. Resulta que si no hay un nuevo pronóstico durante varias horas, entonces esto es normal, pero si no hay un nuevo pronóstico durante más de un día, entonces algo se ha roto en alguna parte. Por ejemplo, el formato de los datos en un sistema de pronóstico externo puede cambiar, razón por la cual la OMAPE no verá una nueva publicación de pronóstico.

Algoritmo de verificación

La tarea envía el resultado de la verificación de ÉXITO al sistema de monitoreo cuando logra avanzar (descargar un nuevo pronóstico del tiempo). Si no hay progreso o se produce un error, no se envía nada al sistema de seguimiento.

La verificación debe tener un intervalo de relevancia tal que durante este tiempo se garantice recibir nuevos avances.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Tenga en cuenta que conoceremos el problema con retraso, ya que el sistema de seguimiento espera hasta que expire el período de validez del resultado del último análisis. Por lo tanto, no es necesario prolongar demasiado el período de validez del cheque.

Monitoreo de base de datos

Para controlar la base de datos en el sistema ASMO, realizamos las siguientes comprobaciones:

  1. Verificando la creación de una copia de seguridad
  2. Comprobando el espacio libre en disco

Verificando la creación de una copia de seguridad
En la mayoría de las aplicaciones, es importante tener copias de seguridad de la base de datos actualizadas para que, si el servidor falla, pueda implementar el programa en un nuevo servidor.

ASMO crea una copia de seguridad una vez por semana y la envía al almacenamiento. Cuando este procedimiento se completa con éxito, el resultado de la verificación de éxito se envía al sistema de monitoreo. El resultado de la verificación es válido por 9 días. Aquellos. Para controlar la creación de copias de seguridad se utiliza el mecanismo de “verificación de progreso”, que comentamos anteriormente.

Comprobando el espacio libre en disco
Si no hay suficiente espacio libre en el disco, la base de datos no podrá funcionar correctamente, por lo que es importante controlar la cantidad de espacio libre.

Es conveniente utilizar métricas para comprobar parámetros numéricos.

Métrica es una variable numérica, cuyo valor se transmite al sistema de seguimiento. El sistema de seguimiento comprueba los valores umbral y calcula el estado de la métrica.

A continuación se muestra una imagen de cómo se ve el componente "Base de datos" en el sistema de monitoreo:

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Monitoreo del servidor

Para monitorear el servidor utilizamos las siguientes comprobaciones y métricas:

1. Espacio libre en disco
Si se agota el espacio en disco, la aplicación no podrá funcionar. Usamos 2 valores de umbral: el primer nivel es ADVERTENCIA, el segundo nivel es ALARMA.

2. Valor promedio de RAM en porcentaje por hora
Usamos el promedio por hora porque... No nos interesan las razas raras.

3. Porcentaje promedio de CPU por hora
Usamos el promedio por hora porque... No nos interesan las razas raras.

4. Verificación de ping
Comprueba que el servidor está en línea. El sistema de monitoreo puede realizar esta verificación; no es necesario escribir código.

A continuación se muestra una imagen de cómo se ve el componente "Servidor" en el sistema de monitoreo:

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Monitoreo de equipos

Te cuento cómo se obtienen los datos. Para cada punto de control de carretera (MPC) hay una tarea en el planificador de tareas, por ejemplo, "Levantamiento MPC M2 km 200". La tarea recibe datos de todos los dispositivos MPC cada 30 minutos.

Problema del canal de comunicación.
La mayor parte del equipo está ubicado fuera de la ciudad, para la transmisión de datos se utiliza una red GSM, que no funciona de manera estable (hay red o no).

Debido a las frecuentes fallas de la red, al principio la verificación de la encuesta MPC en el monitoreo se veía así:

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Quedó claro que esta no era una opción que funcionara, porque había muchas notificaciones falsas sobre problemas. Luego se decidió utilizar una "verificación de progreso" para cada dispositivo, es decir. Solo se envía la señal de éxito al sistema de monitoreo cuando el dispositivo se sondea sin errores. El tiempo de relevancia se fijó en 5 horas.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Ahora el monitoreo envía notificaciones sobre problemas solo cuando el dispositivo no puede ser sondeado durante más de 5 horas. Con un alto grado de probabilidad, no se trata de falsas alarmas, sino de problemas reales.

A continuación se muestra una imagen de cómo se ve el equipo en el sistema de monitoreo:

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

¡Importante!
Cuando la red GSM deja de funcionar, no se sondean todos los dispositivos MDC. Para reducir la cantidad de correos electrónicos del sistema de monitoreo, nuestros ingenieros se suscriben a notificaciones sobre problemas de componentes con el tipo "MPC" en lugar de "Dispositivo". Esto le permite recibir una notificación para cada MPC, en lugar de recibir una notificación separada para cada dispositivo.

Esquema final de seguimiento de la OMAPE

Juntemos todo y veamos qué tipo de esquema de monitoreo tenemos.

Nos comemos el elefante por partes. Estrategia de monitoreo del estado de la aplicación con ejemplos

Conclusión

Resumamos.
¿Qué nos aportó el seguimiento del desempeño de la OMAPE?

1. El tiempo de eliminación de defectos ha disminuido
Anteriormente hemos oído hablar de defectos por parte de los usuarios, pero no todos los usuarios informan sobre defectos. Sucedió que nos enteramos de un mal funcionamiento de un componente del sistema una semana después de su aparición. Ahora el sistema de seguimiento nos notifica los problemas tan pronto como se detecta un problema.

2. La estabilidad del sistema ha aumentado
Dado que los defectos comenzaron a eliminarse antes, el sistema en su conjunto comenzó a funcionar de manera mucho más estable.

3. Reducir el número de llamadas al soporte técnico
Muchos problemas ahora se solucionan antes de que los usuarios se den cuenta. Los usuarios comenzaron a contactar al soporte técnico con menos frecuencia. Todo esto tiene un buen efecto en nuestra reputación.

4. Incrementar la fidelidad de clientes y usuarios
El cliente notó cambios positivos en la estabilidad del sistema. Los usuarios encuentran menos problemas al utilizar el sistema.

5. Reducir los costos de soporte técnico
Hemos dejado de realizar controles manuales. Ahora todos los controles están automatizados. Anteriormente, conocíamos los problemas de los usuarios; a menudo era difícil entender de qué problema estaba hablando el usuario. Ahora, la mayoría de los problemas son reportados por el sistema de monitoreo; las notificaciones contienen datos técnicos, lo que siempre deja claro qué salió mal y dónde.

¡Importante!
No puede instalar el sistema de monitoreo en el mismo servidor donde se ejecutan sus aplicaciones. Si el servidor se cae, las aplicaciones dejarán de funcionar y no habrá nadie a quien avisar.

El sistema de monitoreo debe ejecutarse en un servidor separado en otro centro de datos.

Si no desea utilizar un servidor dedicado en un nuevo centro de datos, puede utilizar un sistema de monitoreo en la nube. Nuestra empresa utiliza el sistema de seguimiento en la nube Zidium, pero puedes utilizar cualquier otro sistema de seguimiento. El costo de un sistema de monitoreo en la nube es menor que alquilar un servidor nuevo.

Recomendaciones:

  1. Desglose las aplicaciones y sistemas en forma de árbol de componentes con el mayor detalle posible, por lo que será conveniente comprender dónde y qué está roto, y el control será más completo.
  2. Para comprobar la funcionalidad de un componente, utilice pruebas. Es mejor utilizar muchas comprobaciones simples que una compleja.
  3. Configure umbrales métricos en el lado del sistema de monitoreo, en lugar de escribirlos en código. Esto le evitará tener que volver a compilar, reconfigurar o reiniciar la aplicación.
  4. Para comprobaciones personalizadas, utilice un margen de tiempo de relevancia para evitar recibir notificaciones falsas porque algunas comprobaciones tardaron un poco más de lo habitual en completarse.
  5. Intente hacer que los componentes del sistema de monitoreo se pongan rojos solo cuando definitivamente haya un problema. Si se ponen rojos por nada, entonces dejarás de prestar atención a las notificaciones del sistema de seguimiento, se perderá su significado.

Si aún no estás utilizando un sistema de monitoreo, ¡empieza! No es tan difícil como parece. Disfrute mirando el árbol de ingredientes verdes que usted mismo cultivó.

Buena suerte.

Fuente: habr.com

Añadir un comentario