6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

6
Last updated at Posted at 2025-12-20

はじめに

レガシーなCOBOLアプリケーションの可視化、諦めていませんか?
本記事では、自分でVibe Codingツール(今回はAntigravity)を活用しながら開発されたOpenTelemetry COBOL SDKを使用して、COBOLアプリケーションからメトリクスとトレースを収集し、IBM Instana Observabilityで可視化する方法を紹介します。

今回は、以下の2つの連携パターンについて解説します。

  1. Cobol-OTEL-SDK ➡ OpenTelemetry Collector ➡ Instana OTLP Acceptor
  2. 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

手順

  1. 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(または設定したサービス名)が表示されているはずです。
Screenshot 2025-12-20 at 16.05.58.png

2️⃣ トレースの確認

サービスをクリックし、サービスの関連指標は表示されます。Analyze Traces を開くと、実行した /getall/delete 等の呼び出しが表示されます。
Screenshot 2025-12-20 at 16.06.28.png

Screenshot 2025-12-20 at 16.06.41.png

Screenshot 2025-12-20 at 16.07.11.png

Screenshot 2025-12-20 at 16.07.33.png

Instana Agent経由している場合にMetrics画面

Screenshot 2025-12-20 at 16.18.04.png


まとめ

OpenTelemetry COBOL SDK を使うことで、これまでブラックボックスになりがちだったレガシーシステムも、最新の Observability プラットフォームで一元管理できるようになります。

  • OTEL Collector 経由: 柔軟なデータ加工やフィルタリングが可能。
  • Instana Agent 直接: シンプルな構成で、インフラ監視と合わせてAPMを実現。

ぜひ試してみてください!


参考リンク

6
1
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
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?