Detetive - rastreamento de link
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1 Introdução ao rastreamento de links
Na construção de microsserviços de grandes sistemas, um sistema é dividido em vários módulos. Esses módulos são responsáveis por diferentes funções e são combinados em um sistema que pode fornecer funcionalidades ricas. Nesta arquitetura, uma solicitação geralmente envolve vários serviços. As aplicações da Internet são construídas em diferentes conjuntos de módulos de software. Esses módulos de software podem ser desenvolvidos por diferentes equipes, podem ser implementados usando diferentes linguagens de programação e podem ser distribuídos em milhares de servidores em vários centros de dados diferentes, o que significa que também haverá. alguns problemas com esta forma arquitetônica:
- Como encontrar problemas rapidamente?
- Como determinar o escopo do impacto da falha?
- Como resolver as dependências de serviço e a racionalidade das dependências?
- Como analisar problemas de desempenho de links e planejamento de capacidade em tempo real?

O rastreamento de link distribuído (rastreamento distribuído) serve para restaurar uma solicitação distribuída para um link de chamada, realizar registro, monitoramento de desempenho e exibir centralmente o status de chamada de uma solicitação distribuída. Por exemplo, o tempo gasto em cada nó de serviço, qual máquina a solicitação atinge, o status da solicitação de cada nó de serviço, etc.
As tecnologias comuns de rastreamento de link incluem o seguinte:
- gato Código aberto da Dianping e baseado emJava A plataforma de monitoramento de aplicativos em tempo real desenvolvida inclui monitoramento de aplicativos e monitoramento de negócios em tempo real. integrado A solução é implementar o monitoramento através de enterramento de códigos, como interceptadores, filtros, etc. Muito intrusivo ao código, integração custo mais elevado. O risco é maior.
- zíper Depende deTwitterO sistema de rastreamento distribuído de código aberto da empresa é usado para coletar dados de tempo de serviços para resolver micro- Os problemas de latência na arquitetura de serviços incluem: coleta, armazenamento, pesquisa e apresentação de dados.Este produto combinadetetive-de-nuvem-de-primaveraÉ relativamente simples de usar e fácil de integrar, mas suas funções são relativamente simples.
- apontar Localizar É uma ferramenta coreana de análise de cadeia de chamadas e monitoramento de aplicativos de código aberto baseada em injeção de bytecode.CaracterísticasEle suporta uma variedade de plug-ins.Interface do usuárioFunções poderosas, sem intrusão de código no final do acesso.
- caminhada no céu
Caminhada no céu É uma ferramenta local de análise de cadeia de chamadas e monitoramento de aplicativos de código aberto baseada em injeção de bytecode.A característica é que suporta muitostipo de plug-in,Interface do usuário A função é forte e não há intrusão de código no final do acesso.Já aderiuApacheincubadora. - investigar
Nuvem de primavera Fornece soluções de rastreamento de links em sistemas distribuídos.
Perceber:
SpringCloud alibaba
A pilha de tecnologia não fornece sua própria tecnologia de rastreamento de link, podemos usar
Detetive +
Zinquim
Para criar uma solução de rastreamento de links
2 Detetivecomeçando
2.1 Detetiveintroduzir
A principal função do SpringCloud Sleuth é fornecer soluções de rastreamento em sistemas distribuídos.ele toma emprestado pesadamente de
Google
Elegante
Vamos primeiro entender o design de
investigar
termos e conceitos relacionados em .
- Vestígio
por um grupoIdentificação do rastreamentoidênticoPeríodo Concatenado para formar uma estrutura em árvore.Para implementar o rastreamento de solicitações, quando uma solicitação chega ao sistema distribuídoendpoint de entrada, a estrutura de rastreamento de serviço só precisa criar um identificador exclusivo para a solicitação (ou seja,Identificador de rastreamento), enquanto no sistema distribuído Ao circular dentro do sistema, o framework sempre fica passando esse valor único até que toda a requisição seja retornada.Então podemos usar isso apenasUm identificador conecta todas as solicitações para formar um link de solicitação completo. - Período Representa um conjunto básico de unidades de trabalho.Para contar o atraso de cada unidade de processamento, quando a solicitação chega a cada componente do serviçotempo, também através de um identificador único (ID de extensão ) para marcar seu início, processo específico e fim.passarID de extensãoo começo e o fim deCarimbo de data e hora final, você pode contar operíodo Além do horário da chamada, também podemos obter o nome do evento.Solicitar informações, etc.metadados.
- Anotação
Use-o para registrar eventos durante um período de tempo. Notas importantes para uso interno:
cs(Cliente Envia) O cliente emite uma solicitação e inicia a vida de uma solicitação
senhor(Servidor recebido) O servidor recebe a solicitação e começa a processá-la, senhor-cs = Latência da rede (tempo para chamada de serviço)
sem(Servidor Enviar) O servidor concluiu o processamento e está pronto para ser enviado ao cliente,ss - sr = Solicitar tempo de processamento no servidor
cr(Cliente recebido) O cliente recebe a resposta do servidor e a solicitação termina. cr - sr =tempo total solicitado

