Instrumente uma aplicação C++ com o Jaeger para reportar dados de rastreamento ao Managed service for OpenTelemetry. Após a integração, você pode visualize mapas de topologia, rastreamentos distribuídos, transações anômalas e lentas, além de análises SQL no console.
Recomendamos conectar sua aplicação ao Managed service for OpenTelemetry por meio do OpenTelemetry Protocol (OTLP). Dessa forma, você terá acesso a mais recursos, capacidades de rastreamento mais avançadas e a melhor experiência de uso. A Alibaba Cloud fornece instruções detalhadas sobre como integrar o OpenTelemetry a uma aplicação, bem como as melhores práticas de uso do OpenTelemetry para ajudar você a começar rapidamente com o Managed service for OpenTelemetry. Para mais informações, consulte Preparações.
Como funciona o envio de dados
Os dados de rastreamento fluem da sua aplicação para o Managed service for OpenTelemetry por um de dois caminhos:
-
Sem Jaeger Agent: a aplicação envia os dados de rastreamento diretamente ao backend do Managed service for OpenTelemetry.
-
Com Jaeger Agent: a aplicação envia os dados de rastreamento a um Jaeger Agent local, que os encaminha ao backend.
Pré-requisitos
Antes de começar, certifique-se de que você possui:
Um compilador C++ com GCC 4.9.2 ou posterior
CMake instalado
Um endpoint obtido no console do Managed service for OpenTelemetry (consulte Obter um endpoint)
Obter um endpoint
Obtenha um endpoint no console do Managed service for OpenTelemetry.
Novo console
Faça login no console do Managed service for OpenTelemetry.
No painel de navegação à esquerda, clique em Integration Center.
Na página Integration Center, na seção Open Source Frameworks, clique em o cartão Jaeger.
-
No painel Jaeger, clique em a aba Start Integration e selecione a região onde deseja reportar os dados.
NotaAo acessar uma região pela primeira vez, os recursos são inicializados automaticamente.
-
Defina Connection Type e Export Protocol e, em seguida, copie o endpoint.
Parâmetro
Orientação
Connection Type
Se o seu service é executado na Alibaba Cloud na região selecionada, selecione Alibaba Cloud VPC Network. Caso contrário, selecione Public Network.
Export Protocol
Selecione HTTP (recomendado) ou gRPC, de acordo com o protocolo compatível com o seu cliente.

console antigo
Faça login no console do Managed service for OpenTelemetry.
No painel de navegação à esquerda, clique em Cluster Configurations. Na página exibida, clique em a aba Access point information.
Na barra de navegação superior, selecione a região onde deseja reportar os dados. Na seção Cluster Information, ative Show Token.
-
Defina Client como Jaeger. Na coluna Related Information, copie um endpoint.
NotaSe a aplicação é executada em um ambiente de produção da Alibaba Cloud, utilize um endpoint VPC. Caso contrário, utilize um endpoint público.

Execute o projeto de exemplo
Siga estas etapas para baixe o cliente Jaeger para C++, compilar o projeto de exemplo, iniciar o Jaeger Agent e verifique se os rastreamentos aparecem no console.
Etapa 1: Baixe e compile o jaeger-client-cpp
-
Baixe e extraia o código-source:
wget https://github.com/jaegertracing/jaeger-client-cpp/archive/master.zip && unzip master.zip -
Extraia o pacote e acesse o diretório. Em seguida, compile o projeto:
NotaA compilação requer CMake e GCC 4.9.2 ou posterior.
mkdir build cd build cmake .. make
Etapa 2: Iniciar o Jaeger Agent
Baixe o Jaeger Agent e inicie-o com o seu endpoint:
nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>
Substitua o placeholder a seguir pelo seu valor real:
|
Placeholder |
Descrição |
Exemplo |
|
|
O endpoint obtido no console. Varia conforme a região. |
|
Etapa 3: Execute o exemplo
No diretório build, execute o exemplo incluído:
./app ../examples/config.yml
Quando reporter.logSpans está definido como true no arquivo de configuração, a aplicação registra cada span no console.
Etapa 4: Verifique os rastreamentos
Abra o console do Managed service for OpenTelemetry e acesse a página Applications. Clique em o nome da aplicação para visualize os dados de rastreamento, incluindo topologia, traces e análise de transações. Se os rastreamentos não aparecerem em alguns minutos, verifique se o Jaeger Agent foi iniciado sem erros e se o endpoint está correto.
Instrumentar sua aplicação
Para integrar o rastreamento Jaeger à sua própria aplicação C++, crie um Tracer, configure-o e crie spans para capturar operações.
Crie um Tracer
Um Tracer gera spans que representam unidades de trabalho. Inicialize-o a partir de um arquivo de configuração yaml e registre-o como o tracer global:
#include <jaegertracing/Tracer.h>
#include <yaml-cpp/yaml.h>
void setUpTracer(const char* configFilePath)
{
auto configYAML = YAML::LoadFile(configFilePath);
// Parse the Jaeger configuration from the YAML file.
auto config = jaegertracing::Config::parse(configYAML);
// Create a tracer with a service name and console logger.
auto tracer = jaegertracing::Tracer::make(
"example-service", config, jaegertracing::logging::consoleLogger());
// Register the tracer as a global instance.
opentracing::Tracer::InitGlobal(
std::static_pointer_cast<opentracing::Tracer>(tracer));
}
Utilize a seguinte configuração yaml:
disabled: false
reporter:
logSpans: true
sampler:
type: const
param: 1
|
Parâmetro |
Descrição |
|
|
Defina como |
|
|
Defina como |
|
|
Estratégia de amostragem. |
|
|
Parâmetro de amostragem. |
Crie spans
Spans representam operações individuais dentro de um trace. Crie spans raiz para operações de nível superior e spans filhos para sub-operações:
#include <opentracing/tracer.h>
// Create a child span under an existing parent span.
void tracedSubroutine(const std::unique_ptr<opentracing::Span>& parentSpan)
{
auto span = opentracing::Tracer::Global()->StartSpan(
"tracedSubroutine",
{ opentracing::ChildOf(&parentSpan->context()) });
}
// Create a root span (no parent).
void tracedFunction()
{
auto span = opentracing::Tracer::Global()->StartSpan("tracedFunction");
tracedSubroutine(span);
}
Após o Jaeger Agent estar em execução (consulte Etapa 2: Iniciar o Jaeger Agent), os spans são reportados automaticamente ao Managed service for OpenTelemetry.