安裝 OTel C++ 用戶端 SDK 套件

OTel C++ Client SDK 套件是適用於 C++ 的 OpenTelemetry OTLP 匯出程式。 此套件可協助您在應用程式中包括 OpenTelemetry Instrumentation。 然後,可以透過 OTLP 通訊協定將資料傳送至 Instana。 套件以 Opentelemetry-cpp為建置基礎。

支援的作業系統

  • Linux: Ubuntu 20.04 (GCC 9.4.0) (64 位元)
  • Windows: Windows Server 2016 (Visual Studio Enterprise 2019) (32 位元和 64 位元)

必要條件

確保符合下列必要條件:

  • Linux:
    • 已安裝 gcc 9.4.0 或更新版本。

    • 已安裝 Git、 Python3及 Perl 。

    • vcpkg 是透過執行下列指令來安裝:

      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 平台:
    • 已安裝 msvc 或 mingw 編譯器與 cmake。
    • 已安裝 CMake 或 Visual Studio 2019。
      • 若要安裝 CMake ,請跳至官方 CMake 網站,並下載 Windows 安裝程式,以取得最新穩定版本的 CMake。 選擇適合您系統的版本 (32 位元或 64 位元)。
      • 若要安裝 Visual Studio 2019 ,請跳至 Visual Studio 下載頁面,並下載 Visual Studio Windows 安裝程式。 執行您下載的安裝程式。 在安裝程序期間,您需要選取工作量,工作量是一組適用於特定開發實務範例的工具和元件。 如果您安裝 msvc 編譯器,請確保選取「具有 C++ 的桌面開發」工作量。
    • vcpkg 是透過執行下列指令來安裝:
      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
      

安裝套件

若要安裝套件,請下載套件檔,然後將它解壓縮至本端目錄。

驗證安裝

若要驗證 OTel C++ 用戶端 SDK 套件是否在主機中運作,請遵循下列步驟:

  1. 下載 OTel 範例。

    1. Opentelemetry-cpp 範例 OTeL下載 grpc_main.cchttp_main.cc 檔案。 然後,將它們儲存至 otlp 目錄。

    2. Opentelemetry-cpp example foo_library下載 foo_library.ccfoo_libary.h 檔案。 然後,將它們儲存至 otlp/foo_library 目錄。

  2. otlp 目錄中建立 CMakeLists.txt 檔案。

    • 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. 透過執行下列指令,建置您在步驟 1 中下載的這些 OTel 範例:

    • 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. 完成下列步驟來測試這些 OTel 範例:

    1. 安裝 Instana 主機代理程式。

    2. 配置 Instana 代理程式以接收 OTLP 資料

    3. 執行下列任一指令,將 OTLP 資料傳送至相同主機上的主機代理程式:

      example_otlp_grpc localhost:4317
      
      example_otlp_http localhost:4318/v1/traces
      
    4. 如果您看到任何錯誤訊息,請檢查主機代理程式日誌。