2.2 Detetivecomeçando
Nome do microsserviço
, traceId, espanhol,
Se os resultados do rastreamento de link devem ser enviados para uma plataforma de terceiros
[api-gateway,3977125f73391553,3977125f73391553,falso]
[ordem de serviço,3977125f73391553,57547b5bf71f8242,falso]
[serviço-produto,3977125f73391553,449f5b3f3ef8d5c5,falso]
Em seguida, integre através de casos de projetos anteriores
investigar
, complete a redação do caso introdutório.
Modificar a introdução do projeto pai
investigar
confiar
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
Após iniciar o microsserviço e chamar a interface, podemos observar no console
investigar
A saída do log de
onde c61d4a753370cbeb está
Identificador de rastreamento
, 0e06445e055ed94f é
SpanId, há um TraceId global chamado em sequência para unir os links de chamada. Ao analisar cuidadosamente os logs de cada microsserviço, não é difícil ver o processo específico da solicitação.
Visualizar arquivos de log não é um bom método. Quando houver cada vez mais microsserviços, haverá cada vez mais arquivos de log que poderão agregar os logs e realizar exibição visual e recuperação de texto completo.
3 ZipkinIntegração
3.1 ZipKinintroduzir
Zipkin é
Twitter
Um projeto de código aberto baseado em
Implementado pelo Google Dapper, dedica-se a coletar dados de temporização de serviços para resolver problemas de latência em arquitetura de microsserviços, incluindo dados
Colete, armazene, pesquise e exiba
。
Podemos usá-lo para coletar dados de rastreamento de links de solicitação em cada servidor e usar a interface REST API que ele fornece para nos ajudar a consultar os dados de rastreamento para implementar o programa de monitoramento do sistema distribuído, de modo a descobrir prontamente o aumento de atraso em problemas de alto nível e identificar a origem dos gargalos de desempenho do sistema.
Além da API orientada ao desenvolvimento
Além da interface, ele também oferece conveniência
Os componentes da IU nos ajudam a pesquisar intuitivamente informações de rastreamento e analisar os detalhes do link da solicitação. Por exemplo, podemos consultar o tempo de processamento de cada solicitação do usuário dentro de um determinado período de tempo.
Zipkin fornece armazenamento de dados conectável:
Em memória
、
MySQL
、
Cassandra
assim como
Pesquisa elástica
。

