Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Olá a todos!

Nossa empresa está envolvida no desenvolvimento de software e posterior suporte técnico. O suporte técnico requer não apenas a correção de erros, mas também o monitoramento do desempenho de nossos aplicativos.

Por exemplo, se um dos serviços travou, você precisa registrar automaticamente esse problema e começar a resolvê-lo, e não esperar que usuários insatisfeitos entrem em contato com o suporte técnico.

Temos uma empresa pequena, não temos recursos para estudar e manter soluções complexas para aplicações de monitoramento, precisávamos encontrar uma solução simples e eficaz.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Estratégia de monitoramento

Não é fácil verificar a funcionalidade de uma aplicação, esta tarefa não é trivial, pode-se até dizer criativa. É especialmente difícil verificar um sistema multi-link complexo.

Como você pode comer um elefante? Somente em partes! Usamos essa abordagem para monitorar aplicativos.

A essência da nossa estratégia de monitoramento:

Divida seu aplicativo em componentes.
Crie verificações de controle para cada componente.

Um componente é considerado operacional se todas as suas verificações de controle forem realizadas sem erros. Um aplicativo é considerado íntegro se todos os seus componentes estiverem funcionais.

Assim, qualquer sistema pode ser representado como uma árvore de componentes. Componentes complexos são divididos em componentes mais simples. Componentes simples possuem verificações.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Os benchmarks não se destinam a realizar testes funcionais, não são testes unitários. As verificações de controle devem verificar como o componente se sente no momento atual, se existem todos os recursos necessários para o seu funcionamento e se há algum problema.

Não existem milagres; a maioria das verificações precisará ser desenvolvida de forma independente. Mas não tenha medo, porque na maioria dos casos uma verificação leva de 5 a 10 linhas de código, mas você pode implementar qualquer lógica e entenderá claramente como a verificação funciona.

Sistema de monitoramento

Digamos que dividimos o aplicativo em componentes, criamos e implementamos verificações para cada componente, mas o que fazer com os resultados dessas verificações? Como sabemos se alguma verificação falhou?

Precisaremos de um sistema de monitoramento. Ela executará as seguintes tarefas:

  • Receba resultados de testes e use-os para determinar o status dos componentes.
    Visualmente, isso parece destacar a árvore de componentes. Os componentes funcionais ficam verdes, os problemáticos ficam vermelhos.
  • Execute verificações gerais imediatamente.
    O próprio sistema de monitoramento pode realizar algumas verificações. Por que reinventar a roda, vamos usá-las. Por exemplo, você pode verificar se a página de um site está abrindo ou se o servidor está executando ping.
  • Envie notificações de problemas aos interessados.
  • Visualização de dados de monitoramento, disponibilização de relatórios, gráficos e estatísticas.

Breve descrição do sistema ASMO

É melhor explicar com um exemplo. Vejamos como é organizado o monitoramento do desempenho do sistema ASMO.

ASMO é um sistema automatizado de apoio meteorológico. O sistema ajuda os especialistas em serviços rodoviários a entender onde e quando é necessário tratar a estrada com materiais descongelantes. O sistema coleta dados de pontos de controle rodoviário. Um ponto de controle rodoviário é um local na estrada onde estão instalados equipamentos: uma estação meteorológica, uma câmera de vídeo, etc. Para prever situações perigosas, o sistema recebe previsões meteorológicas de fontes externas.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Então, a composição do sistema é bastante típica: site, agente, equipamento. Vamos começar a monitorar.

Dividindo o sistema em componentes

Os seguintes componentes podem ser distinguidos no sistema ASMO:

1. Conta pessoal
Este é um aplicativo da web. No mínimo, você precisa verificar se o aplicativo está disponível na Internet.

2. Banco de dados
O banco de dados armazena dados importantes para relatórios e você deve garantir que os backups do banco de dados sejam criados com êxito.

3. Servidor
Por servidor queremos dizer o hardware no qual os aplicativos são executados. É necessário verificar o status do HDD, RAM, CPU.

4. Agente
Este é um serviço do Windows que executa muitas tarefas diferentes de acordo com uma programação. No mínimo, você precisa verificar se o serviço está funcionando.

5. Tarefa do agente
Apenas saber que um agente está trabalhando não é suficiente. Um agente pode trabalhar, mas não executar as tarefas que lhe foram atribuídas. Vamos dividir o componente do agente em tarefas e verificar se cada tarefa do agente funciona com êxito.

6. Pontos de controle rodoviário (contêiner de todos os MPCs)
Existem muitos pontos de controle rodoviário, então vamos combinar todos os MPCs em um componente. Isso tornará mais conveniente a leitura dos dados de monitoramento. Ao visualizar o estado do componente “sistema ASMO”, ficará imediatamente claro onde estão os problemas: nas aplicações, no hardware ou no sistema de controle máximo.

