1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語アプリに OpenTelemetry C++ SDK を統合して Instana でトレースを可視化

Last updated at Posted at 2025-03-01

🎯 はじめに

OpenTelemetry C++ SDKをC言語ベースのアプリケーション に統合し、利用して、分散トレース、メトリクス、ログを収集して、Instana SaaS BackendOpenTelemetry 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 での確認

  1. Instana にログイン
  2. 「アプリケーション」 > 「サービス」 > ClangOTELServiceJacky を選択
  3. 「呼び出しの分析」でトレースの詳細を確認
    図1
    Screenshot 2025-03-01 at 23.04.18.png
    図2
    Screenshot 2025-03-01 at 23.06.49.png
    図3
    Screenshot 2025-03-01 at 23.07.11.png

🔍 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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?