Este repositório é uma extensão do projeto poc-hyperf-observability, com o objetivo principal de demonstrar o funcionamento do rastreamento distribuído entre os microsserviços. Todos os conceitos documentados no repositório mencionado acima foram utilizados para ilustrar esse processo. Antes de iniciar a leitura deste repositório, é importante ler o primeiro repositório, pois muitos conceitos aplicados aqui foram previamente explicados no outro repositório no Github.
O rastreamento distribuído é uma técnica utilizada em sistemas distribuídos para monitorar e registrar o fluxo de informações entre diferentes componentes ou microsserviços que trabalham juntos para fornecer uma funcionalidade específica. Em um sistema distribuído, várias partes do processamento são divididas entre diferentes serviços, e o rastreamento distribuído permite acompanhar a execução e o desempenho desses serviços de forma coordenada.
O rastreamento distribuído envolve a geração de identificadores únicos para transações ou solicitações à medida que passam por diferentes serviços. Esses identificadores permitem rastrear o caminho da solicitação através dos diferentes componentes do sistema distribuído, permitindo que os desenvolvedores identifiquem e resolvam problemas de desempenho, depuração e monitoramento.
Foi desenvolvido um cenário fictício para demonstrar o conceito de rastreamento distribuído. Nesse cenário, existem três microsserviços que compartilham informações entre si. A seguir, apresentamos um exemplo ilustrativo desse cenário:
- O serviço A recebe uma requisição.
- Após receber a requisição, o serviço A envia uma solicitação para o serviço B processar as informações.
- Quando o serviço B processa as informações, ele envia os dados para o serviço C, que os armazena no banco de dados.
Podemos observar que o fluxo de informações passa por vários serviços antes de ser concluído. Abaixo, temos um diagrama visual do fluxo:
A seguir, apresentam-se os requisitos e etapas fundamentais para a configuração do seu ambiente a fim de executar o projeto de exemplo.
- Docker
- Git
- Make
A maneira recomendada de instalar este projeto é seguindo estas etapas:
- Realize o clone do projeto para a sua máquina
git clone https://github.com/ReinanHS/poc-distributed-tracing-php.git
- Acessar as pastas do projeto
cd poc-distributed-tracing-php
docker compose up
Selecionei algumas ferramentas que iremos utilizar o decorrer desse repositório para exemplificar o uso da observabilidade dentro do framework do Hyperf.
O monitoramento de infraestrutura é uma prática fundamental para garantir o bom funcionamento de sistemas e serviços. Ao acompanhar de perto o desempenho e o estado da infraestrutura, é possível identificar problemas, otimizar recursos.
Uma das principais ferramentas de observabilidade é o Prometheus. Trata-se de um sistema de monitoramento e alerta, capaz de coletar e armazenar métricas sobre a infraestrutura. O Prometheus é altamente escalável e possui uma arquitetura flexível, o que o torna ideal para ambientes distribuídos. Ele permite a coleta de métricas em tempo real, o que possibilita uma visão detalhada do desempenho do sistema. Além disso, o Prometheus oferece recursos avançados, como consultas e alertas personalizados, permitindo uma análise profunda dos dados coletados.
- Acesse a URL http://localhost:9090 para ter acesso de informações que estão disponíveis no Promotheus.
Outra ferramenta amplamente utilizada é o Grafana. O Grafana é uma plataforma de visualização de dados que se integra perfeitamente com o Prometheus e outras fontes de dados.
Com o Grafana, é possível criar painéis personalizados e intuitivos, exibindo métricas e gráficos em tempo real. Isso facilita a compreensão e a análise dos dados de monitoramento da infraestrutura, possibilitando a detecção rápida de problemas e tendências.
- Acesse a URL http://localhost:3000 para ter acesso de informações que estão disponíveis no Grafana.
- Utilize o usuário admin e a senha secret para acessar as informações.
- Na dashboard substitua o valor da variável
app_name
porotel_service_a
Veja um exemplo das informações que estão disponíveis nesse serviço:
Em sistemas distribuídos complexos, compreender o fluxo das solicitações através de diferentes componentes e serviços pode ser um desafio. É nesse cenário que as ferramentas de rastreamento distribuído desempenham um papel fundamental, permitindo a visibilidade e a compreensão do comportamento do sistema como um todo.
Uma das ferramentas mais populares de rastreamento distribuído é o Jaeger. O Jaeger é um sistema de código aberto que facilita a rastreabilidade de solicitações complexas em ambientes distribuídos. Ele fornece uma visão detalhada de cada solicitação à medida que atravessa os diferentes serviços e componentes envolvidos.
- Acesse a URL http://localhost:16686 para ter acesso de informações que estão disponíveis no Jaeguer.
- No menu clique no botão "System Architecture"
- Clique no botão "DAG"
Essas serão as informações que serão exibidas para você após finalizar as etapas anteriores:
Outra ferramenta importante é o Zipkin. O Zipkin é outra plataforma de rastreamento distribuído de código aberto que oferece recursos semelhantes ao Jaeger. Ele permite visualizar o fluxo de solicitações em um sistema distribuído, rastreando o tempo gasto em cada serviço e identificando possíveis gargalos ou problemas de desempenho.
- Acesse a URL http://127.0.0.1:9411 para ter acesso de informações que estão disponíveis no ZipKin.
- No menu clique no botão "Dependencies"
- Clique no botão "Run Query"
Em ambientes de TI complexos, onde diversos sistemas e componentes estão em funcionamento, o gerenciamento e a centralização de logs se tornam essenciais para manter a visibilidade e o controle sobre o funcionamento do sistema como um todo. As ferramentas de gerenciamento de logs ajudam a coletar, armazenar e analisar registros de várias fontes, permitindo uma visão unificada e facilitando a identificação de problemas e anomalias.
Um ferramenta de destaque é o Graylog, que oferece recursos abrangentes de gerenciamento e centralização de logs. O Graylog permite coletar, armazenar e analisar logs de várias fontes, incluindo aplicativos, servidores e dispositivos de rede. Ele possui uma interface intuitiva, com recursos de pesquisa avançada, filtragem e alertas personalizados.
- Acesse a URL http://localhost:9000 para ter acesso de informações que estão disponíveis no Graylog.
- Utilize o usuário admin e a senha admin para acessar as informações.
- Clicar em System > Inputs
- Selecionar o tipo de input como GELF TCP
- Clicar em Launch new input
- Selecionar o node que vamos utilizar
- Adicione um título
- Escolha a porta 12201
- Salve as informações
Após fazer essas configurações remova os comentários das configurações do log dos serviços no arquivo common-services.yml
.
Use o comando abaixo para iniciar o serviço:
docker compose -f=docker-graylog.yml up
Esse projeto roda nos seguintes softwares:
- Git 2.33+
- Hyperf
- ZipKin
- Jaeger
- Prometheus
- Grafana
- MySQL
- Redis
- Graylog
Por favor, veja CHANGELOG para obter mais informações sobre o que mudou recentemente.
Quer fazer parte desse projeto? Clique AQUI e leia como contribuir.
Esse projeto está sob licença. Veja o arquivo LICENÇA para mais detalhes.