OpenTelemetry C++ 클라이언트 SDK 패키지

OpenTelemetry ( C++ ) 클라이언트 SDK 패키지는 OpenTelemetry ( OTLP )의 C++ 용 익스포터입니다. 이 패키지를 사용하면 애플리케이션에 OpenTelemetry 계측 기능을 포함할 수 있습니다. 그런 다음, 해당 데이터는 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 (GNU Compiler Collection) 9.4.0 이상이 설치되어 있습니다.

    • Git, Python 3및 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 또는 CMake가 있는 MinGW 컴파일러가 설치됩니다.
    • CMake 또는 Visual Studio 2019가 설치됩니다.
      • CMake를 설치하려면 CMake 공식 웹사이트로 이동하여 최신 안정 버전의 CMake용 ‘ Windows ’ 설치 프로그램을 다운로드하십시오. 시스템에 적합한 버전 (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
      
참고: C++ 작업 환경을 구축하려면 Vcpkg와 같은 C++ 라이브러리 관리 시스템이 필요합니다.

패키지 설치

패키지를 설치하려면 패키지 파일을 다운로드한 후 로컬 디렉토리에 압축을 푸십시오.

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

설치 확인

호스트 컴퓨터에서 OpenTelemetry C++ 클라이언트 SDK 패키지가 정상적으로 작동하는지 확인하려면 다음 단계를 수행하십시오:

  1. OpenTelemetry 예제를 다운로드하십시오.

    1. Opentelemetry-cpp 예제 ( OTeL )에서 및 http_main.cc grpc_main.cc 파일을 다운로드하세요. 그런 다음 otlp 디렉토리에 저장하십시오.

    2. Opentelemetry-cpp 예제 foo_library에서 및 foo_libary.h foo_library.cc 파일을 다운로드하세요. 그런 다음 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단계에서다운로드한 이러한 OpenTelemetry 예제를 빌드하십시오.

    • 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. 다음 단계를 완료하여 이러한 OpenTelemetry 예제를 테스트하십시오.

    1. Instana 호스트 에이전트를 설치하십시오.

    2. Instana 에이전트를 구성하여 OTLP 데이터를 수신하도록 설정합니다.

    3. 동일한 호스트 머신에서 다음 명령어 중 하나를 실행하여 OTLP 데이터를 호스트 에이전트로 전송합니다:

      example_otlp_grpc localhost:4317
      
      example_otlp_http localhost:4318/v1/traces
      
    4. 오류 메시지가 표시되면 호스트 에이전트 로그를 확인하십시오.