OpenTelemetryのデモは公式のOpenTelemetryデモがすでに存在しますが、多数のサービスが起動するためにリソースも多く消費します。また、計装の参考に使われることも想定されているため、多数の言語などが使われており、全体を把握したり、改造して固有のデモを作ったりするのは困難です。
このリポジトリの目的は、 ごく簡単な設定でOpenTelemetry対応のオブザーバビリティツールにデモとして妥当な量のトレースやメトリックを自動で送り、中身を改造することも容易という、軽量なデモアプリケーションを提供する ことです(※計装の実装の参考にすることは目的としていません)。
デフォルトではMackerelにトレースおよびメトリックを投稿するように設定されていますが、設定で簡単に別のOpenTelemetry対応のオブザーバビリティツールに投稿できます。Mackerelに限らず、広くオブザーバビリティツールのデモに使われることを期待しています。
架空の商品カタログのWebアプリケーションがデモの題材です。
アプリケーションは挙動の異なる複数のバージョンを動かしています。リクエスト先のアプリケーションバージョンやリクエストエンドポイントによって、「遅い」「エラーが発生する」といった問題が起こるようになっています。
人間が都度実行するのではなく、自動で動かしっぱなしにするデモを想定しています。そのため、複数のロボットが人間のようにブラウザを利用してリクエストを実行します。
Note
ロボットがアクセスすることを前提としているため、実際にはフロントエンドのビューはほぼ用意しておらず、一部を除いてエンドポイントからのレスポンスはJSON形式です。このデモの範囲において、レスポンスの内容はさほど重要ではありません。
各アプリケーションバージョンの挙動は以下のとおりです。
- v0.1:
/products
エンドポイントへのアクセスを受けると3秒後にエラー(例外)が発生します - v1.0:
/products
エンドポイントにN+1問題があり、リクエストのたびに大量のクエリが発行されます - v2.0:
/products
エンドポイントのN+1問題を解決したバージョンです - v3.0:N+1問題をさらにスマートにしたバージョンです。しかしそれとは別に、
/products/{:id}
のエンドポイントの一部のIDでエラー(例外)が発生します
Mackerelのオーガニゼーションを用意します。プランはTrial/Free/Standardを問いません。Standardの場合、メトリックは課金対象になること、およびスパン無料枠を超えた場合もそれは課金対象になることに注意してください(Trial・Freeの場合は無料枠に到達した場合は当月はそれ以上のトレース スパン投稿はできなくなります。詳細)。
オーガニゼーションのAPIキー(Write権限あり)をenv.txt
のMACKEREL_APIKEY=
の後に記述し、保存します。
Note
env.txt
のUSE_SERVICE_VERSION_AS_ENVIRONMENT_NAME
はバージョン文字列をdeployment.environment.name
に入れる(true
)か、service.version
に入れる(false
)かを設定します。
Linux上のDocker環境を想定しています(最低2GB以上のメモリ)。macOSでも動作することを確認していますが、hostmetrics receiverやDocker Stats receiverをカスタマイズして利用するにはLinux OSである必要があります。
最初にイメージをビルドします(初回のみ)。
docker compose build
クリーニング・データベースの初期化・起動の一連の実行をrun.sh
スクリプトにまとめているので、それを実行します。
./run.sh
終了するには以下を実行します。
./run.sh clean
Note
systemdで自動起動化するサービス定義の例をapm-demo.service.sample
に用意しています。
投稿できているかどうかはMackerelのAPM画面や、OpenTelemetry Collectorのログで確認します。
docker compose logs otel-collector -f
sample-app
(apm-demo
ネームスペース)- Ruby on Railsアプリケーションのトレースが含まれます。
sample-app
(apm-demo
ネームスペース)- ホストリソースメトリック、MySQLメトリック、スパンメトリックが含まれます。
otelcol-contrib
(apm-demo
ネームスペース)- OpenTelemetry Collector自身の内部メトリックです。
利用したいツールのドキュメントを参照し、otel-collector-config.yaml
を編集してください。
exporters:
...
otlphttp/アプリケーション名: ←HTTP/Protobufの場合。gRPCであればotlp/アプリケーション名
endpoint: https://… ←エンドポイントURI。必要に応じて以下ヘッダなどを指定
service:
pipelines:
traces:
...
exporters: [debug, otlphttp/アプリケーション名, spanmetrics]
metrics:
...
exporters: [debug, otlphttp/アプリケーション名]
Copyright 2025 Hatena Co., Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.