A imagem acima mostra
Zipkin
infra-estrutura, que consiste principalmente em
4
Composto por componentes principais:
- Colecionador: Componente coletor, usado principalmente para processar informações de rastreamento enviadas de sistemas externos e converter essas informações em Zipkinprocessado internamente Períodoformato para suportar armazenamento, análise, exibição e outras funções subsequentes.
- Armazenar: Componente de armazenamento, que processa principalmente as informações de rastreamento recebidas pelo coletor. Por padrão, essas informações serão armazenadas na memória.Também podemos modificar essa estratégia de armazenamento para armazenar informações de rastreamento no banco de dados usando outros componentes de armazenamento.
- API RESTful:API Componente, que é usado principalmente para fornecer interface de acesso externo.Por exemplo, exibir informações de rastreamento para o cliente ouAcesso ao sistema para monitoramento, etc.
- Interface da Web:Interface do usuário componente, baseado emAPI O aplicativo da camada superior implementado pelo componente.passarInterface do usuárioOs usuários de componentes podem consultar e analisar de maneira conveniente e intuitivaAnalise as informações de rastreamento.
Zipkin é dividido em duas extremidades, uma é
Zipkin
Do lado do servidor, um é
Cliente Zipkin, o cliente é a aplicação de microsserviços. O cliente irá configurar o servidor
URL
O endereço será configurado no microsserviço assim que ocorrer uma chamada entre serviços.
O ouvinte do Sleuth escuta e gera o correspondente
Vestígio
e
Período
As informações são enviadas ao servidor.
3.2 ZipKinInstalação do servidor
Não.
1
etapa
:
download
ZipKin
de
jar
Bolsa
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
Visite o URL acima para obter umjarBolsa, é issoZipKinlado do servidorjarBolsa
Não.
2
etapa
:
Através da linha de comando, digite o seguinte comando para iniciar
Servidor ZipKin
java -jar zipkin-server-2.12.9-exec.jar
Não.
3
Passo: Acesso via navegador
http://localhost:9411
acesso

3.3 ZipkinIntegração do cliente
Cliente ZipKin e
investigar
A integração é muito simples, basta adicionar suas dependências e configuração no microsserviço.
Não.
1
Etapa: adicionar dependências em cada microsserviço
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
Não.
2
Etapa: Adicionar configuração
base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
Não.
3
etapa
:
Acesse a interface de microsserviço
http://localhost:7000/order-serv/order/prod/1
Não.
4
etapa
:
acesso
zíper
de
Interface do usuário
interface, efeito de observação

Não.
5
Passo: Clique em um dos registros para observar o roteiro detalhado de uma visita.

4 ZipKinPersistência de dados
O Zipkin Server salvará as informações dos dados de rastreamento na memória por padrão, mas esse método não é adequado para ambientes de produção.
Zipkin suporta dados de rastreamento persistentes para
mysql
banco de dados ou
pesquisa elástica
meio.
4.1 usarmysqlImplementar persistência de dados
Não.
1
etapa
:
criar
mysql
ambiente de dados
NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`name` VARCHAR ( 255 ) NOT NULL,
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for
ALTER TABLE zipkin_spans ADD INDEX ( `name` ) COMMENT 'for getTraces and
ALTER TABLE zipkin_spans ADD INDEX ( `start_ts` ) COMMENT 'for getTraces
NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR ( 255 ) NOT NULL COMMENT 'BinaryAnnotation.key or
Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
`a_timestamp` BIGINT COMMENT 'Used to implement TTL;
Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
`endpoint_ipv6` BINARY ( 16 ) COMMENT 'Null when Binary/Annotation.endpoint
is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
`endpoint_service_name` VARCHAR ( 255 ) COMMENT 'Null when
Binary/Annotation.endpoint is null'
) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp` ) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id`, `span_id` ) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX ( `endpoint_service_name` ) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX ( `a_type` ) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX ( `a_key` ) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id`, `span_id`, `a_key` ) COMMENT 'for dependencies job';
NOT EXISTS zipkin_dependencies ( `day` DATE NOT NULL, `parent` VARCHAR ( 255 ) NOT NULL, `child` VARCHAR ( 255 ) NOT NULL, `call_count` BIGINT ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_dependencies ADD UNIQUE KEY ( `day`, `parent`, `child` );

Não.
2
etapa
:
na inicialização
Servidor ZipKin
quando
,
Os dados especificados são salvos
mysql
Informação
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --
MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root -
4.2 usarpesquisa elásticaImplementar persistência de dados
Não.
1
etapa
:
download
pesquisa elástica
Link para Download:
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4
Não.
2
etapa
:
comece
pesquisa elástica
Visite: localhost:9200
Se precisar de visualização, você pode instalar o Kibana
Não.
3
etapa
:
na inicialização
Servidor ZipKin
Ao especificar os dados a serem salvos
pesquisa elástica
Informação
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200
Quanto ao uso visual do elasticsearch, você pode consultar:Instalação e uso do Elasticsearch no Windows e instalação do blog kibana_windowskibanna-CSDN