Getting Started
Welcome to the OpenTelemetry C++ getting started guide! This guide will walk you through the basic steps in installing, instrumenting with, configuring, and exporting data from OpenTelemetry.
You can use CMake or Bazel for building OpenTelemetry C++. The following getting started guide will make use of CMake and only provide you the most essential steps to have a working example application (a http server & http client). For more details read these instructions.
Prerequisites
You can build OpenTelemetry C++ on Windows, macOS or Linux. First you need to install some dependencies:
$ sudo apt-get install git cmake g++ libcurl4-openssl-dev
$ sudo yum install git cmake g++ libcurl-devel
$ xcode-select —install
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ brew install git cmake
Building
Get the opentelementry-cpp source:
$ git clone --recursive https://github.com/open-telemetry/opentelemetry-cpp
Navigate to the repository cloned above, and create the CMake build configuration:
$ cd opentelemetry-cpp
$ mkdir build && cd build
$ cmake -DBUILD_TESTING=OFF ..
Once build configuration is created, build the CMake targets http_client
and
http_server
:
cmake --build . --target http_client http_server
If all goes well, you should find binaries http_server
and http_client
in
./examples/http
:
$ ls ./examples/http
CMakeFiles Makefile cmake_install.cmake http_client http_server
Run Application
Open two terminals, in the first terminal, start the http server:
$ ./examples/http/http_server
Server is running..Press ctrl-c to exit..
In the other terminal, run the http client:
$ ./examples/http/http_client
{
name : /helloworld
trace_id : 05eec7a55d3544434265dad89d7fe96f
span_id : 45fb62c58c907f05
tracestate :
parent_span_id: 0000000000000000
start : 1665577080650384378
duration : 1640298
description :
span kind : Client
status : Unset
attributes :
http.header.Date: Wed, 12 Oct 2022 12:18:00 GMT
http.header.Content-Length: 0
http.status_code: 200
http.method: GET
.header.Host: localhost
http.header.Content-Type: text/plain
http.header.Connection: keep-alive
.scheme: http
http.url: http://localhost:8800/helloworld
events :
links :
resources :
service.name: unknown_service
telemetry.sdk.version: 1.6.1
telemetry.sdk.name: opentelemetry
telemetry.sdk.language: cpp
instr-lib : http-client
}
Also the server should dump you a trace to the console:
{
name : /helloworld
trace_id : 05eec7a55d3544434265dad89d7fe96f
span_id : 8df967d8547813fe
tracestate :
parent_span_id: 45fb62c58c907f05
start : 1665577080651459495
duration : 46331
description :
span kind : Server
status : Unset
attributes :
http.header.Traceparent: 00-05eec7a55d3544434265dad89d7fe96f-45fb62c58c907f05-01
http.header.Accept: */*
http.request_content_length: 0
http.header.Host: localhost:8800
http.scheme: http
http.client_ip: 127.0.0.1:49466
http.method: GET
net.host.port: 8800
net.host.name: localhost
events :
{
name : Processing request
timestamp : 1665577080651472827
attributes :
}
links :
resources :
service.name: unknown_service
telemetry.sdk.version: 1.6.1
telemetry.sdk.name: opentelemetry
telemetry.sdk.language: cpp
instr-lib : http-server
}
What’s next
Enrich your instrumentation generated automatically with manual of your own codebase. This gets you customized observability data.
You’ll also want to configure an appropriate exporter to export your telemetry data to one or more telemetry backends.