Instrumente uma aplicação C++ com o Jaeger para enviar dados de rastreamento ao Managed Service for OpenTelemetry. Após a integração, visualize mapas de topologia, rastreamentos distribuídos, transações anômalas e lentas, além da análise de SQL no console.
Recomendamos conectar sua aplicação ao Managed Service for OpenTelemetry usando o OpenTelemetry Protocol (OTLP). Essa abordagem oferece mais recursos, capacidades avançadas de rastreamento e a melhor experiência de usuário. A Alibaba Cloud fornece instruções detalhadas sobre como integrar o OpenTelemetry a uma aplicação e as melhores práticas de uso 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 dos dois caminhos:
-
Sem o Jaeger Agent: Sua aplicação envia os dados de rastreamento diretamente para o backend do Managed Service for OpenTelemetry.
-
Com o Jaeger Agent: Sua aplicação envia os dados de rastreamento para um Jaeger Agent local, que os encaminha para o backend.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um compilador C++ com GCC 4.9.2 ou superior
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 no cartão Jaeger.
-
No painel Jaeger, clique na aba Start Integration e selecione a região onde deseja relatar os dados.
NotaAo acessar uma região pela primeira vez, os recursos são inicializados automaticamente.
-
Defina Connection Type e Export Protocol e copie o endpoint.
Parâmetro
Orientação
Connection Type
Se seu service executa 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, dependendo do protocolo suportado pelo 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 na aba Access point information.
Na barra de navegação superior, selecione a região onde deseja relatar os dados. Na seção Cluster Information, ative Show Token.
-
Defina Client como Jaeger. Na coluna Related Information, copie um endpoint.
NotaSe sua aplicação executa em um ambiente de produção da Alibaba Cloud, use um endpoint de VPC. Caso contrário, utilize um endpoint público.

Executar o projeto de exemplo
Siga estas etapas para baixar o cliente Jaeger C++, compilar o projeto de exemplo, iniciar o Jaeger Agent e verificar se os rastreamentos aparecem no console.
Etapa 1: Baixar e compilar o jaeger-client-cpp
-
Baixe e extraia o código-fonte:
wget https://github.com/jaegertracing/jaeger-client-cpp/archive/master.zip && unzip master.zip -
Extraia o pacote e entre no diretório. Em seguida, compile o projeto:
NotaA compilação requer CMake e GCC 4.9.2 ou superior.
mkdir build cd build cmake .. make
Etapa 2: Iniciar o Jaeger Agent
Baixe o Jaeger Agent e inicie-o com seu endpoint:
nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>
Substitua o seguinte espaço reservado pelo valor real:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
O endpoint obtido no console. Varia conforme a região. |
|
Etapa 3: Executar 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: Verificar rastreamentos
Abra o console do Managed Service for OpenTelemetry e acesse a página Applications. Clique no nome da aplicação para visualizar seus dados de rastreamento, incluindo topologia, rastreamentos 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.
Criar 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. |
Criar spans
Spans representam operações individuais dentro de um rastreamento. Crie spans raiz para operações de nível superior e spans filhos para suboperaçõ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);
}
Depois que o Jaeger Agent estiver em execução (consulte Etapa 2: Iniciar o Jaeger Agent), os spans são relatados automaticamente ao Managed Service for OpenTelemetry.