7. Ponto de controle rodoviário (um limite máximo)
Consideraremos que este componente pode ser reparado se todos os dispositivos neste MPC puderem ser reparados.

8. Dispositivo
Esta é uma câmera de vídeo ou estação meteorológica instalada no limite máximo de concentração. É necessário verificar se o dispositivo está funcionando corretamente.

No sistema de monitoramento, a árvore de componentes ficará assim:

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Monitoramento de aplicativos da Web

Então, dividimos o sistema em componentes, agora precisamos fazer verificações para cada componente.

Para monitorar uma aplicação web usamos as seguintes verificações:

1. Verificando a abertura da página principal
Esta verificação é realizada pelo sistema de monitoramento. Para executá-lo indicamos o endereço da página, o fragmento de resposta esperado e o tempo máximo de execução da solicitação.

2. Verificando o prazo de pagamento do domínio
Uma verificação muito importante. Quando um domínio não é pago, os usuários não podem abrir o site. Resolver o problema pode levar vários dias, porque... As alterações de DNS não são aplicadas imediatamente.

3. Verificando o certificado SSL
Hoje em dia, quase todos os sites utilizam o protocolo https para acesso. Para que o protocolo funcione corretamente, você precisa de um certificado SSL válido.

Abaixo está o componente “Conta Pessoal” no sistema de monitoramento:

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Todas as verificações acima funcionarão para a maioria dos aplicativos e não exigirão codificação. Isso é muito legal porque você pode começar a monitorar qualquer aplicação web em 5 minutos. Abaixo estão verificações adicionais que podem ser realizadas para uma aplicação web, mas sua implementação é mais complexa e específica da aplicação, portanto não as abordaremos neste artigo.

O que mais você pode verificar?

Para monitorar seu aplicativo da web de maneira mais completa, você pode realizar as seguintes verificações:

  • Número de erros de JavaScript por período
  • Número de erros no lado da aplicação web (back-end) no período
  • Número de respostas malsucedidas de aplicativos da web (código de resposta 404, 500, etc.)
  • Tempo médio de execução da consulta

Monitorando um serviço do Windows (agente)

No sistema ASMO, o agente desempenha o papel de agendador de tarefas, que executa tarefas agendadas em segundo plano.

Se todas as tarefas do agente forem concluídas com êxito, o agente estará funcionando corretamente. Acontece que para monitorar um agente, você precisa monitorar suas tarefas. Portanto, dividimos o componente “Agente” em tarefas. Para cada tarefa, criaremos um componente separado no sistema de monitoramento, onde o componente “Agente” será o “pai”.

Dividimos o componente Agente em componentes filhos (tarefas):

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Portanto, dividimos um componente complexo em vários componentes simples. Agora precisamos fazer verificações para cada componente simples. Observe que o componente pai “Agente” não terá nenhuma verificação, porque o sistema de monitoramento calculará seu status de forma independente com base no status de seus componentes filhos. Em outras palavras, se todas as tarefas forem concluídas com êxito, o agente estará sendo executado com êxito.

Existem mais de cem tarefas no sistema ASMO. É realmente necessário criar verificações exclusivas para cada tarefa? É claro que o controle será melhor se criarmos e implementarmos nossas próprias verificações especiais para cada tarefa do agente, mas na maioria dos casos é suficiente usar verificações universais.

O sistema ASMO utiliza apenas verificações universais para tarefas e isso é suficiente para monitorar o desempenho do sistema.

Verificando o progresso
A verificação mais simples e eficaz é a verificação de execução. A verificação verifica se a tarefa foi concluída sem erros. Todas as tarefas possuem esta verificação.

Algoritmo de validação

Após a execução de cada tarefa, você precisa enviar o resultado da verificação SUCCESS ao sistema de monitoramento se a execução da tarefa foi bem-sucedida, ou ERRO se a execução foi concluída com erro.

Esta verificação pode detectar os seguintes problemas:

  1. A tarefa é executada, mas falha com um erro.
  2. A tarefa parou de ser executada, por exemplo, congelou.

Vejamos como esses problemas são resolvidos com mais detalhes.

Problema 1 – A tarefa é executada, mas falha com um erro
Abaixo está um caso em que a tarefa é executada, mas falha entre 14h e 00h.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

A figura mostra que quando uma tarefa falha, um sinal é imediatamente enviado ao sistema de monitoramento e o status da verificação correspondente no sistema de monitoramento torna-se alarme.

Observe que no sistema de monitoramento, o status do componente depende do status da verificação. O status de alarme da verificação alterará todos os componentes de nível superior para alarme, veja a figura abaixo.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Problema 2 – A tarefa parou de ser executada (congelada)
Como o sistema de monitoramento entenderá que uma tarefa está travada?

