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)
도움이 되는 추가 문서, 링크, 글: