はじめに
本手順書は、RHEL系 Linux VM 上に Quote of the Day(QotD) デモアプリを構築し、Instana Agent をホストにインストールして監視するまでの手順をまとめたものです。
Instanaでどのようなアプリを検知して、どんな障害が検知できるのかについて知りたい方におすすめです。
対象環境:RHEL系 Linux VM(dnf)/ docker run 方式/ 2026年8月27日 実証済み
全体の流れ
STEP 1 Docker のインストール
↓
STEP 2 Quote of the Day のクローン&起動(10コンテナ)
↓
STEP 3 Instana Agent のインストール(ワンライナー)
↓
STEP 4 ロードジェネレーターの起動(トラフィック生成)
↓
STEP 5 Anomaly Generator の起動(異常シナリオの実行)
↓
Instana UI でサービスマップ・エラー率・トレースを確認
アーキテクチャ概要
Linux VM(RHEL系)
├── Instana Agent(ホストインストール)
│ └── /proc + docker.sock 経由で全コンテナを自動検出・監視
│
├── Docker コンテナ群(docker run で個別起動)
│ ├── qotd-web (フロントエンド)
│ ├── qotd-quote (名言サービス)
│ ├── qotd-author (著者サービス)
│ ├── qotd-image (画像サービス)
│ ├── qotd-ratings (評価サービス)
│ ├── qotd-pdf (PDF サービス)
│ ├── qotd-engraving (彫刻サービス)
│ ├── qotd-qrcode (QRコード)
│ ├── qotd-db (MySQL)
│ ├── qotd-usecase (Anomaly Generator)
│ └── qotd-load-1/2 (ロードジェネレーター)
│
└── continuous_anomaly.sh(異常シナリオ自動ローテーション)
ポイント
-
k8s 不要:Docker Compose も不要で、
docker run方式で動作します - Agent はホストにインストールするだけで全コンテナを自動検出・APM トレース取得が可能
- Application Perspective の設定不要で、ロード起動後すぐに All Services 画面にデータが表示されます
- Anomaly Generator の既存シナリオ(
1_cascade_failure等)をそのまま利用できます
前提条件
| 項目 | 要件 |
|---|---|
| OS | RHEL / CentOS Stream / Fedora(dnf 系) |
| メモリ | 4GB 以上推奨(実績:7.5GB、Agent が約460MB使用) |
| ネットワーク | GitLab・Docker Registry・Instana バックエンドへの外部通信が可能 |
| 権限 | root または sudo 権限 |
| 用意するもの | Instana Agent Key/Download Key/バックエンドURL |
STEP 1|Docker のインストール
# Docker リポジトリ追加
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
# Docker インストール
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Docker 起動 & 自動起動設定
sudo systemctl start docker
sudo systemctl enable docker
# 一般ユーザーで使えるように
sudo usermod -aG docker $USER
newgrp docker
docker psでエラーなく実行できれば OK!
STEP 2|Quote of the Day のクローン&起動
① リポジトリをクローン
git clone https://gitlab.com/quote-of-the-day/quote-of-the-day.git
cd quote-of-the-day
② 起動スクリプトの場所を確認
cd deploy/docker
ls
# → start_qotd.sh start_load.sh
③ VM の IP アドレスを確認
アプリ起動のコマンドのために、VMIPの指定が必要なので、VMのIPアドレスを確認します。
hostname -I
# 例: 10.244.128.44 172.17.0.1
# ※ 172.17.x.x は Docker 内部NW なので使わない
④ アプリを起動(初回はイメージダウンロードで5〜10分かかります)
bash start_qotd.sh <VM_IP>
# 例:
bash start_qotd.sh 10.×××.×××.××
⑤ 全コンテナの起動確認
docker ps
| コンテナ名 | 役割 | ポート |
|---|---|---|
| qotd-web | フロントエンド | 3000 |
| qotd-quote | 名言サービス | 3001 |
| qotd-author | 著者サービス | 3002 |
| qotd-image | 画像サービス | 3003 |
| qotd-ratings | 評価サービス | 3004 |
| qotd-pdf | PDF サービス | 3005 |
| qotd-engraving | 彫刻サービス | 3006 |
| qotd-qrcode | QRコード | 9080 |
| qotd-db | MySQL | 3306 |
| qotd-usecase | Anomaly Generator | 3012 |
✅ 確認:10コンテナ全て
Upになっていれば起動成功
STEP 3|Instana Agent のインストール(ワンライナー)
① Instana UI からワンライナーを取得
Instana UI → 左メニュー下部「...」→ Install Agent → Linux → One-Liner からキー入りコマンドをコピー
② ワンライナーを実行
コピペでコマンド実行!インストール完了まで5分ほどかかります。

