본문 바로가기
WIKI 기술 지식 베이스

C++ 애플리케이션 트레이싱 (Tracing C++ Applications)

원문 보기 위키 갱신

C++ 애플리케이션에 dd-trace-cpp를 설치하고 테스트용 예제 애플리케이션을 빌드하는 방법을 설명해요.

출처: 문서

본문

참고: C++는 자동 계측을 위한 통합을 제공하지 않지만, Envoy나 Nginx 같은 프록시 트레이싱에 사용돼요.

호환성 요구사항 (Compatibility requirements)

C++ SDK는 빌드에 C++17 툴체인이 필요해요. Datadog SDK 호환성 요구사항과 프로세서 아키텍처 지원 전체 목록은 호환성 요구사항 페이지를 참고하세요.

시작하기 (Getting started)

시작하기 전에 Agent를 이미 설치·구성했는지 확인하세요.

애플리케이션 계측하기 (Instrument your application)

dd-trace-cpp 테스트에 사용할 수 있는 예제 애플리케이션을 소개할게요. 이 애플리케이션은 기본 설정으로 트레이서 인스턴스를 만들고, my-service라는 서비스 이름으로 보고되는 두 개의 스팬으로 구성된 트레이스를 생성해요.

// tracer_example.cpp
#include <datadog/span_config.h>
#include <datadog/tracer.h>
#include <datadog/tracer_config.h>

#include <iostream>
#include <string>

namespace dd = datadog::tracing;

int main() {
  dd::TracerConfig config;
  config.service = "my-service";

  const auto validated_config = dd::finalize_config(config);
  if (!validated_config) {
    std::cerr << validated_config.error() << '\n';
    return 1;
  }

  dd::Tracer tracer{*validated_config};
  // 스팬을 몇 개 만듭니다.
  {
    auto span_a = tracer.create_span();
    span_a.set_name("A");
    span_a.set_tag("tag", "123");
    auto span_b = span_a.create_child();
    span_b.set_name("B");
    span_b.set_tag("tag", "value");
  }

  return 0;
}

CPM

CPM.cmake는 CMake에 의존성 관리 기능을 추가해 주는 크로스 플랫폼 CMake 스크립트예요.

# CMakeLists.txt에서

CPMAddPackage("gh:DataDog/dd-trace-cpp#1.0.0")

# `tracer_example` 타깃 추가
add_executable(tracer_example tracer_example.cpp)

# `dd-trace-cpp`에 정적으로 링크
# 참고: `dd-trace-cpp`에 동적으로 링크하려면 `dd_trace::shared` 타깃을 사용하세요
target_link_libraries(tracer_example dd_trace::static)

다음 명령으로 예제를 빌드하세요.

cmake -B build -DCMAKE_BUILD_TYPE=Release .
cmake --build build --target tracer_example -j

./build/tracer_example
DATADOG TRACER CONFIGURATION - {"collector":{"config":{"event_scheduler":{"type":"datadog::tracing::ThreadedEventScheduler" ... }}}

CMake

CMake를 사용해 dd-trace-cpp 라이브러리를 C++ 프로젝트에 통합하려면 다음 단계를 따르세요.

include(FetchContent)

FetchContent_Declare(
  dd-trace-cpp
  GIT_REPOSITORY https://github.com/DataDog/dd-trace-cpp
  GIT_TAG        v1.0.0
  GIT_SHALLOW    ON
  GIT_PROGRESS   ON
)

FetchContent_MakeAvailable(dd-trace-cpp)

# `tracer_example` 타깃 추가
add_executable(tracer_example tracer_example.cpp)

# `dd-trace-cpp`에 정적으로 링크
# 참고: `dd-trace-cpp`에 동적으로 링크하려면 `dd_trace_cpp_shared` 타깃을 사용하세요
target_link_libraries(tracer_example dd_trace::static)

다음 명령으로 예제를 빌드하세요.

cmake -B build -DCMAKE_BUILD_TYPE=Release .
cmake --build build --target tracer_example -j

./build/tracer_example
DATADOG TRACER CONFIGURATION - {"collector":{"config":{"event_scheduler":{"type":"datadog::tracing::ThreadedEventScheduler" ... }}}

수동 (Manual)

dd-trace-cpp 라이브러리를 수동으로 다운로드해 설치하려면 다음 bash 스크립트를 실행하세요.

# "jq" 명령이 필요한데, 패키지 관리자로 설치할 수 있어요:
#   - APT: `apt install jq`
#   - APK: `apk add jq`
#   - YUM: `yum install jq`
if ! command -v jq >/dev/null 2>&1; then
  >&2 echo "jq command not found. Install using the local package manager."
  exit 1
fi

# GitHub에서 최신 릴리스 버전 번호를 가져옵니다.
get_latest_release() {
  curl --silent "https://api.github.com/repos/$1/releases/latest" | jq --raw-output .tag_name
}

DD_TRACE_CPP_VERSION="$(get_latest_release DataDog/dd-trace-cpp)"

# dd-trace-cpp 라이브러리를 다운로드해 설치합니다.
wget https://github.com/DataDog/dd-trace-cpp/archive/${DD_TRACE_CPP_VERSION}.tar.gz -O dd-trace-cpp.tar.gz
mkdir dd-trace-cpp && tar zxvf dd-trace-cpp.tar.gz -C ./dd-trace-cpp/ --strip-components=1
cd dd-trace-cpp

# 올바른 버전의 dd-trace-cpp를 다운로드해 설치합니다.
# 프로젝트를 구성하고, 빌드하고, 설치합니다.
cmake -B build .
cmake --build build -j
cmake --install build

기본적으로 cmake --install은 공유 라이브러리와 공용 헤더를 적절한 시스템 디렉터리(예: /usr/local/[...])에 배치해요. 특정 위치에 설치하려면 대신 cmake --install build --prefix <INSTALL_DIR>을 사용하세요.

동적 링크 (Dynamic Linking)

libdd-trace-cpp.so에 링크하고 공유 라이브러리가 LD_LIBRARY_PATH에 있는지 확인하세요.

clang -std=c++17 -o tracer_example tracer_example.cpp -ldd-trace-cpp
LD_LIBRARY_PATH=/usr/local/lib/ ./tracer_example
DATADOG TRACER CONFIGURATION - {"collector":{"config":{"event_scheduler":{"type":"datadog::tracing::ThreadedEventScheduler" ... }}}

구성 (Configuration)

필요하다면 Unified Service Tagging 설정을 포함해 원하는 대로 애플리케이션 성능 텔레메트리 데이터를 보내도록 SDK를 구성하세요. 자세한 내용은 라이브러리 구성을 읽어보세요.

더 알아보기 (Learn more)

도움이 되는 추가 문서, 링크, 글: