
はじめに
当社では、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。
初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。
「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。
こんにちは、クラウド事業部の加藤です。
Datadogのパートナー支援をしていると、「実際に動くマイクロサービスのデモ環境が欲しい」というご要望をよくいただきます。
そんなとき、Datadog公式が提供している TSRE Microservices というデモアプリケーションがめちゃくちゃ便利なんです!
今回は、このTSRE MicroservicesをAWS EC2上にDocker Composeで構築してみたので、その手順と気づきをシェアします。

- はじめに
- TSRE Microservicesって何?
- ライセンスについて
- なぜEC2にDocker Composeで構築したのか
- アーキテクチャを理解する
- 実際に構築してみた
- 動作確認してみた
- ハマったポイント
- 便利なコマンドメモ
- まとめ
TSRE Microservicesって何?
TSRE Microservicesは、Datadogが提供している12のマイクロサービスで構成されたEコマースアプリケーションです。
GoogleのOnline Boutiqueをベースに、Datadogのデモ・検証用に大幅にカスタマイズされているんですよね。
特徴はこんな感じ:
- 12のマイクロサービス(Go、Python、Java、C#、Node.jsが混在)
- Datadog APM、ログ、セキュリティ機能が全部入り
- gRPCを使ったマイクロサービス間通信
- 自動で負荷を生成してくれる(Locust)
- リアルなEコマースのシナリオ
公式リポジトリはこちら:
https://github.com/DataDog/tsre-microservices
これ、デモやハンズオンで本当に使えるんですよね。
ライセンスについて
TSRE Microservicesは、Apache License 2.0のもとで公開されています。
このプロジェクトは、GoogleのOnline Boutique デモアプリケーションをベースに、Datadogが大幅にカスタマイズしたものです。
Apache License 2.0は、以下のような自由度の高いライセンスです:
- 商用利用可能 - 業務や検証環境での利用もOK
- 改変可能 - カスタマイズして独自の環境を作れる
- 再配布可能 - 社内での共有や展開も可能
ただし、以下の点には注意が必要です:
- ライセンス表記とCOPYRIGHTの保持が必要
- 改変した場合はその旨を明記する必要がある
詳細は、GitHubリポジトリのLICENSEファイルをご確認ください。
オープンソースで提供されているので、デモ・検証・学習目的で自由に使えるのが嬉しいですよね ^^
なぜEC2にDocker Composeで構築したのか
最初はKubernetesも検討したんですが、今回は以下の理由でEC2 + Docker Composeを選びました
- 構築がシンプル -
docker compose upで完結 - コストが明確 - EC2インスタンス1台で完結
- デバッグしやすい - ログもリソースも見やすい
- ローカル環境と同じ構成 - docker-compose.ymlがそのまま使える
- Datadog Agentもコンテナ化 - ホストにエージェントをインストールする必要なし
検証環境としては、これで十分だなと。
アーキテクチャを理解する
サービス構成
TSRE Microservicesは16個のコンテナで構成されています:
Frontend (Go) - http://localhost:80
├─→ ProductCatalogService (Go)
├─→ CurrencyService (Node.js)
├─→ CartService (C#) → Redis
├─→ RecommendationService (Python) → ProductCatalogService
├─→ ShippingService (Go)
├─→ AdService (Java)
└─→ CheckoutService (Go)
├─→ PaymentService (Java) → PaymentDB (MariaDB)
├─→ EmailService (Python)
├─→ ShippingService
├─→ CurrencyService
├─→ CartService
└─→ ProductCatalogService
サポート系:
├─ Datadog Agent(監視)
├─ LoadGenerator(負荷生成)
├─ LogGenerator(ログ生成)
└─ InventoryService (Python)
全部で5言語が混在してるの、マイクロサービスらしくて良いですよね。
docker-composeの特徴的な設定
Unix Domain Socketによる高速通信
volumes: - /var/run/datadog:/var/run/datadog
すべてのコンテナがこのディレクトリを共有していて、TCP通信じゃなくてUnix Domain Socket(UDS)を使ってるんです。
docker-compose.ymlには、dd-agent(Datadog Agent)コンテナも含まれていて、各アプリケーションコンテナはこのUDSを通じてトレース・メトリクスをdd-agentコンテナに送信します。
これ、めちゃくちゃ速いんですよね。TCP通信よりも低オーバーヘッドで高速です。
統一されたタグ戦略
environment: - DD_ENV=tsreenv - DD_SERVICE=frontend - DD_VERSION=0.4.1
全サービスでDD_ENV、DD_SERVICE、DD_VERSIONが設定されていて、Datadogの統合サービスタグに準拠してます。
これがあると、APMでの検索とフィルタリングがめちゃくちゃ楽なんですよね。
セキュリティ機能が全部入り
environment: - DD_APPSEC_ENABLED=true - DD_IAST_ENABLED=true - DD_APPSEC_SCA_ENABLED=true
Application Security、IAST、SCAが全部有効化されてます。
セキュリティ機能のデモもこの環境でできちゃうんです。便利!
実際に構築してみた
それでは実際の手順を見ていきます。
1. EC2インスタンスの準備
まず、EC2インスタンスを用意します。
推奨スペック:
- インスタンスタイプ: t3.xlarge(4vCPU、16GB RAM)
- OS: Amazon Linux 2023
- ストレージ: 30GB gp3
- セキュリティグループ: SSH(22)、HTTP(80)を許可
t3.largeでも動くは動くんですが、メモリがカツカツになるので、xlargeがおすすめです。
2. 必要なパッケージのインストール
EC2にSSH接続したら、まずDockerとDocker Composeをインストールします。
# SSH接続 ssh -i your-key.pem ec2-user@<EC2のパブリックIP> # システムアップデート sudo dnf update -y # Dockerのインストール sudo dnf install -y docker # Dockerサービスの起動 sudo systemctl start docker sudo systemctl enable docker # dockerグループに追加(sudo不要にする) sudo usermod -aG docker $USER # Dockerバージョン確認 docker --version
次にDocker Compose v2をインストール:
# Docker Compose v2のインストール
sudo mkdir -p /usr/local/lib/docker/cli-plugins
# 最新版をダウンロード
DOCKER_COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
sudo curl -SL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-$(uname -m)" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
# 実行権限の付与
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
# バージョン確認
docker compose version
Gitのインストール:
sudo dnf install -y git
Docker Buildxのインストール(重要!):
# 最新のbuildxプラグインをインストール
BUILDX_VERSION=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
sudo curl -SL "https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64" \
-o /usr/local/lib/docker/cli-plugins/docker-buildx
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-buildx
# バージョン確認(v0.17.0以上であることを確認)
docker buildx version
docker compose buildには buildx 0.17.0以上が必要なので、ここでインストールしておきます。
グループ反映のため、一度ログアウト→再ログインします:
exit ssh -i your-key.pem ec2-user@<EC2のパブリックIP> # sudoなしでdockerが動くことを確認 docker ps
3. リポジトリのクローン
cd ~ # リポジトリをクローン git clone https://github.com/DataDog/tsre-microservices.git cd tsre-microservices # 構造を確認 ls -la
docker-compose.yml、srcディレクトリ、kubernetes-manifestsディレクトリが確認できます。
4. Datadog API Keyの設定
Datadog API Keyを設定します。
まず、Datadogで API Key を取得:
1. Datadogにログイン
2. Organization Settings → API Keys
3. New Keyをクリック
4. Key名を入力(例: tsre-microservices)
5. 生成されたKeyをコピー
次に、.envファイルを作成:
cat > .env << 'EOF' # Datadog API Key(必須) DD_API_KEY=your_datadog_api_key_here # Datadog App Key(loggenerator用、オプション) DD_APP_KEY= # その他 CTHULHU_URL= EOF # vimで編集(nanoでもOK) vim .env
DD_API_KEY=の後に、先ほどコピーしたAPI Keyを貼り付けて保存します。
DD_APP_KEYについて:
- loggeneratorサービスで使用(オプション)
- 不要な場合は空のままでOK
- Organization Settings → Application Keys から取得可能
5. イメージのビルド
ここからが時間かかるところです。初回は20-30分くらいかかります。
# すべてのイメージをビルド docker compose build
コーヒーでも飲みながら待ちましょう ^^
ビルド中、別のターミナルから進捗を確認できます:
# 新しいSSHセッションで ssh -i your-key.pem ec2-user@<EC2のパブリックIP> cd ~/tsre-microservices # イメージの作成状況を確認 watch -n 5 'docker images | grep tsre'
ビルドが完了したら、イメージを確認:
docker images | grep tsre
16個のイメージが作成されているはずです。これで準備完了!
6. サービスの起動
いよいよ起動です。
# バックグラウンドで起動 docker compose up -d
起動ログをリアルタイムで見たい場合:
docker compose logs -f
Ctrl+Cでログ表示を終了できます(コンテナは停止しません)。
すべてのサービスが起動したか確認:
docker compose ps
すべてのサービスがUpステータスになっていればOK!
一部のサービスが(healthy)になっているのは、ヘルスチェックが通ったサインです。
動作確認してみた
Webアプリケーション
ブラウザから以下にアクセス:
http://<EC2のパブリックIP>
Swagstoreのトップページが表示されました!

これ、ちゃんとDatadogのグッズが並んでるんですよね。細かい ^^
商品をカートに入れて、チェックアウトまで試してみます。

クレジットカード決済も(モック)体験できます。
Datadog APM
数分待つと、DatadogにAPMデータが送信され始めます。
サービス一覧
Datadog APM → Servicesで、環境をtsreenvでフィルター。

マイクロサービスが表示されました!
- frontend
- cartservice
- checkoutservice
- paymentservice
- productcatalogservice
- currencyservice
- shippingservice
- emailservice
- recommendationservice
- adservice
- inventoryservice
すべてのサービスでリクエスト、レイテンシ、エラー率が可視化されてます。
Service Map
APM → Service Mapで依存関係を見てみます。

これ、めちゃくちゃ綺麗ですよね!
どのサービスがどのサービスを呼んでいるか、レイテンシはどこが遅いか、すぐ分かります。
トレース詳細
APM → Tracesで個別のリクエストを追跡してみます。

チェックアウト処理のトレースを見ると、こんな感じの呼び出しチェーンが確認できました:
frontend
└─→ checkoutservice
├─→ cartservice → redis
├─→ productcatalogservice
├─→ currencyservice
├─→ shippingservice
├─→ paymentservice → paymentdbservice
└─→ emailservice
各サービスの処理時間も全部見えるので、ボトルネックがどこにあるか一発で分かります。
これ、デモで見せるとお客さんの食いつきが全然違うんですよね。
リソース使用状況
実際にどのくらいのリソースを使っているか確認してみました。
docker stats --no-stream
私の環境では:
- 総メモリ使用量: 約8-10GB
- CPU使用率: 負荷生成中で20-30%
- ディスク使用量: 約15GB
t3.xlarge(16GB RAM)であれば、余裕をもって動作します。
ハマったポイント
実際に構築してみて、いくつかハマったポイントがあったのでシェアします。
ポイント1: Docker Buildxのバージョンに注意
docker compose build
を実行したら、こんなエラーが出ました:
compose build requires buildx 0.17.0 or later
Amazon Linux 2023のデフォルトDockerには、buildxが古いバージョンしか入っていないんですよね。
上記の手順でbuildxを最新版にすることで解決できます。
ポイント2: dockerグループへの追加後は再ログイン必須
sudo usermod -aG docker $USER
これ、実行しただけじゃダメで、一度ログアウト→ログインしないと反映されないんですよね。
最初、「Permission denied」エラーが出て「???」ってなりました ^^;
ポイント3: メモリ不足に注意
t3.largeで試したら、一部のコンテナがOOM Killedになりました。
やっぱりt3.xlarge以上が安定します。
どうしてもコストを抑えたい場合は、loggeneratorとloadgeneratorを停止すると少し軽くなります:
docker compose stop loggenerator loadgenerator
ポイント4: ビルド時間は長い
初回ビルドは本当に時間がかかります。20-30分は覚悟しておいた方がいいです。
tmuxやscreenを使って、切断されても大丈夫なようにしておくと安心。
ポイント5: Datadogにデータが表示されるまで数分かかる
サービスが起動してすぐは、Datadogにデータが表示されません。
「あれ、動いてない?」と焦りましたが、2-3分待ったら表示され始めました。
気長に待ちましょう ^^
便利なコマンドメモ
構築・運用で使ったコマンドをメモしておきます。
ログ確認
# すべてのサービスのログ docker compose logs # 特定のサービスのログ(最新100行) docker compose logs --tail=100 frontend # リアルタイムでログを追跡 docker compose logs -f frontend # エラーログのみ抽出 docker compose logs | grep -i error
サービス管理
# 特定のサービスを再起動 docker compose restart frontend # すべてのサービスを再起動 docker compose restart # サービスを停止 docker compose stop # サービスを開始 docker compose start # サービスを停止して削除 docker compose down # ボリュームも含めて削除 docker compose down -v
デバッグ
# コンテナに入る docker compose exec frontend /bin/sh # コンテナ内でコマンド実行 docker compose exec frontend ps aux # ネットワーク接続の確認 docker compose exec frontend ping redis # リソース使用状況 docker stats
まとめ
TSRE MicroservicesをAWS EC2上に構築してみましたが、思ったよりも簡単に立ち上げられました!
構築のポイントまとめ:
- EC2はt3.xlarge以上 - メモリ16GBは欲しい
- Docker Buildx 0.17.0以上が必要 - Amazon Linux 2023のデフォルトは古い
- 初回ビルドは時間がかかる - 20-30分は覚悟
- docker-compose.ymlにDatadog Agentが含まれる - ホストレベルのAgentインストールは不要
- Unix Domain Socketによる高速通信 -
/var/run/datadogの共有がキモ - 統合サービスタグで可視化が楽 -
DD_ENV、DD_SERVICE、DD_VERSIONの威力 - セキュリティ機能も全部入り - AppSec、IAST、SCAまで体験可能
この環境の活用方法:
この環境、以下のような用途で活用できます:
- デモ環境として - APM、分散トレーシング、Service Mapの実演
- ハンズオン環境として - 実際に触りながら学べる
- 検証環境として - パフォーマンステスト、ボトルネック分析
- トラブルシューティング演習 - 意図的に障害を注入して練習
個人的には、「マイクロサービスの監視ってこういうことか!」っていうのが体感できるのが一番大きいなと思いました。
パートナー支援でお客様にお見せする際も、このリアルな環境があると説明がめちゃくちゃしやすくなります。
次は、Toxiproxyで障害注入してみたり、カスタムメトリクスを追加してみたりと、色々遊んでみたいですね ^^
参考リンク:
- TSRE Microservices GitHub
- Datadog APM ドキュメント
- 統合サービスタグ
お知らせ
当社では、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。
初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。
「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。