OpenTelemetry C++ package SDK client

Le package SDK client OpenTelemetry C++ est un exportateur OpenTelemetry OTLP pour C++. Ce package vous aide à intégrer l'instrumentation OpenTelemetry dans vos applications. Les données peuvent ensuite être envoyées à Instana via le protocole OTLP. Le package est généré sur Opentelemetry-cpp.

Systèmes d'exploitation pris en charge

  • Linux: Ubuntu 20.04 (GCC 9.4.0) (64 bits)
  • Windows : Windows Server 2016 (Visual Studio Enterprise 2019) (32 bits et 64 bits)

Prérequis

Vérifiez que les prérequis suivants sont remplis:

  • Linux:
    • GNU Compiler Collection (GCC) 9.4.0 ou version ultérieure est installé.

    • Git, Python 3 et Perl sont installés.

    • vcpkg est installé en exécutant la commande suivante:

      git clone https://github.com/Microsoft/vcpkg.git
      ./vcpkg/bootstrap-vcpkg.sh
      ./vcpkg/vcpkg install abseil
      ./vcpkg/vcpkg install c-ares
      ./vcpkg/vcpkg install curl[non-http,openssl,ssl]
      ./vcpkg/vcpkg install grpc[codegen]
      
  • Windows plateformes :
    • Le compilateur MSVC ou MinGW avec CMake est installé.
    • CMake ou Visual studio 2019 est installé.
      • Pour installer CMake, rendez-vous sur le site officiel de CMake et téléchargez le programme d'installation « Windows » correspondant à la dernière version stable de CMake. Choisissez la version appropriée pour votre système, 32 bits ou 64 bits.
      • Pour installer Visual Studio 2019, rendez-vous sur la page de téléchargement de Visual Studio et téléchargez le programme d'installation de Visual Studio Windows. Exécutez le programme d'installation que vous avez téléchargé. Au cours du processus d'installation, vous devez sélectionner des charges de travail, qui sont un ensemble d'outils et de composants pour des scénarios de développement spécifiques. Si vous installez le compilateur MSVC, sélectionnez la charge de travail « Développement d'applications de bureau avec l' C++ ».
    • vcpkg est installé en exécutant les commandes suivantes:
      git clone https://github.com/Microsoft/vcpkg.git
      .\vcpkg\bootstrap-vcpkg.cmd
      .\vcpkg.exe integrate
      .\vcpkg.exe install abseil
      .\vcpkg.exe install c-ares
      .\vcpkg.exe install curl
      .\vcpkg.exe install grpc
      
Remarque : pour mettre en place un environnement de travail « C++ », vous devez disposer d'un système de gestion de bibliothèques de type « C++ », tel que Vcpkg.

Installation du package

Pour installer le package, téléchargez le fichier de package, puis extrayez-le dans un répertoire local.

tar xzf opentelemetry-cpp-1.9.1-gcc9.4.0-ubuntu20.04_x64.tar.gz
unzip opentelemetry-cpp-1.9.1-vs2019-windows_x64.zip
unzip opentelemetry-cpp-1.9.1-vs2019-windows_x86.zip

Vérification de l'installation

Suivez les étapes suivantes pour vérifier si le package SDK client OpenTelemetry C++ fonctionne sur votre machine hôte :

  1. Téléchargez les exemples OpenTelemetry .

    1. Téléchargez les fichiers grpc_main.cc http_main.cc et à partir de l'exemple Opentelemetry-cpp OTeL. Sauvegardez-les ensuite dans le répertoire otlp .

    2. Téléchargez les fichiers foo_library.cc foo_libary.h et à partir de l'exemple foo_library d'Opentelemetry-cpp. Sauvegardez-les ensuite dans le répertoire otlp/foo_library .

  2. Créez un fichier CMakeLists.txt dans le répertoire otlp .

    • Linux:

      cmake_minimum_required(VERSION 3.12.0)
      
      project(sample)
      
      set(CMAKE_CXX_STANDARD 14)
      set(OTEL_CPP_DIR "/opt/otel-cppclient/opentelemetry-cpp_x64-linux")
      set(OTEL_LIBS_PATH "${OTEL_CPP_DIR}/lib")
      set(VCPKGL_LIBS_PATH "<path to vcpkg>/installed/x64-linux/lib")
      
      include_directories("${OTEL_CPP_DIR}/include")
      
      find_package(absl REQUIRED)
      find_package(Protobuf CONFIG REQUIRED)
      find_package(CURL REQUIRED)
      find_package(gRPC REQUIRED)
      
      # HTTP
      add_executable(otel_http_sample http_main.cc
          "foo_library/foo_library.cc"
      )
      
      target_link_libraries(otel_http_sample
          -pthread
          ${OTEL_LIBS_PATH}/libopentelemetry_trace.a
          ${OTEL_LIBS_PATH}/libopentelemetry_proto.a
          ${OTEL_LIBS_PATH}/libopentelemetry_http_client_curl.a
          ${OTEL_LIBS_PATH}/libopentelemetry_exporter_otlp_http.a
          ${OTEL_LIBS_PATH}/libopentelemetry_exporter_otlp_http_client.a
          ${OTEL_LIBS_PATH}/libopentelemetry_logs.a
          ${OTEL_LIBS_PATH}/libopentelemetry_otlp_recordable.a
          ${OTEL_LIBS_PATH}/libopentelemetry_common.a
          ${OTEL_LIBS_PATH}/libopentelemetry_trace.a
          ${OTEL_LIBS_PATH}/libopentelemetry_resources.a
          ${VCPKGL_LIBS_PATH}/libprotobuf.a
          ${VCPKGL_LIBS_PATH}/libcurl.a
          ${VCPKGL_LIBS_PATH}/libssl.a
          ${VCPKGL_LIBS_PATH}/libcrypto.a
          -lpthread
          -ldl
          ${VCPKGL_LIBS_PATH}/libz.a
          )
      
      # GRPC
      add_executable(otel_grpc_sample grpc_main.cc
          "foo_library/foo_library.cc"
      )
      
      target_link_libraries(otel_grpc_sample
          -pthread
          ${OTEL_LIBS_PATH}/libopentelemetry_trace.a
          ${OTEL_LIBS_PATH}/libopentelemetry_exporter_otlp_grpc.a
          -pthread
          ${OTEL_LIBS_PATH}/libopentelemetry_otlp_recordable.a
          ${OTEL_LIBS_PATH}/libopentelemetry_trace.a
          ${OTEL_LIBS_PATH}/libopentelemetry_logs.a
          ${OTEL_LIBS_PATH}/libopentelemetry_resources.a
          ${OTEL_LIBS_PATH}/libopentelemetry_metrics.a
          ${OTEL_LIBS_PATH}/libopentelemetry_common.a
          ${OTEL_LIBS_PATH}/libopentelemetry_exporter_otlp_grpc_client.a
          ${OTEL_LIBS_PATH}/libopentelemetry_proto.a
      )
      target_link_libraries(otel_grpc_sample absl::flat_hash_map absl::strings absl::str_format)
      target_link_libraries(otel_grpc_sample gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc++_alts)
      
    • Windows:

      cmake_minimum_required(VERSION 3.12.0)
      
      project(otel_sample)
      
      set(CMAKE_CXX_STANDARD 14)
      set(OTEL_CPP_DIR "C:/otel-cppclient/opentelemetry-cpp_x64-windows")
      set(OTEL_LIBS_PATH "${OTEL_CPP_DIR}/lib")
      set(CMAKE_TOOLCHAIN_FILE "<path to vcpkg>/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")
      
      include_directories("${OTEL_CPP_DIR}/include")
      
      find_package(absl REQUIRED)
      find_package(protobuf CONFIG REQUIRED)
      find_package(CURL REQUIRED)
      find_package(gRPC REQUIRED)
      
      # HTTP
      add_executable(otel_http_sample http_main.cc
          "foo_library/foo_library.cc" 
      )
      
      target_link_libraries(otel_http_sample 
          ${OTEL_LIBS_PATH}/opentelemetry_proto.lib
          ${OTEL_LIBS_PATH}/opentelemetry_http_client_curl.lib 
          ${OTEL_LIBS_PATH}/opentelemetry_exporter_otlp_http.lib
          ${OTEL_LIBS_PATH}/opentelemetry_exporter_otlp_http_client.lib
          ${OTEL_LIBS_PATH}/opentelemetry_logs.lib
          ${OTEL_LIBS_PATH}/opentelemetry_otlp_recordable.lib
          ${OTEL_LIBS_PATH}/opentelemetry_common.lib
          ${OTEL_LIBS_PATH}/opentelemetry_trace.lib
          ${OTEL_LIBS_PATH}/opentelemetry_resources.lib
          )
      target_link_libraries(otel_http_sample absl::flat_hash_map absl::strings absl::str_format)
      target_link_libraries(otel_http_sample CURL::libcurl)
      target_link_libraries(otel_http_sample protobuf::libprotobuf)
      
      # GRPC
      add_executable(otel_grpc_sample grpc_main.cc
          "foo_library/foo_library.cc" 
      )
      
      target_link_libraries(otel_grpc_sample 
          ${OTEL_LIBS_PATH}/opentelemetry_proto.lib
          ${OTEL_LIBS_PATH}/opentelemetry_proto_grpc.lib
          ${OTEL_LIBS_PATH}/opentelemetry_exporter_otlp_grpc.lib
          ${OTEL_LIBS_PATH}/opentelemetry_exporter_otlp_grpc_client.lib
          ${OTEL_LIBS_PATH}/opentelemetry_logs.lib
          ${OTEL_LIBS_PATH}/opentelemetry_otlp_recordable.lib
          ${OTEL_LIBS_PATH}/opentelemetry_common.lib
          ${OTEL_LIBS_PATH}/opentelemetry_trace.lib
          ${OTEL_LIBS_PATH}/opentelemetry_resources.lib
      )
      target_link_libraries(otel_grpc_sample absl::flat_hash_map absl::strings absl::str_format)
      target_link_libraries(otel_grpc_sample gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc++_alts)
      
  3. Générez ces exemples OpenTelemetry que vous avez téléchargés à l'étape 1 en exécutant les commandes suivantes:

    • Linux:

      cd otlp
      mkdir build
      cd ./build/
      cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_VERBOSE_MAKEFILE=ON -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=<path to vcpkg>/scripts/toolchains/linux.cmake -DCMAKE_TOOLCHAIN_FILE=<path to vcpkg>/scripts/buildsystems/vcpkg.cmake
      cmake --build .
      
    • Windows:

      cd otlp
      mkdir build
      cd .\build\
      cmake .. -DCMAKE_TOOLCHAIN_FILE="<path to vcpkg>/scripts/buildsystems/vcpkg.cmake"
      cmake --build .
      
  4. Testez ces exemples OpenTelemetry en procédant comme suit:

    1. Installez l'agent hôte d' Instana.

    2. Configurez l'agent d' Instana s pour qu'il reçoive les données d' OTLP.

    3. Sur la même machine hôte, envoyez les données d' OTLP s à l'agent hôte en exécutant l'une des commandes suivantes :

      example_otlp_grpc localhost:4317
      
      example_otlp_http localhost:4318/v1/traces
      
    4. Si vous voyez un message d'erreur, consultez le journal de l'agent hôte.