③ Agent の起動確認
sudo systemctl status instana-agent
# → Active: active (running) であれば OK
④ バックエンドへの接続確認
sudo grep -E "Connected|ERROR" /opt/instana/agent/data/log/agent.log | tail -5
# → "Connected using HTTP/2 to ..." が出れば接続成功
✅ 確認:Instana UI の Infrastructure 画面にホスト名が表示されれば完了
STEP 4|ロードジェネレーターの起動
Applications 画面にデータを表示するにはトラフィックが必要です。
load_generatorスクリプトを実行することで、アプリの負荷をかけ続けます。
cd quote-of-the-day/deploy/docker
bash start_load.sh <VM_IP>
# 例:
bash start_load.sh 10.×××.×××.××
load_generator.shの動き
ロードジェネレーター(load_generator.sh)は、スクリプトの中にdocker run-dコマンドなどがあり、 docker run -d で起動するため、ターミナルを閉じても動き続けます(nohup 不要)
# ロードコンテナの確認
docker ps | grep load
# → qotd-load-1, qotd-load-2 が Up であれば OK
STEP 5|Anomaly Generator の起動(任意)
① 既存シナリオの確認
curl http://127.0.0.1:3012/usecase
② シナリオを手動起動
# リセット
curl -X POST http://127.0.0.1:3012/reset
# シナリオ起動
curl -X POST http://127.0.0.1:3012/activate/1_cascade_failure
| シナリオID | 内容 |
|---|---|
1_cascade_failure |
Quote→PDF→Web→Ratings のカスケード障害 |
2_ratings |
Ratings サービス全般の障害(500/404エラー・レイテンシ増加) |
3_quote_pdf_issues |
Quote・PDF の CPU/メモリ急騰 |
③ 継続的ループ実行(バックグラウンド)
continuous_anomaly.sh を VM 上に配置して実行します。
これは、備え付けのAnomalyGeneratorからjsonで作成。
# nohup でバックグラウンド起動(ターミナルを閉じても動き続ける)
nohup bash ~/continuous_anomaly.sh > ~/anomaly.log 2>&1 &
# ログ確認
tail -f ~/anomaly.log
# 停止
kill $(pgrep -f continuous_anomaly)
# 手動リセット
curl -X POST http://127.0.0.1:3012/reset
continuous_anomaly.shはシェルスクリプトのため、nohup が必要(ロードジェネレーターとの違い)
Instana UI 確認ポイント
| 画面 | 確認内容 | 表示タイミング |
|---|---|---|
| Infrastructure | ホスト・Docker コンテナ一覧 | Agent 起動後 3〜5分 |
| Applications → All Services → サマリー | 呼び出し数・エラー率・レイテンシ | ロード起動後 1〜2分 |
| Applications → All Services → 依存関係 | サービスマップ | ロード起動後 数分 |
| Analytics → Calls | 個別トレース・エラートレース | ロード起動後すぐ |
トラブルシューティング
| 症状 | 確認コマンド | 対処 |
|---|---|---|
| docker ps でコンテナが出ない | systemctl status docker |
Docker を起動する |
| start_qotd.sh が not found | ls deploy/docker/ |
deploy/docker/ ディレクトリに移動してから実行 |
| Agent が接続できない | grep ERROR /opt/instana/agent/data/log/agent.log |
Agent Key・エンドポイント URL を確認 |
| Applications に何も出ない | docker ps | grep load |
start_load.sh を実行してトラフィックを流す |
| Anomaly が効かない | curl http://127.0.0.1:3012/usecase |
/activate/:id のエンドポイントを使う |
| エラー率が見えない(All Services) | Instana UI 右上フィルターを確認 | 「インバウンド呼び出し」→「すべての呼び出し」に変更する |
ハマったポイント
Helmでのエージェントインストールでは QotD が見えず、OSへ直接インストールしたAgent(ワンライナー)では見えた。
コンテナやから一緒じゃないの?と思ったので整理。
理由
QotD は Docker、Helm Agent は Kubernetes を見ていたため、監視対象のランタイムが一致していなかった。
Helm Agentは、k3sのdefaultを指定してその中のみ見ていた。
RHEL VM
│
├─ Docker Engine
│ ├─ qotd-web
│ ├─ qotd-quote
│ ├─ qotd-author
│ ├─ qotd-ratings
│ └─ ...
│
└─ Kubernetes / k3s
└─ containerd
└─ instana-agent Pod