OpenTelemetry C++ é uma solução de observabilidade interessante com funcionalidade estável e uma ampla base de colaboradores em uma base de código ativa. O New Relic é compatível com OpenTelemetry e com os benefícios que ele pode oferecer, como código à prova de futuro, colocando chamadas de instrumentação agnósticas de endpoint em vez de aderir a formatos específicos do fornecedor.
Consulte a configuração do New Relic OpenTelemetry para obter instruções detalhadas sobre como usar o OpenTelemetry para trabalhar com a linguagem de sua escolha para enviar dados para o New Relic.
O repositório OpenTelemetry C++ tem muitos bons exemplos no GitHub. Consulte seu CONTRIBUTING.md para obter mais instruções sobre como construir e usar o OpenTelemetry C++ SDK, bem como construir e executar os exemplos.
Exemplo de início rápido
Quer começar agora mesmo e ver o que o New Relic pode fazer sem precisar instrumentar seu código? Siga as etapas abaixo para ver um exemplo que fará com que você envie dados para o New Relic rapidamente.
Quando estiver pronto para iniciar o instrumentado, consulte as instruções de configuração do New Relic OpenTelemetry e o repositório OpenTelemetry C++ CONTRIBUTING.md para obter mais detalhes sobre a integração com seu código.
1. Configure seu ambiente
Certifique-se de ter os pré-requisitos descritos na documentação do New Relic OpenTelemetry.
- Execute
git clone https://github.com/open-telemetry/opentelemetry-cpp
. - Copie os arquivos de exemplo
Dockerfile.ubuntu
,docker-compose-collector.yaml
econfig.dev.yaml
para a raiz do diretório clonado na etapa 1. - Edite
config.dev.yaml
com sua chave de licença e endpoint. - Execute
docker-compose -f docker-compose-collector.yaml up
. - Verifique se os dois contêineres estão rodando, um para o coletor e outro para a aplicação C++.
2. Execute o aplicativo C++
Abra um terminal no contêiner C++ e execute os seguintes comandos:
cd /usr/src/myapp
mkdir build
cd build
rm -rf *
bash$cmake -DCMAKE_BUILD_TYPE=Debug \>-DWITH_METRICS_PREVIEW=ON \>-DWITH_LOGS_PREVIEW=ON \>-DCMAKE_CXX_FLAGS="-Wno-error=deprecated-declarations" \>-DWITH_OTLP=ON \>..cd examples
make
cd otlp
./example_otlp_http
3. Visualize seus dados
Verifique se os dados chegaram consultando os dados da sua conta New Relic:
Para ver os dados do período: Vá para one.newrelic.com > All capabilities > Query your data e insira esta consulta:
FROM Span SELECT * where telemetry.sdk.name = 'opentelemetry'Visualize o serviço OpenTelemetry procurando por
unknown_service
para obter mais detalhes.
Arquivos de amostra
docker-compose-collector.yaml
version: '3.7'services: cpp: build: context: . dockerfile: Dockerfile.ubuntu stdin_open: true environment: - OTEL_EXPORTER_OTLP_ENDPOINT=otel-collector:4318 volumes: - ./:/usr/src/myapp otel-collector: image: otel/opentelemetry-collector-contrib stdin_open: true command: ["--config=/etc/otel-collector-config.yml"] volumes: - ./config.dev.yaml:/etc/otel-collector-config.yml ports: - "1888:1888" # pprof extension - "8888:8888" # Prometheus metrics exposed by the collector - "8889:8889" # Prometheus exporter metrics - "13133:13133" # health_check extension - "9411" # Zipkin receiver - "4317:4317" # OTLP gRPC receiver - "4318:4318" # OTLP http receiver - "55680:55679" # zpages extension depends_on: - cpp
Dockerfile.ubuntu
FROM ubuntu:20.04ENV DEBIAN_FRONTEND noninteractive
## Update cache and upgrade imageRUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade
## Build environment packagesRUN apt-get install -qq -y --ignore-missing \ apt-utils \ automake \ bc \ build-essential \ bzip2 \ cmake \ curl \ git \ libcurl4-openssl-dev \ libssl-dev \ libtool-bin \ make \ pkg-config \ protobuf-compiler \ libprotobuf-dev \ python \ sudo \ tar \ zip \ unzip \ wget \ zlib1g-dev
WORKDIR /setup-tools
ADD ci/setup_ci_environment.sh /setup-toolsADD ci/setup_cmake.sh /setup-toolsADD ci/install_protobuf.sh /setup-tools
RUN /setup-tools/setup_ci_environment.sh \ && /setup-tools/setup_cmake.sh \ && /setup-tools/install_protobuf.sh
WORKDIR /usr/src/myapp
# ENTRYPOINT bashCMD /bin/bash
config.dev.yaml
exporters: newrelic: apikey: 'EDIT_TO_ADD_YOUR_KEY_HERE' timeout: 30s host_override: "otlp.nr-data.net" logging: loglevel: DEBUGreceivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 cors: allowed_origins: - '*'service: pipelines: traces: receivers: - otlp exporters: - logging - newrelic logs: receivers: - otlp exporters: - logging