APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【Datadog】Datadog TSRE Microservices(Swagstore)を検証環境としてサクッと構築する

はじめに


当社では、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。

初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。

「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。

www.ap-com.co.jp


こんにちは、クラウド事業部の加藤です。

Datadogのパートナー支援をしていると、「実際に動くマイクロサービスのデモ環境が欲しい」というご要望をよくいただきます。

そんなとき、Datadog公式が提供している TSRE Microservices というデモアプリケーションがめちゃくちゃ便利なんです!

今回は、このTSRE MicroservicesをAWS 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_ENVDD_SERVICEDD_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 SettingsAPI 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_ENVDD_SERVICEDD_VERSIONの威力
  • セキュリティ機能も全部入り - AppSec、IAST、SCAまで体験可能

この環境の活用方法:

この環境、以下のような用途で活用できます:

  • デモ環境として - APM、分散トレーシング、Service Mapの実演
  • ハンズオン環境として - 実際に触りながら学べる
  • 検証環境として - パフォーマンステスト、ボトルネック分析
  • トラブルシューティング演習 - 意図的に障害を注入して練習

個人的には、「マイクロサービスの監視ってこういうことか!」っていうのが体感できるのが一番大きいなと思いました。

パートナー支援でお客様にお見せする際も、このリアルな環境があると説明がめちゃくちゃしやすくなります。

次は、Toxiproxyで障害注入してみたり、カスタムメトリクスを追加してみたりと、色々遊んでみたいですね ^^


参考リンク:
- TSRE Microservices GitHub
- Datadog APM ドキュメント
- 統合サービスタグ


お知らせ

当社では、Datadogの導入支援から運用サポートまでをトータルでご支援するサービスを提供しています。

初期設計・エージェント展開・モニタリング設定・ダッシュボード構築まで、お客様のニーズに合わせた支援が可能です。

「自社だけでの導入が不安」「もっと効率的に監視環境を整えたい」という方は、ぜひお気軽にご相談ください。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: <加藤涼太>
クラウドやオブザーバビリティについて発信しています!