
Quando o aplicativo era monolítico e de repente, uma vez distribuído, outro desconhecido é adicionado à fórmula de cálculo da disponibilidade - a rede. Devido a problemas com chamadas entre componentes, os aplicativos geralmente caem e começam a tremer. E descobrir as razões do trabalho instável de um aplicativo distribuído é outra tarefa. Uma bagunça adicional na estrutura do aplicativo é feita pelos kubernetes condicionais, que, a seu critério, podem distribuir arbitrariamente pods condicionais por nós condicionais. Estou escrevendo "condicional", porque no lugar dos kubernetes pode haver Swarm e Openshift, e outros e outros.
Quero dizer, sem visualização normal, descobrir onde está a temperatura pode ser muito difícil. Abaixo, minha idéia dos recursos potenciais das ferramentas que podem desenhar um mapa de aplicativos e destacar os locais para a aplicação de uma bananeira, bem como uma lista dessas mesmas ferramentas com capturas de tela.
Vamos começar a descobrir o que é desejável ver no mapa do aplicativo, consideraremos as abordagens de monitoramento e passaremos a fornecedores específicos.
O que eu quero ver no mapa do aplicativo
A primeira coisa que vem à mente é a capacidade de agrupar nós de aplicativos por determinados critérios. Por exemplo, eu digo que neste grupo eu tenho um front-end, e neste back-end ou aqui eu tenho instâncias do serviço Payments e aqui Shipping. Bem, e assim por diante. E as pessoas responsáveis por essa ou aquela parte veem imediatamente a imagem completa do que está acontecendo em sua área de responsabilidade.
O segundo é o layout do aplicativo em níveis com a capacidade de ver, por exemplo, em termos de infraestrutura, serviço, instâncias de serviço etc. Assim como no primeiro caso, ajuda a identificar a camada do problema.
Terceiro , as saídas e entradas desses nós, incluindo as conexões entre eles. Nessas seqüências, gostaria de ver os sinais dourados que o Google descreve no Site 6 Engenharia de confiabilidade no capítulo 6 do Monitoramento de sistemas distribuídos. Já
publiquei uma tradução deste capítulo
em um blog no Medium . E os sinais são os seguintes: latência, tráfego (taxa de transferência), erros (taxa de erro) e saturação (saturação).
Talvez eu não tenha levado em conta alguma coisa. Por favor, vá aos comentários se achar que outras coisas importantes estão faltando.
Quais são as diferentes abordagens de monitoramento
Não sei o que mais pode ser chamado, portanto chamarei as abordagens de agente e monitoramento sem agente. Agora vou explicar hu a partir hu.
Monitoramento de agente
Monitoramento de agente significa a necessidade de implementar agentes de monitoramento especiais em um aplicativo controlado. Os agentes incorporam o ID de rastreamento nos cabeçalhos dos pacotes.
Esse tipo inclui soluções de monitoramento APM e todas as que são incorporadas injetando SDKs no código do aplicativo.
Prós: ajuda a encontrar a causa raiz do problema, os cabeçalhos podem rastrear com precisão o caminho das transações.
Contras: possíveis custos indiretos devido a uma modificação do algoritmo do aplicativo, a incapacidade de incorporar em aplicativos herdados, suporte para um conjunto limitado de linguagens de programação
Monitoramento sem agente
Monitoramento sem modificação do aplicativo. Esse tipo inclui logs, rastreamento no nível do sistema operacional e monitoramento do tráfego de rede.
Prós: o monitoramento da cobertura de várias estruturas e linguagens de programação pode funcionar onde a injeção de ID de rastreamento não é possível, não há sobrecarga em um aplicativo controlado.
Contras: sem um ID de rastreamento, pode ser difícil restaurar o contexto de uma transação comercial, a incapacidade de ouvir o tráfego se o encapsulamento SSL estiver configurado e não houver chaves,
O que os fornecedores oferecem
Vendorov foi desmontado com base em agente / sem agente, você pode solicitar outras características nos comentários ou em uma mensagem pessoal. A maior experiência que tive com Instana, Appdynamics e New Relic, se você quiser procurar, posso ajudar com licenças de demonstração por um período superior a 14 dias (como elas oferecem em seus sites por padrão).
Monitoramento de agente
Instana é uma ferramenta para monitorar sistemas distribuídos. Um recurso importante é um agente único para todas as tecnologias suportadas e a coleta de métricas uma vez por segundo.
Appdynamics é uma solução conhecida para monitoramento de APM. Capaz de construir um mapa de aplicativos com base em chamadas entre componentes de aplicativos. O monitoramento do agente é necessário para monitorar as chamadas.
A New Relic é uma concorrente direta da Appdynamics. A principal diferença é que apenas o monitoramento da nuvem é possível (os agentes também são instalados nos servidores de destino). Constrói um mapa de aplicativos com base em chamadas.
Dynatrace é uma ferramenta de monitoramento de APM. Ele suporta o monitoramento de várias linguagens de programação e pode funcionar na nuvem e no local.
AWS X-Ray - monitore aplicativos hospedados na AWS. Oferece suporte à visualização do mapa do aplicativo, requer a instalação de seu próprio SDK.
O OpenTracing é uma API para instrumentação de aplicativos distribuídos. Muitas
soluções comerciais e não comerciais são baseadas nessa API.
Jaeger é uma ferramenta gratuita de negociação de código aberto. Construído com base no OpenTracing.
O Datadog APM é uma ferramenta comercial para monitorar aplicativos distribuídos. Funciona com base no OpenTracing mencionado.

Monitoramento sem agente
O OpenZipkin é uma ferramenta gratuita para rastrear aplicativos distribuídos. Uma característica de seu trabalho é a coleta de dados sobre chamadas usando as bibliotecas de instrumentação e o envio posterior desses dados ao coletor OpenZipkin.
O Linkerd é uma ferramenta gratuita para rastrear chamadas dentro do aplicativo. É um complemento para o OpenZipkin, é instalado na infraestrutura do kubernetes como um contêiner lateral.
O enviado é uma ferramenta gratuita. Funciona como um proxy para o qual os dados de chamada são enviados entre os componentes do aplicativo. Não há interface web própria, os dados podem ser recebidos via solicitações HTTP GET ou enviados para statsd.
Netsil é uma ferramenta para monitorar aplicativos distribuídos com base na escuta do tráfego. Funciona independentemente do idioma em que o aplicativo está escrito.

Diga quem usou o quê e que impressão foi deixada.