はじめに
レガシーなCOBOLアプリケーションの可視化、諦めていませんか?
本記事では、自分でVibe Codingツール(今回はAntigravity)を活用しながら開発されたOpenTelemetry COBOL SDKを使用して、COBOLアプリケーションからメトリクスとトレースを収集し、IBM Instana Observabilityで可視化する方法を紹介します。
今回は、以下の2つの連携パターンについて解説します。
- Cobol-OTEL-SDK ➡ OpenTelemetry Collector ➡ Instana OTLP Acceptor
- Cobol-OTEL-SDK ➡ Instana Agent ➡ Instana Backend
プロジェクト概要
今回使用する otel-cobol-sdk は、COBOLアプリケーションのために設計されたポータブルなSDKです。外部コマンド(curl等)に依存せず、ネイティブなTCPソケット通信でOTLP(OpenTelemetry Protocol)データを送信します。
- GitHubリポジトリ: otel-cobol-sdk
-
特徴:
- GnuCOBOL 3.x 対応
- ナノ秒精度のタイムスタンプ
- W3C Trace Context 対応(分散トレーシングが可能)
環境構築
1️⃣ 必要条件
- OS: macOS または Linux (x64/arm64)
- COBOLコンパイラ: GnuCOBOL 3.1+
- OpenTelemetry Collector (パターン1で使用)
- Instana Agent (パターン2で使用)
2️⃣ SDKの入手とビルド
まず、SDKをクローンしてビルドします。
git clone https://github.com/GSSJacky/otel-cobol-sdk.git
cd otel-cobol-sdk
# ビルドスクリプトの実行(ライブラリとサンプルアプリが生成されます)
./build.sh
SDKディレクトリ構成(例)
otel-cobol-sdk/
├── src/ # SDKソースコード (lib/)
├── copybooks/ # COBOLコピーブック
├── bin/ # ビルドされたバイナリ (SDKライブラリ & サンプルアプリ)
├── examples/ # サンプルアプリケーション
│ └── inventorymanagement/ # 在庫管理サンプルソースコード
├── otelcollectorcontrib/ # OTEL Collector バイナリ & 設定
├── test/ # テストスクリプト
├── logs/ # ログファイル
├── build.sh # ビルドスクリプト
├── run.sh # 実行スクリプト
└── README.md # このファイル
アーキテクチャパターン設定
ここから、2つの接続パターンのいずれかを選択して設定します。
パターン 1: SDK ➡ OTEL Collector ➡ Instana Backend
このパターンでは、OpenTelemetry (OTEL) Collector を中継サーバーとして使用します。OTEL Collector でバッチ処理やフィルタリングを行い、Instana バックエンドへデータを転送します。
構成フロー:
COBOL App (SDK) ➡ localhost:4318 (OTEL Collector) ➡ Instana Backend (SaaS)
COBOL Application
↓
OTEL SDK (OTELTRC, OTELMET, OTELEXP)
↓
OTEL Collector (HTTP/OTLP)
↓
Instana Backend(OTLP Acceptor)
手順
1.OTEL Collectorの準備
同梱の otelcol-contrib を使用するか、公式からダウンロードします。
2.設定ファイル (otel-config.yaml) の編集
Instanaへの接続情報を設定します。
receivers:
otlp:
protocols:
http:
endpoint: "localhost:4318"
cors:
allowed_origins: ["*"]
allowed_headers: ["*"]
processors:
batch:
timeout: 1s
send_batch_size: 1024
exporters:
# デバッグ用:コンソールに出力
debug:
verbosity: detailed
# ファイルに出力
file:
path: /Users/xuzhengzhi/Downloads/test/coboltest/otelimplementation/otel-cobol-sdk/logs/otel-export.json
format: json
# Instana Backendに送信 下記は例です
otlp:
endpoint: "https://otlp-orange-saas.instana.io:4317"
headers:
"x-instana-key": "uBXXXXXXXXXXXXXXXnQ"
"x-instana-host": "Myhost-MacBook-Air.local"
tls:
insecure: false # Set false in production for TLS enforcement
insecure_skip_verify: true # Set to false in production for TLS enforcement
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [debug, file, otlp] # Instanaに送信する場合は otlp を追加
traces:
receivers: [otlp]
processors: [batch]
exporters: [debug, file, otlp] # Instanaに送信する場合は
3.Collectorの起動
./otelcollectorcontrib/otelcol-contrib --config otelcollectorcontrib/otel-config.yaml
4.COBOLアプリの設定
COBOLアプリ側はデフォルトで localhost:4318 に送信する設定になっています。特別な変更は不要です。
パターン 2: SDK ➡ Instana Agent ➡ Instana Backend
このパターンでは、ホスト上で稼働している Instana Agent に直接データを送信します。Instana Agent は OTLP レシーバーとして機能することができます。
構成フロー:
COBOL App (SDK) ➡ localhost:4318 (Instana Agent) ➡ Instana Backend (SaaS)
COBOL Application
↓
OTEL SDK (OTELTRC, OTELMET, OTELEXP)
↓
Instana Agent (http/grpc)
↓
Instana Backend
手順
-
Instana Agentの設定
Instana Agent の設定ファイル (configuration.yaml) で OTLP 取り込みを有効にします。
com.instana.plugin.opentelemetry:
# # Enabled by default
enabled: true
# grpc:
# # Enabled by default
# enabled: true
# http:
# # Enabled by default
# enabled: true
※ 設定変更後、Agentを再起動してください。
2.OTEL Collector の停止
このパターンでは OTEL Collector 中継プロセスは不要です。もし起動している場合は停止します。
※ SDK はデフォルトで localhost:4318 に送信するため、Instana Agent が同じポートで待機していれば、COBOL側の設定変更は不要です。
📡 アプリケーションの実行と確認
サンプルアプリである「在庫管理システム (Inventory API)」を起動して、実際にトレースを発生させてみましょう。
1️⃣ アプリケーションの起動
# ライブラリパスの設定(必須)
export COB_LIBRARY_PATH=$(pwd)/bin:$COB_LIBRARY_PATH
# Build
./build.sh
# Service Nameの設定(Optional、Default:cobol-app)
export OTEL_SERVICE_NAME="Cobol_OTEL_Service_Jacky"
# サーバーの起動(ポート8008で待機)
./bin/inventory_api
2️⃣ リクエストの送信 (Traceの生成)
別のターミナルを開き、API を叩きます。
# 全件取得(スパン名: /getall)
curl -v http://localhost:8008/getall
# ID指定取得(スパン名: /getid?id=00001)
curl -v "http://localhost:8008/getid?id=00001"
# 追加処理
curl -X POST http://localhost:8008/add -d "id=00006&name=T-SHIRT&quantity=00050&price=0000015.00"
# 削除処理(スパン名: /delete?id=00006)
curl -v -X POST http://localhost:8008/delete -d "id=00006"
Instana での可視化
Instana のダッシュボードにアクセスして確認してみましょう。
1️⃣ サービスの確認
Analytics または Applications ビューに移動します。
Cobol_OTEL_Service_Jacky(または設定したサービス名)が表示されているはずです。

2️⃣ トレースの確認
サービスをクリックし、サービスの関連指標は表示されます。Analyze Traces を開くと、実行した /getall や /delete 等の呼び出しが表示されます。

Instana Agent経由している場合にMetrics画面
まとめ
OpenTelemetry COBOL SDK を使うことで、これまでブラックボックスになりがちだったレガシーシステムも、最新の Observability プラットフォームで一元管理できるようになります。
- OTEL Collector 経由: 柔軟なデータ加工やフィルタリングが可能。
- Instana Agent 直接: シンプルな構成で、インフラ監視と合わせてAPMを実現。
ぜひ試してみてください!
参考リンク



