Modelagem de integridade para cargas de trabalho
As aplicações na nuvem geram grandes volumes de dados operacionais, o que torna difícil identificar e resolver problemas rapidamente. Uma razão comum para esse desafio é a ausência de uma linha de base de integridade personalizada para a funcionalidade da carga de trabalho e a incapacidade de detetar desvios dessa linha de base.
A modelagem de integridade é um exercício de observabilidade que combina o contexto de negócios com dados brutos de monitoramento para quantificar a integridade geral de uma carga de trabalho. Ele ajuda a definir uma linha de base contra a qual você pode monitorar a carga de trabalho. Você deve considerar dados como telemetria de componentes de infraestrutura e aplicativos. A modelagem de integridade também pode incorporar outras informações necessárias para atingir as metas de qualidade da carga de trabalho.
Problemas de desempenho ou degradação operacional podem causar desvio do estado operacional esperado. Ao modelar a integridade de uma carga de trabalho, você pode identificar desvios e tomar decisões operacionais informadas que consideram o impacto nos negócios.
A modelagem de saúde preenche a lacuna entre o conhecimento operacional tribal e insights acionáveis. Ajuda-o a gerir problemas críticos de forma eficaz. O conceito é essencial para maximizar a confiabilidade e a eficácia operacional.
Este guia oferece orientações práticas sobre modelagem de integridade, incluindo como criar um modelo que avalia a integridade do tempo de execução de uma carga de trabalho e todos os seus subsistemas.
Terminologia | Definição |
---|---|
Modelação do estado de funcionamento | Um exercício de observabilidade que usa o contexto de negócios para interpretar dados de monitoramento como estados de integridade. |
Modelo de estado de funcionamento | Uma representação gráfica de entidades lógicas e suas relações para um determinado escopo. Cada nó tem uma definição de estado de integridade para racionalizar os dados de monitoramento em todo o modelo. |
Entidade de saúde | Um componente lógico que representa uma unidade individual de um sistema, uma combinação lógica de várias entidades relacionadas ou o sistema geral. |
Estado de integridade | Um status definido e mensurável que fornece insights operacionais significativos sobre a integridade de uma entidade. |
Sinal de saúde | Fluxos de dados individuais que fornecem informações sobre o comportamento operacional de uma entidade. |
Modelo de modelos | Um escopo de modelagem agregado no qual as entidades representam modelos de integridade distintos para sistemas componentes. |
Recomendamos que você assista a este vídeo para obter uma compreensão de alto nível da modelagem de saúde.
O que é saúde, modelagem de saúde e modelo de saúde?
O termo saúde refere-se ao status operacional de uma entidade e suas dependências. Essa entidade pode ser uma unidade individual de um sistema, uma combinação lógica de várias entidades relacionadas ou o sistema global.
Recomendamos que você represente a saúde em um dos três estados:
Saudável: opera de forma otimizada e atende às expectativas de qualidade
Degradado: Apresenta um comportamento menos saudável, o que indica potenciais problemas
Insalubre: Em estado crítico e requer atenção imediata
Nota
Você pode representar a integridade com uma pontuação em vez de estados para fornecer mais granularidade de dados.
Os estados de integridade são derivados da combinação de dados de monitoramento com informações de domínio. Cada Estado deve ser definido e mensurável. Os estados de integridade são calculados usando sinais de integridade, que são fluxos de dados individuais que fornecem informações sobre o comportamento operacional de uma entidade. Os sinais podem incluir métricas, logs, rastreamentos ou outras características de qualidade. Por exemplo, um sinal de integridade para uma entidade de máquina virtual (VM) pode rastrear a métrica de utilização da CPU. Outros sinais para essa entidade podem incluir uso de memória, latência de rede ou taxas de erro.
Ao definir sinais de integridade, considere os requisitos não funcionais para a carga de trabalho. No exemplo de utilização da CPU, inclua os limites esperados para cada estado de integridade. Se a utilização exceder o limite tolerado de acordo com os requisitos de carga de trabalho, o sistema passará de Íntegro para Degradado ou Não Íntegro. Essas alterações de estado acionam os alertas ou ações apropriados.
A modelagem de integridade exige que as entidades tenham estados bem definidos derivados de vários sinais de integridade e contextualizados para a carga de trabalho. Por exemplo, a definição de integridade para uma VM pode ser:
Íntegro: Os principais requisitos e metas não funcionais, como tempo de resposta, utilização de recursos e desempenho geral do sistema, são totalmente satisfeitos. Por exemplo, 95% dos pedidos são processados em 500 milissegundos. A carga de trabalho usa recursos de VM como CPU, memória e armazenamento de forma otimizada e mantém um equilíbrio entre as demandas de carga de trabalho e a capacidade disponível. A experiência do usuário está nos níveis esperados.
Degradado: os recursos não estão funcionando da melhor forma, mas ainda estão operacionais. Por exemplo, o disco de armazenamento está enfrentando problemas de limitação. Os usuários podem enfrentar respostas lentas.
Insalubre: A degradação está além dos limites tolerados. Os recursos não estão mais responsivos ou disponíveis, e o sistema não está mais atendendo aos níveis de desempenho aceitáveis. A experiência do usuário é gravemente afetada.
O resultado da modelagem de integridade é um modelo ou uma representação gráfica de entidades lógicas e seus relacionamentos para uma arquitetura de carga de trabalho. Cada nó tem uma definição de estado de integridade.
Importante
A modelagem de integridade é um conceito abstrato que você pode implementar e aplicar em diferentes escopos se tiver uma boa compreensão dos cenários de negócios.
Na imagem:
As entidades são componentes lógicos da carga de trabalho que representam aspetos do sistema. Eles podem ser componentes de infraestrutura, como servidores, bancos de dados e redes. Eles também podem ser módulos de aplicação específicos, pods, serviços ou microsserviços. Ou, as entidades podem capturar interações do usuário e fluxos do sistema dentro da carga de trabalho.
Nota
Os fluxos de usuário e sistema resumem os requisitos não funcionais em cenários de negócios que envolvem componentes de aplicativos e infraestrutura. Este resumo reflete o valor comercial do aplicativo.
As relações entre entidades espelham as cadeias de dependência dentro do sistema. Por exemplo, um módulo de aplicativo pode chamar componentes de infraestrutura específicos que formam uma relação.
Considere um cenário no qual uma carga de trabalho de comércio eletrônico experimenta um pico de mensagens com falha em uma fila do Barramento de Serviço do Azure, o que está fazendo com que os pagamentos falhem. Este problema é crítico para a organização devido à perda de receita implícita. Embora um desenvolvedor de aplicativos possa entender o efeito desse pico de métricas nos pagamentos, esse conhecimento tribal não é frequentemente compartilhado entre a equipe de operações.
Um modelo de saúde pode dar aos operadores visibilidade imediata do problema e seus efeitos. O fluxo de pagamento depende do Service Bus, que é um dos componentes da carga de trabalho. A representação visual revela o estado degradado da instância do Service Bus e seu efeito no fluxo de pagamento. Os operadores podem compreender a importância do problema e concentrar os seus esforços de reparação nesse componente específico.
A modelagem em saúde foi importante no cenário anterior das seguintes maneiras:
Ele melhorou o tempo para detetar (TTD) e o tempo para mitigar (TTM), permitindo um isolamento mais rápido do problema, o que levou a uma deteção mais rápida de problemas e possíveis correções.
Os operadores receberam alertas com base nos estados de saúde, o que reduziu o ruído desnecessário. Os operadores receberam notificações que forneciam um contexto específico sobre o impacto comercial nos pagamentos.
As cadeias de dependência ajudaram os operadores a compreender plenamente a extensão dos problemas operacionais. Este conhecimento acelerou as avaliações de impacto e conduziu a respostas prioritárias. Os operadores também identificaram facilmente problemas em cascata ou correlacionados.
Os operadores conduziram atividades pós-incidente com precisão porque o modelo de saúde forneceu informações sobre as causas profundas das anomalias e os sinais de saúde específicos envolvidos.
Isso tornou os dados de monitoramento significativos para todos os membros da equipe. Ele preencheu a lacuna entre o conhecimento tribal e as perceções compartilhadas.
A organização usou o modelo de saúde como linha de base para investimentos futuros em operações orientadas por IA para obter insights inteligentes.
Esquema do modelo de integridade
Os modelos de integridade fornecem um esquema de dados distinto otimizado para casos de uso de observabilidade. Esse esquema leva a modelagem de integridade de um conceito abstrato para uma solução mensurável. Ao modelar seus requisitos específicos, objetivos e contexto arquitetônico, você pode adaptar os dados de integridade ao seu cenário exclusivo.
Saúde é um conceito de dados relativos. Cada modelo representa dados de integridade exclusivos e priorizados por seu escopo contextual, mesmo que use o mesmo conjunto de entidades. O que constitui saudável num cenário específico pode diferir significativamente noutros contextos.
Por exemplo, considere recursos do Azure do mesmo tipo em sua carga de trabalho.
- A VM A executa um aplicativo sensível à CPU.
- A VM B lida com um serviço que consome muita memória.
As definições de integridade para essas máquinas são diferentes. As métricas de utilização da CPU provavelmente influenciam o status de integridade da VM A, e a VM B pode priorizar métricas relacionadas à memória.
Importante
Um modelo de saúde não deve tratar todas as falhas da mesma forma. Deve distinguir claramente entre falhas esperadas ou transitórias, mas recuperáveis, e um verdadeiro estado de catástrofe.
Criar um modelo de integridade
A primeira etapa para criar um modelo de integridade é um exercício de design lógico, que normalmente envolve as atividades descritas nas seções a seguir.
Avalie o design da sua carga de trabalho
Comece este exercício de design lógico avaliando os seguintes componentes do design da carga de trabalho.
Componentes de infraestrutura, como clusters de computação e bancos de dados
Componentes de aplicativo que são executados em computação e seus componentes relevantes
Dependências lógicas ou físicas entre componentes
Por exemplo, o modelo de integridade de um aplicativo de comércio eletrônico deve representar o estado atual de processos críticos, como entrada do usuário, check-out e pagamentos.
Contextualizar usando requisitos de negócios
Avalie a importância relativa e o impacto geral de cada fluxo na sua organização. Considere fatores como experiência do usuário, segurança e eficiência operacional. Por exemplo, na maioria dos cenários, a falha de um processo de pagamento é provavelmente mais significativa do que a falha de um processo de relatório.
Identificar caminhos de escalonamento para lidar com problemas relacionados a cada fluxo. Para obter mais informações, consulte Otimizar o design da carga de trabalho usando fluxos.
Nota
Você percebe o valor da modelagem de integridade somente quando incorpora seus cenários e contexto de negócios. Em seguida, você pode racionalizar o impacto nos negócios a partir de problemas operacionais.
Mapear para métricas de confiabilidade
Procure métricas de confiabilidade relevantes em todo o design do aplicativo.
Considere a definição de indicadores de nível de serviço (SLIs) e objetivos de nível de serviço (SLOs) para todo o aplicativo e seus processos de negócios individuais. Esses SLIs e SLOs devem estar alinhados com os sinais de integridade específicos considerados para seu modelo de integridade. Ao fazer isso, você cria uma definição abrangente de integridade que reflete com precisão a obtenção de um nível de serviço aceitável para o aplicativo.
Importante
SLIs e SLOs são sinais críticos de saúde. Eles criam uma definição significativa de integridade que reflete o nível de serviço desejado, juntamente com outros atributos de qualidade. Você também pode definir objetivos de integridade do serviço (SHOs) para capturar a integridade que deseja atingir em um intervalo de tempo agregado.
Identificar sinais de saúde
Para criar um modelo de integridade abrangente, correlacione vários tipos de dados de monitoramento, incluindo métricas, logs e rastreamentos. Ao fazer isso, você garante que o conceito de integridade reflita com precisão o estado de tempo de execução de uma entidade específica ou toda a carga de trabalho.
Use métricas e logs da plataforma
No contexto da modelagem de integridade, é essencial coletar métricas e logs no nível da plataforma dos recursos subjacentes do Azure. Essas métricas incluem porcentagem de CPU, entrada e saída de rede e operações de disco por segundo. Você pode usar esses dados em seu modelo de integridade para detetar e prever possíveis problemas, mantendo um ambiente confiável.
Além disso, essa abordagem ajuda a diferenciar entre falhas transitórias, ou interrupções temporárias, e falhas não transitórias, ou problemas persistentes.
Nota
Como prática recomendada, você deve configurar todos os recursos do aplicativo para direcionar logs e métricas de diagnóstico para a tecnologia de agregação de logs escolhida. Crie guardrails usando a Política do Azure para garantir configurações de diagnóstico consistentes em todo o aplicativo e impor a configuração escolhida para cada serviço do Azure.
Adicionar logs de aplicativos
Os logs de aplicativos são uma fonte importante de dados de diagnóstico para seu modelo de integridade. Aqui estão algumas práticas recomendadas para o registro em log de aplicativos:
Use log semântico ou estruturado. Os logs estruturados facilitam o consumo automatizado e a análise de dados de log em escala.
Considere armazenar métricas de recursos do Azure e dados de diagnóstico em um espaço de trabalho do Azure Monitor Logs, em vez de uma conta de armazenamento. Usando esse método, você pode criar sinais de integridade usando consultas Kusto para uma avaliação eficiente.
Registre dados no ambiente de produção. Capture dados abrangentes enquanto o aplicativo opera no ambiente de produção. Informações suficientes são essenciais para a avaliação do estado de saúde e para diagnosticar quaisquer problemas de produção detetados.
Registre eventos nos limites de serviço. Inclua uma ID de correlação que percorra os limites do serviço. Se uma transação envolver vários serviços e um deles falhar, a ID de correlação ajudará você a rastrear solicitações em todo o aplicativo e identificar a causa da falha.
Use o log assíncrono. Evite operações de log síncronas que possam bloquear o código do aplicativo. O log assíncrono garante a disponibilidade evitando listas de pendências de solicitações durante gravações de log.
Separe o log do aplicativo da auditoria. Mantenha os logs de auditoria separadamente dos logs de diagnóstico. Embora os registros de auditoria atendam aos requisitos de conformidade ou regulamentares, mantê-los distintos evita transações interrompidas.
Implementar rastreamento distribuído
Implemente o rastreamento distribuído correlacionando a telemetria entre os fluxos críticos do sistema. A telemetria correlacionada fornece informações sobre transações de ponta a ponta e é essencial para uma análise de causa raiz (RCA) eficaz quando ocorrem falhas.
Usar sondas de saúde
Implemente e execute testes de integridade fora do aplicativo para verificar explicitamente a integridade e a capacidade de resposta do seu aplicativo. Use respostas de sonda como sinais dentro do seu modelo de integridade.
Você pode implementar testes de integridade medindo o tempo de resposta do aplicativo como um todo ou de seus componentes individuais. Os testes podem executar processos para medir a latência e verificar a disponibilidade ou para extrair informações do aplicativo. Para obter mais informações, consulte Padrão de monitoramento de ponto de extremidade de integridade.
A maioria dos balanceadores de carga oferece suporte à execução de testes de integridade que executam ping em pontos de extremidade de aplicativos em intervalos configurados. Alternativamente, você pode usar um serviço de vigilância externa. Um serviço de vigilância agrega verificações de integridade de vários componentes na carga de trabalho. Os vigilantes também podem hospedar um código que faz a correção imediata para condições de saúde conhecidas.
Adotar técnicas de monitorização estrutural e funcional
O monitoramento estrutural envolve equipar o aplicativo com logs semânticos e métricas. O aplicativo coleta diretamente essas métricas, que incluem consumo de memória atual, latência de solicitação e outros dados relevantes no nível do aplicativo.
Fortaleça seus processos de monitoramento usando o monitoramento funcional. Essa abordagem se concentra em medir os serviços da plataforma e seu efeito na experiência geral do usuário. Ao contrário do monitoramento estrutural, o monitoramento funcional não requer conhecimento detalhado do sistema. Ele testa o comportamento visível externamente do aplicativo. Esta abordagem é útil para avaliar SLOs e SLIs.
Modele o design
Representar o design do aplicativo identificado como entidades e relacionamentos. Mapeie sinais de integridade para componentes específicos para quantificar estados de integridade em um nível de entidade. Considere a criticidade dos componentes para determinar como os estados de integridade devem se propagar pelo modelo. Por exemplo, os componentes de relatório podem não ser tão críticos quanto outros componentes, o que resulta em efeitos diferentes na integridade geral da carga de trabalho.
Definir alertas acionáveis
Use os estados de integridade avaliados para disparar alertas e ações automatizadas. A saúde deve ser integrada nos runbooks operacionais existentes como um princípio central de dados de observabilidade.
Normalmente, há um mapeamento um-para-um entre os dados de monitoramento e as regras de alerta, o que pode levar a resultados indesejáveis, como tempestades de alerta e ruído de alerta ambiente. Por exemplo, em um cluster de computação, grandes volumes de alertas no nível da VM com base na utilização da CPU e na contagem de erros podem sobrecarregar os operadores durante falhas e causar atrasos na resolução. Da mesma forma, quando há um grande número de alertas configurados, o ruído de alerta ambiental geralmente resulta em alertas que são ignorados ou ignorados.
Um modelo de integridade introduz a separação entre dados de monitoramento e regras de alerta. Uma definição de integridade agrega muitos sinais em um único estado de integridade, o que diminui o número de alertas para que os operadores possam se concentrar apenas em alertas de alto valor que são críticos para a organização. Considere o cenário do e-commerce. Você pode configurar um alerta para enviar notificações sobre alterações na integridade do fluxo de pagamentos do processo, em vez de alterações em recursos subjacentes, como a fila do Service Bus.
Nota
A capacidade de alertar em todas as camadas do modelo de integridade fornece flexibilidade para as diferentes personas de carga de trabalho. Os proprietários de aplicativos e gerentes de produto podem ser alertados sobre alterações no estado de integridade nos principais cenários de negócios ou em toda a carga de trabalho. Os operadores podem ser alertados com base na integridade da infraestrutura ou dos componentes do aplicativo.
Visualizar o modelo
Crie representações visuais, como tabelas ou gráficos, para transmitir efetivamente o estado atual e o histórico do modelo de integridade. Certifique-se de que a visualização esteja alinhada com o contexto de negócios e forneça insights acionáveis.
Ao visualizar seu modelo de integridade, considere adotar uma abordagem de semáforo para tornar os estados de integridade imediatamente perspicazes nas cadeias de dependência.
Atribua verde para saudável, âmbar para degradado e vermelho para insalubre. Ao identificar rapidamente os estados codificados por cores, você pode localizar com eficiência a causa raiz de qualquer degradação do aplicativo.
Nota
Recomendamos que você considere os requisitos de acessibilidade para pessoas com deficiência visual ao criar um painel para seu modelo de saúde. Para obter as melhores práticas de diagramação, consulte Diagramas de design de arquitetura.
Adote o seu modelo de saúde
Depois de criar um modelo de integridade, considere os seguintes casos de uso para direcionar a deteção e a interpretação de falhas ou problemas operacionais.
Aplicabilidade a várias funções
A modelagem de integridade pode fornecer informações específicas para funções de trabalho ou para funções dentro do mesmo contexto da carga de trabalho. Por exemplo, uma função de DevOps pode precisar de informações de integridade operacional. Um agente de segurança pode estar mais preocupado com os sinais de intrusão e a exposição à segurança. Um administrador de banco de dados provavelmente só está interessado em um subconjunto do modelo de aplicativo por meio dos recursos do banco de dados.
Personalize as perspetivas de saúde para diferentes partes interessadas. Considere a criação de modelos separados a partir de conjuntos de dados sobrepostos.
Validação contínua
Use seu modelo de integridade para otimizar os processos de teste e validação, como teste de carga e teste de caos. Você pode validar o estado operacional do tempo de execução durante o teste e avaliar a eficácia do seu modelo em cenários de escala e falha incorporando modelos de integridade ao seu ciclo de vida de engenharia.
Saúde organizacional
Embora a modelagem de integridade seja comumente associada à quantificação de estados de integridade para aplicativos individuais, sua aplicabilidade se estende além desse escopo.
Em um nível de carga de trabalho individual, os modelos de integridade fornecem uma base para a observabilidade do aplicativo e insights operacionais. Cada aplicativo pode ter seu próprio modelo de integridade que captura o que cada estado de saúde significa dentro de seu contexto.
Você pode combinar vários modelos de integridade em uma construção de alto nível criando um modelo de modelos. Por exemplo, você pode criar a pegada de observabilidade de uma unidade de negócios ou de uma propriedade de nuvem inteira usando modelos de integridade como componentes dentro de um modelo maior. Os modelos de integridade representam cargas de trabalho dentro da propriedade como nós dentro do gráfico de nível superior. Use os relacionamentos nesse modelo para capturar dependências entre aplicativos, incluindo fluxos de dados, interações de serviço e infraestrutura compartilhada.
Considere uma empresa de varejo que tenha vários aplicativos para comércio eletrônico, pagamentos e processamento de pedidos. Você pode definir cada um desses aplicativos como um modelo de integridade independente para quantificar o que a integridade significa para essa carga de trabalho. Em seguida, você pode usar um modelo pai para mapear todos esses modelos de integridade de componentes como entidades e capturar o impacto operacional entre aplicativos por meio de cadeias de dependência. Por exemplo, se o aplicativo de comércio eletrônico se tornar não íntegro, terá um efeito cascata no aplicativo de pagamento.
Tendências de saúde e IA para operações de TI
A modelagem de integridade fornece uma linha de base operacional quantificada que está ajustada a um contexto de negócios específico. A IA para operações de TI (AIOps) é uma maneira popular de melhorar a eficiência operacional. Os dados de saúde são uma entrada fundamental para modelos de aprendizado de máquina analisarem tendências de saúde. Por exemplo, os modelos de aprendizagem automática podem:
Extraia mais informações das alterações de estado e recomende ações.
Analise as tendências de integridade ao longo do tempo para impulsionar a previsão de problemas e o refinamento do modelo.
Mantenha o seu modelo de saúde
Manter um modelo de saúde é uma atividade de engenharia contínua que se alinha com o desenvolvimento e as operações do seu aplicativo. À medida que seu aplicativo evolui, certifique-se de que seu modelo de integridade evolua em paralelo.
Além disso, trate os modelos de integridade como artefatos de carga de trabalho que devem ser integrados ao seu ciclo de vida de desenvolvimento. Adote a infraestrutura como código (IaC) para um gerenciamento consistente e controlado por versão do seu modelo de integridade. Use a automação para que o modelo permaneça atualizado à medida que você adiciona ou remove componentes de infraestrutura e aplicativos da carga de trabalho.
Os dados de saúde diminuem gradualmente de valor ao longo do tempo. Para otimizar a eficiência operacional e minimizar custos, evite reter dados de saúde além de 30 dias. Se necessário, você pode arquivar dados para satisfazer os requisitos de auditoria ou em cenários que envolvam análise de padrões de longo prazo em IA para operações de TI.
Nota
Ao arquivar dados de integridade, certifique-se de associá-los ao estado de configuração do modelo. Interpretar mudanças de estado pode ser um desafio sem esse contexto.
Ligações relacionadas
- Para implementar testes de integridade no ASP.NET, consulte Verificações de integridade no ASP.NET Core.
- Para obter informações sobre métricas de monitoramento, consulte Visão geral do Azure Monitor Metrics.
- Para obter informações sobre como usar o Application Insights, consulte Application Insights.
- Para obter considerações de design e recomendações que dizem respeito a cargas de trabalho de missão crítica, consulte Modelagem de integridade e observabilidade para cargas de trabalho de missão crítica no Azure.
- Para obter uma experiência prática, consulte Projetar um modelo de integridade para sua carga de trabalho de missão crítica.