🎯 はじめに
OpenTelemetry C++ SDKをC言語ベースのアプリケーション に統合し、利用して、分散トレース、メトリクス、ログを収集して、Instana SaaS Backend や OpenTelemetry Backend に送信する方法を紹介します。
-
対象読者
- OpenTelemetry を C/C++ プロジェクト に統合したい人
- Instana でC言語で作成したアプリのトレースやメトリクスを管理したい人
- C 言語で Web API を開発しつつ、観測可能性(Observability)を向上させたい人**
-
この記事でわかること
- C 言語で OpenTelemetry C++ SDK を利用 し、トレース・メトリクス・ログを送信する方法
- OTLP (gRPC/HTTP) を使い、Instana にデータを送信する方法
- C 言語の Web サーバーに OpenTelemetry を統合するサンプル
📌 プロジェクト概要
今回紹介するプロジェクトは、C 言語ベースの MicroHTTPD Web サンプルサービス です。
このWeb Serviceに OpenTelemetry SDK を統合 し、以下の機能を実装します。
機能 | 説明 |
---|---|
📌 トレース(Tracing) | API のリクエスト・レスポンスを可視化 |
📊 メトリクス(Metrics) | アクセス数などのパフォーマンス測定 |
📜 ロギング(Logging) | OpenTelemetry 構造化ログを活用 |
📌 GitHub:
👉 GSSJacky/opentelemetry-c-integration
ps:
現時点でトレースのみ完全動作確認しました。今後Metricsとログのテストを行う予定です。
🛠 環境構築
macOS 上で OpenTelemetry を有効にするために、必要なツールをインストールします。
ps:
今回のサンプルはmacOS(apple M1)で検証しました。今後ubuntu22に追加テストを行う予定です。
1️⃣ 必要パッケージのインストール
brew install cmake curl vcpkg microhttpd
2️⃣ vcpkg のセットアップ
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
export VCPKG_ROOT=$(pwd)
export CMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
3️⃣ 必要ライブラリのインストール
$VCPKG_ROOT/vcpkg install "opentelemetry-cpp[core,otlp-grpc]" microhttpd protobuf grpc
📌 プロジェクトのビルド
クローン & ビルド
git clone https://github.com/GSSJacky/opentelemetry-c-integration.git
cd opentelemetry-c-integration
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE
make -j$(sysctl -n hw.logicalcpu)
📊 Instana で可視化
Instana エージェントのインストール
Instanaドキュメントに沿ってインストールいただければと思います。
Instana の OpenTelemetry 設定
configuration.yaml
に以下を追加:
com.instana.plugin.opentelemetry:
enabled: true
エージェントを再起動:
sudo systemctl restart instana-agent.service
netstat -ano | grep 4317
✅ 0.0.0.0:4317
が表示されれば成功!
** OpenTelemetry 環境変数を設定**
下記の二つをどちら一つの環境変数を設定いただければと思います。
1.Instana Agent経由で送信する場合に
export OTEL_SERVICE_NAME="ClangOTELServiceJacky"
export OTEL_EXPORTER_OTLP_INSECURE=true
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://localhost:4317"
2.直接Instana SaaS BackendのOTLP Acceptorに送信する場合に
export OTEL_SERVICE_NAME="ClangOTELServiceJacky"
export OTEL_EXPORTER_OTLP_INSECURE=false
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="https://otlp-[RegionName]-saas.instana.io:4317"
export OTEL_EXPORTER_OTLP_HEADERS="x-instana-key=[AgentkeyXXXXX]"
C言語のWeb Serviceの起動
以上CMakeでコンパイルしたBuildフォルダにあるweb_serverを起動する
./web_server
📡 API の実行 (curl テスト)
1️⃣ カタログを挿入
curl -X POST http://localhost:8080/insertCatalog -d "id=8&catalogname=Product8D"
2️⃣ ID でカタログ取得
curl "http://localhost:8080/getCatalog?id=2"
curl "http://localhost:8080/getCatalog?id=8"
3️⃣ Web 検索
curl "http://localhost:8080/searchfromURL?q=openai"
3️⃣ Instana UI での確認
🔍 Cmakeでコンパイルする際に依存ライブラリの確認ポイント
プロジェクトに必要なライブラリがインストールされているか確認するには、以下のコマンドを実行してください。
1️⃣ OpenTelemetry の確認
ls ~/vcpkg/installed/arm64-osx/lib | grep opentelemetry
✅ 期待される出力:
libopentelemetry_trace.a
libopentelemetry_metrics.a
libopentelemetry_logs.a
2️⃣ gRPC の確認
find ~/vcpkg/installed/arm64-osx -name '*grpc*.a'
✅ 期待される出力:
~/vcpkg/installed/arm64-osx/lib/libgrpc.a
~/vcpkg/installed/arm64-osx/lib/libgrpc++_reflection.a
~/vcpkg/installed/arm64-osx/lib/libgrpc++.a
3️⃣ インストール済みパッケージの確認
$VCPKG_ROOT/vcpkg list | grep -E 'opentelemetry|grpc|protobuf|microhttpd'
✅ 期待される出力:
opentelemetry-cpp:x64-osx 1.10.0 OpenTelemetry C++ SDK
grpc:x64-osx 1.58.0 Open-source RPC framework
protobuf:x64-osx 3.21.0 Protocol Buffers (protobuf)
microhttpd:x64-osx 0.9.76 Small HTTP server library
参考
OpenTelemetry C++ client SDK packageドキュメント
OpenTelemetry C++ Github Project
GSSJacky/opentelemetry-c-integration