O resultado da verificação tem um período de validade, por exemplo, 1 hora. Se passar uma hora e não houver nenhum novo resultado de teste, o sistema de monitoramento definirá o status do teste para alarme.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Na foto acima, as luzes foram apagadas às 14h. Às 00h, o sistema de monitoramento detectará que o resultado do teste (a partir das 15h) está podre, pois O tempo de relevância expirou (uma hora), mas não há novo resultado, e passará a verificação para o status de alarme.

Às 16h as luzes foram acesas novamente, o programa irá completar a tarefa e enviar o resultado da execução para o sistema de monitoramento, o status do teste voltará a ser sucesso.

Qual tempo de relevância de verificação devo usar?

O tempo de relevância deve ser maior que o período de execução da tarefa. Eu recomendo definir o tempo de relevância 2 a 3 vezes maior que o período de execução da tarefa. Isso é necessário para evitar o recebimento de notificações falsas quando, por exemplo, uma tarefa demorou mais que o normal ou alguém recarregou o programa.

Verificando o progresso

O sistema ASMO possui uma tarefa de “Previsão de Carga”, que tenta baixar uma nova previsão de uma fonte externa uma vez por hora. Não se sabe o momento exato em que uma nova previsão aparece no sistema externo, mas sabe-se que isso acontece 2 vezes ao dia. Acontece que se não houver nova previsão por várias horas, isso é normal, mas se não houver nova previsão por mais de um dia, então algo quebrou em algum lugar. Por exemplo, o formato dos dados num sistema de previsão externo pode mudar, razão pela qual a ASMO não verá uma nova divulgação de previsão.

Algoritmo de validação

A tarefa envia o resultado da verificação de SUCESSO ao sistema de monitoramento quando consegue obter progresso (baixando uma nova previsão do tempo). Se não houver progresso ou ocorrer um erro, nada será enviado ao sistema de monitoramento.

A verificação deve ter um intervalo de relevância tal que durante esse tempo seja garantido o recebimento de novos progressos.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Observe que saberemos do problema com atraso, pois o sistema de monitoramento espera até que o período de validade do último resultado da verificação expire. Portanto, o prazo de validade do cheque não precisa ser muito longo.

Monitoramento de banco de dados

Para controlar o banco de dados no sistema ASMO, realizamos as seguintes verificações:

  1. Verificando a criação de backup
  2. Verificando espaço livre em disco

Verificando a criação de backup
Na maioria dos aplicativos, é importante ter backups de banco de dados atualizados para que, se o servidor falhar, você possa implantar o programa em um novo servidor.

ASMO cria uma cópia de backup uma vez por semana e a envia para armazenamento. Quando este procedimento for concluído com sucesso, o resultado da verificação de sucesso é enviado ao sistema de monitoramento. O resultado da verificação é válido por 9 dias. Aqueles. Para controlar a criação de backups, é utilizado o mecanismo de “verificação de progresso”, que discutimos acima.

Verificando espaço livre em disco
Se não houver espaço livre suficiente no disco, o banco de dados não conseguirá funcionar corretamente, por isso é importante controlar a quantidade de espaço livre.

É conveniente usar métricas para verificar parâmetros numéricos.

Métricas é uma variável numérica cujo valor é transmitido ao sistema de monitoramento. O sistema de monitoramento verifica os valores limite e calcula o status da métrica.

Abaixo está uma imagem da aparência do componente “Banco de dados” no sistema de monitoramento:

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Monitoramento de servidor

Para monitorar o servidor usamos as seguintes verificações e métricas:

1. Espaço livre em disco
Se o espaço em disco acabar, o aplicativo não funcionará. Usamos 2 valores limite: o primeiro nível é AVISO, o segundo nível é ALARME.

2. Valor médio de RAM em porcentagem por hora
Usamos a média horária porque... não estamos interessados ​​em raças raras.

3. Porcentagem média de CPU por hora
Usamos a média horária porque... não estamos interessados ​​em raças raras.

4. Verificação de ping
Verifica se o servidor está online. O sistema de monitoramento pode realizar essa verificação; não há necessidade de escrever código.

Abaixo está uma imagem da aparência do componente “Servidor” no sistema de monitoramento:

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Monitoramento de equipamentos

Vou te contar como os dados são obtidos. Para cada ponto de controle rodoviário (MPC) existe uma tarefa no planejador de tarefas, por exemplo, “Levantamento MPC M2 km 200”. A tarefa recebe dados de todos os dispositivos MPC a cada 30 minutos.

Problema no canal de comunicação
A maior parte dos equipamentos está localizada fora da cidade, para transmissão de dados é utilizada uma rede GSM, que não funciona de forma estável (existe rede ou não).

Devido às frequentes falhas de rede, a princípio, a verificação da pesquisa do MPC no monitoramento ficou assim:

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Ficou claro que esta não era uma opção funcional, pois havia muitas notificações falsas sobre problemas. Decidiu-se então usar uma “verificação de progresso” para cada dispositivo, ou seja, Somente o sinal de sucesso é enviado ao sistema de monitoramento quando o dispositivo é pesquisado sem erros. O tempo de relevância foi definido em 5 horas.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Agora o monitoramento envia notificações sobre problemas somente quando o dispositivo não pode ser monitorado por mais de 5 horas. Com um alto grau de probabilidade, estes não são alarmes falsos, mas problemas reais.

Abaixo segue uma imagem de como fica o equipamento no sistema de monitoramento:

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Importante!
Quando a rede GSM deixa de funcionar, todos os dispositivos MDC não são pesquisados. Para reduzir o número de e-mails do sistema de monitoramento, nossos engenheiros assinam notificações sobre problemas de componentes do tipo “MPC” em vez de “Dispositivo”. Isso permite que você receba uma notificação para cada MPC, em vez de receber uma notificação separada para cada dispositivo.

Esquema final de monitoramento da ASMO

Vamos juntar tudo e ver que tipo de esquema de monitoramento temos.

Comemos o elefante em partes. Estratégia de monitoramento da integridade do aplicativo com exemplos

Conclusão

Vamos resumir.
O que o monitoramento do desempenho da ASMO nos proporcionou?

1. O tempo de eliminação de defeitos diminuiu
Já ouvimos falar de defeitos dos usuários, mas nem todos os usuários relatam defeitos. Acontece que soubemos do mau funcionamento de um componente do sistema uma semana depois de seu aparecimento. Agora, o sistema de monitoramento nos notifica sobre problemas assim que um problema é detectado.

2. A estabilidade do sistema aumentou
Como os defeitos começaram a ser eliminados mais cedo, o sistema como um todo começou a funcionar de forma muito mais estável.

3. Redução do número de ligações para suporte técnico
Muitos problemas agora são corrigidos antes mesmo que os usuários saibam sobre eles. Os usuários começaram a entrar em contato com o suporte técnico com menos frequência. Tudo isso tem um bom efeito em nossa reputação.

4. Aumentar a fidelização de clientes e usuários
O cliente notou mudanças positivas na estabilidade do sistema. Os usuários encontram menos problemas ao usar o sistema.

5. Reduza os custos de suporte técnico
Paramos de realizar qualquer verificação manual. Agora todas as verificações são automatizadas. Anteriormente, aprendíamos sobre problemas com os usuários; muitas vezes era difícil entender de que problema o usuário estava falando. Agora, a maioria dos problemas são reportados pelo sistema de monitoramento; as notificações contêm dados técnicos, que sempre deixam claro o que deu errado e onde.

Importante!
Você não pode instalar o sistema de monitoramento no mesmo servidor onde seus aplicativos são executados. Se o servidor cair, os aplicativos deixarão de funcionar e não haverá ninguém para notificar sobre isso.

O sistema de monitoramento deve ser executado em um servidor separado em outro data center.

Se não quiser usar um servidor dedicado em um novo data center, você pode usar um sistema de monitoramento em nuvem. Nossa empresa utiliza o sistema de monitoramento em nuvem Zidium, mas você pode usar qualquer outro sistema de monitoramento. O custo de um sistema de monitoramento em nuvem é menor do que alugar um novo servidor.

Recomendações:

  1. Divida aplicativos e sistemas na forma de uma árvore de componentes com o máximo de detalhes possível, para que seja conveniente entender onde e o que está quebrado, e o controle será mais completo.
  2. Para verificar a funcionalidade de um componente, use testes. É melhor usar muitas verificações simples do que uma complexa.
  3. Configure limites métricos na lateral do sistema de monitoramento, em vez de escrevê-los em código. Isso evitará que você tenha que recompilar, reconfigurar ou reiniciar o aplicativo.
  4. Para verificações personalizadas, use uma margem de tempo de relevância para evitar o recebimento de notificações falsas, pois algumas verificações demoraram um pouco mais para serem concluídas do que o normal.
  5. Tente fazer com que os componentes do sistema de monitoramento fiquem vermelhos somente quando houver definitivamente um problema. Se ficarem vermelhos à toa, você deixará de prestar atenção às notificações do sistema de monitoramento, seu significado se perderá.

Se você ainda não utiliza um sistema de monitoramento, comece! Não é tão difícil quanto parece. Divirta-se olhando para a árvore de ingredientes verdes que você mesmo cultivou.

Boa sorte.

Fonte: habr.com

Adicionar um comentário