
こんにちは。クラウド事業部の遠見です。
本記事は、さくらのクラウドの「モニタリングスイート」を検証したエンジニアが内容をできる限り客観的に共有することを目的に、生成AIを活用して作成したものです。
今回は、さくらのクラウドが提供するオブザーバビリティ基盤である「モニタリングスイート」の動作検証を行いました。
その内容をまとめます。
最終的には、以下のような分散トレースの可視化が実現できます。

目次
はじめに
モニタリングスイートとは
モニタリングスイートは、さくらのクラウドが提供するオブザーバビリティのマネージドプラットフォームです。
ログ・メトリクス・トレースのストレージとアラート、ダッシュボードを提供しています。
| 機能 | 内容 |
|---|---|
| ログストレージ | OTLP/HTTP対応。fluentbit、OTel Collectorなどから送信可能 |
| メトリクスストレージ | Prometheus Remote Write 1.0対応。PromQLでクエリ可能 |
| トレースストレージ | OTLP/HTTP対応。分散トレースの可視化が可能 |
| ダッシュボード | Perses(OSSのグラフ可視化ツール)ベース |
| アラート | メトリクスの条件に基づき、シンプル通知・EventBusと連携可能 |
さくらのクラウド上のサービスだけでなく、オンプレや他社クラウド・ローカルPCからのデータも集約できる点が特徴です。
参考
OpenTelemetry Demoとは
モニタリングスイートを試す際、テレメトリデータ(ログ、メトリクス、トレースなどの総称)の「送信元」となるアプリが必要です。
さくらのクラウド公式マニュアルではサンプルアプリを見つけられなかったため、OpenTelemetry(OTel)コミュニティが公開している「opentelemetry-demo」を活用することにしました。
このデモアプリの特徴は以下のとおりです。
| 項目 | 内容 |
|---|---|
| 構成 | 分散マイクロサービスのECサイト |
| 計装済み | OTelの計装(ログ・メトリクス・トレース送信)がすでに組み込まれている |
| 起動方法 | docker compose upだけで全サービスが起動 |
| ライセンス | Apache-2.0(商用利用も可能) |
デモアプリに内蔵されたOTel Collectorのエクスポート先を、sacloud-otel-collectorに向けるだけで、テレメトリデータをモニタリングスイートに流し込めます。
具体的には、デモアプリ側のexporterで中継用コレクター(sacloud-otel-collector)の4317ポート(OTLP/gRPC)を指定してあげるだけで、アプリケーションに手を加えることなく、テレメトリデータがバイパスされます。
sacloud-otel-collectorとは
sacloud-otel-collectorは、さくらインターネット公式が提供しているOTel Collectorのカスタムビルド(派生版)です。
各種テレメトリデータを、モニタリングスイートへ効率的かつ安全に送信するための機能が組み込まれています。
特徴として、公式が推奨する「sacloud exporter」が標準で用意されています。
sacloud exporterの特徴
- モニタリングスイート向けに送信処理が最適化されている
- インターネット経由の送信に適したデータ圧縮機能
- ネットワーク一時切断時のリトライ・キュー管理(バッファリング)機能を内蔵
このコレクターを中継させることで、ローカル環境からでも安定してモニタリングスイートへデータを送り届けることが可能になります。
検証日時
2026年6月7日
検証のゴール
| 項目 | 確認内容 |
|---|---|
| ログ | デモアプリのログがモニタリングスイートに届くか |
| メトリクス | メトリクスが可視化できるか |
| トレース | リクエストの一連の処理フロー(サービスをまたぐ遷移)が追跡できるか |
ポイントは、「sacloud-otel-collectorがインターネット経由でモニタリングスイートにHTTPS送信する」点です。
検証環境
構成
| 項目 | 内容 |
|---|---|
| バックエンド | さくらのクラウド モニタリングスイート |
| コレクター | sacloud-otel-collector(さくら公式のカスタムOTel Collector) |
| 送信元 | OTelデモアプリ |
| 実行環境 | ローカルPC(Windows)のDocker Desktop |
構成図

ローカル環境
| 項目 | 内容 |
|---|---|
| OS(ローカルPC) | Windows 11 Home 25H2 |
| Docker Desktop for Windows | 4.76.0 |
| git | 2.54.0.windows.1 |
| opentelemetry-demo (GitHub) | 2.2.0 |
事前準備
さくらのクラウド
アカウントの作成
さくらのクラウドのアカウントをまだ持っていない方は、新規登録する必要があります。
ローカルPC
Docker Desktopのインストール確認
Docker Desktop for Windowsをインストールします。
具体的なインストール方法は本題ではないので省略します。
ローカルPCでDockerおよびDocker composeが利用できることを確認します。
docker --version
docker compose version
result
# docker --version Docker version 29.5.2, build 79eb04c # docker compose version Docker Compose version v5.1.4
構築
さくらのクラウド
モニタリングスイートのログ・メトリクス・トレースのストレージ作成
以下を作成します。
| ストレージ種別 | 作成時の設定 |
|---|---|
| ログストレージ | 名前: otel-demo-logs、保存期間: デフォルト(40日) |
| メトリクスストレージ | 名前: otel-demo-metrics、保存期間: デフォルト |
| トレースストレージ | 名前: otel-demo-traces、保存期間: デフォルト |
- 最初に作成するログ・メトリクスストレージは「システム領域」になります。
- 2つ目以降が「ユーザー領域」です。
- 今回は「ユーザー領域」を使用します。
例として、ログストレージの作成方法を記載します。
[モニタリングスイート] > [ログストレージ] > [追加] をクリックします。

最初に作成するストレージでは、システム領域しか選べません。
任意の名前を記載し、[作成]をクリックします。

ステータスが「成功」となったら、[閉じる]をクリックします。

2つ目に作成するログストレージでは、ユーザー領域が選択可能になります。
任意の名前を記載し、[作成]をクリックします。

同じ要領で、メトリクス、トレースのストレージも作成します。
各ストレージのアクセスキー作成・情報取得
各ストレージの詳細画面から 「アクセスキー」タブを選択し、アクセスキーを追加します。
例として、ログストレージのアクセスキー作成方法を記載します。
[ログストレージ] > [ユーザー領域のストレージ] の右端にあるプルダウンから、[詳細]をクリックします。

[アクセスキー]タブを選択し、[追加]をクリックします。

[作成]をクリックします。

作成したアクセスキーの右端にあるプルダウンから、[詳細]をクリックします。

[アクセスキー 詳細]ダイアログが表示されます。 以下の情報を取得します。
- エンドポイントURL
- アクセストークン

同じ要領で、トレースとメトリクスのアクセスキーも作成します。
エンドポイントはxxxx.logs.monitoring.global.api.sacloud.jp 形式となっており、ストレージ種別ごとに異なります。
アクセストークンも同様にストレージ種別ごとに異なった形式となっています。
- ログ:
log-xxxx - メトリクス:
met-xxxx - トレース:
trc-xxxx
取得した6つの値(エンドポイント×3 + トークン×3)は、次のステップで設定ファイルに記載します。
ローカルPC
OTelデモアプリとsacloud-otel-collectorの起動
リポジトリのcloneと設定ファイルの作成
opentelemetry-demoをcloneします。
git clone https://github.com/open-telemetry/opentelemetry-demo.git
cloneしたディレクトリに移動します
cd opentelemetry-demo
次に、sacloud-otel-collector用の設定ファイルを作成します。
opentelemetry-demoディレクトリ内にsacloud-otelcolフォルダを作成し、config.ymlを配置します。
以下の内容で作成します。
<エンドポイントID>の部分を、先ほど取得した各エンドポイントURLの数字の部分に、トークンもそれぞれに対応する値に置き換えます。
sacloud-otelcol/config.yml
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: exporters: sacloud: metrics: endpoint: "<エンドポイントID>" token: "<met-*****>" logs: endpoint: "<エンドポイントID>" token: "<log-*****>" traces: endpoint: "<エンドポイントID>" token: "<trc-*****>" service: pipelines: logs: receivers: [otlp] processors: [batch] exporters: [sacloud] metrics: receivers: [otlp] processors: [batch] exporters: [sacloud] traces: receivers: [otlp] processors: [batch] exporters: [sacloud]
参考
<エンドポイントID>でうまく動作しない場合
もし、<エンドポイントID>でうまく動作しない場合は、下記のGitHubを参考に"https://<エンドポイントURL>を試してみてください。
# Replace endpoint identifiers and tokens with your monitoring suite's configurations. exporters: sacloud: metrics: endpoint: "123456789012" # or "https://123456789012.metrics.monitoring.global.api.sacloud.jp/prometheus/api/v1/write" token: "${SACLOUD_METRICS_TOKEN}" # met-*************** logs: endpoint: "123456789012" # or "https://123456789012.logs.monitoring.global.api.sacloud.jp" token: "${SACLOUD_LOGS_TOKEN}" # log-*************** traces: endpoint: "123456789012" # or "https://123456789012.traces.monitoring.global.api.sacloud.jp" token: "${SACLOUD_TRACES_TOKEN}" # trc-***************
- メトリクスのseries上限について
モニタリングスイートのメトリクスストレージは、1時間あたり5,000新規seriesの上限があります。
OTelデモはデフォルトで多数のreceiverを持つため、初めはseries数が上限を超えて429エラーになりました。
そのため、sacloud-otelcol/config.ymlのmetricsパイプラインのreceiverを[otlp]のみにすることで回避しています。
| 書き込みレート制限 | 1時間あたり5,000の新規Series |
実際のエラー
```
error prometheusremotewriteexporter@v0.142.0/exporter.go:487 failed to send WriteRequest to remote endpoint {"resource": {"service.instance.id": "eb1475ba-698a-4933-b2b0-7165a57b76bb", "service.name": "sacloud-otel-collector", "service.version": "v0.6.1"}, "otelcol.component.id": "sacloud", "otelcol.component.kind": "exporter", "otelcol.signal": "metrics", "status_code": 429, "status": "429 Too Many Requests", "endpoint": "https://xxxx.metrics.monitoring.global.api.sacloud.jp/prometheus/api/v1/write", "retry_attempt": 1, "error": "request was rate limited by: \"new series limit reached\""}
```
sacloud-otelcolをcompose.yamlに追記
OTelデモのcompose管理ネットワークに参加させることで、サービス名(sacloud-otelcol)でコンテナ間通信が可能になります。
compose.yaml
sacloud-otelcol: image: ghcr.io/sacloud/sacloud-otel-collector:latest container_name: sacloud-otelcol restart: unless-stopped volumes: - ./sacloud-otelcol/config.yml:/config.yml command: ["--config", "/config.yml"]
otelcol-config-extras.ymlの設定
src/otel-collector/otelcol-config-extras.ymlは、OTelデモアプリが予め用意してくれている「外部バックエンド(今回は sacloud-otel-collector)と連携するための追加設定ファイル」です。
デモアプリのルート直下にあるcompose.ymlを確認すると、デモ内蔵のOTel Collectorを起動する際、以下のようにベース設定(本体)とこの追加設定の2つを続けて読み込む指定がされています。
command: - --config=/etc/otelcol-config.yml - --config=/etc/otelcol-config-extras.yml
これにより、起動時に2つのファイルがマージされます。
注意として、YAMLの融合ルールでは、「オブジェクト(辞書型)は追記」されますが、「配列(リスト型 [ ... ])は丸ごと上書き」されてしまいます。
出力ルートを決めるexporters: [...]は配列のため、追加ファイル側にさくらの設定だけを書くと、ベース設定にあった標準の出力先(JaegerやPrometheusなど)が消えてしまいます。
今回は、ローカル側のバックエンド群(JaegerやOpenSearchなど)のコンテナ負荷を下げ、さくらへの送信に検証を絞り込みたかったため、それらへの送信はカットし、コンソール確認用のdebugだけをピックアップしてexporters: [debug, otlp/sacloud]と並べて記述しています。
これでローカル側はコンソールログ出力(debug)だけに絞り込みつつ、中継役のsacloud-otel-collector(ポート4317 / OTLP gRPC)へテレメトリデータを転送できます。
以下の内容で上書きします。
src/otel-collector/otelcol-config-extras.yml
exporters: otlp/sacloud: endpoint: http://sacloud-otelcol:4317 tls: insecure: true service: pipelines: traces: exporters: [debug, otlp/sacloud] metrics: receivers: [otlp] exporters: [debug, otlp/sacloud] logs: exporters: [debug, otlp/sacloud]
docker compose upで起動
docker compose up -d
起動後、全コンテナがUpになっていることを確認します。
docker compose ps
sacloud-otelcolを含む全コンテナがrunning状態であればOKです。
docker ps
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
57457470f490 ghcr.io/open-telemetry/demo:latest-frontend-proxy "/bin/sh -c 'envsubs…" 3 hours ago Up About a minute 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp, 0.0.0.0:10000->10000/tcp, [::]:10000->10000/tcp frontend-proxy
9e933d6ebba2 ghcr.io/open-telemetry/demo:latest-load-generator "locust --skip-log-s…" 3 hours ago Up About a minute 0.0.0.0:53192->8089/tcp, [::]:53192->8089/tcp load-generator
e51d3a173a47 ghcr.io/open-telemetry/demo:latest-frontend "/nodejs/bin/node --…" 3 hours ago Up About a minute (healthy) 0.0.0.0:53191->8080/tcp, [::]:53191->8080/tcp frontend
c93ee636821b ghcr.io/open-telemetry/demo:latest-checkout "./checkout" 3 hours ago Up About a minute 0.0.0.0:53188->5050/tcp, [::]:53188->5050/tcp checkout
b4811f54fa90 ghcr.io/open-telemetry/demo:latest-product-reviews "/venv/bin/opentelem…" 3 hours ago Up About a minute 0.0.0.0:53190->3551/tcp, [::]:53190->3551/tcp product-reviews
6390f47cfbdc ghcr.io/open-telemetry/demo:latest-recommendation "/venv/bin/opentelem…" 3 hours ago Up About a minute 0.0.0.0:53189->9001/tcp, [::]:53189->9001/tcp recommendation
00c6283635cb ghcr.io/open-telemetry/demo:latest-ad "./build/install/ope…" 3 hours ago Up About a minute 0.0.0.0:53183->9465/tcp, [::]:53183->9465/tcp, 0.0.0.0:53184->9555/tcp, [::]:53184->9555/tcp ad
1dc48260d11f ghcr.io/open-telemetry/demo:latest-product-catalog "./product-catalog" 3 hours ago Up About a minute 0.0.0.0:53187->3550/tcp, [::]:53187->3550/tcp product-catalog
128366a7bd1f ghcr.io/open-telemetry/demo:latest-quote "docker-php-entrypoi…" 3 hours ago Up About a minute 0.0.0.0:53186->8090/tcp, [::]:53186->8090/tcp quote
bbe5570ec0c3 ghcr.io/open-telemetry/demo:latest-image-provider "/docker-entrypoint.…" 3 hours ago Up About a minute 0.0.0.0:53182->8081/tcp, [::]:53182->8081/tcp image-provider
d8e51497424a ghcr.io/open-telemetry/demo:latest-payment "/nodejs/bin/node --…" 3 hours ago Up About a minute 0.0.0.0:53179->50051/tcp, [::]:53179->50051/tcp payment
ec36308a2cf8 ghcr.io/open-telemetry/demo:latest-cart "./cart" 3 hours ago Up About a minute 0.0.0.0:53177->7070/tcp, [::]:53177->7070/tcp cart
dac8ea60a25f ghcr.io/open-telemetry/demo:latest-shipping "./shipping" 3 hours ago Up About a minute 0.0.0.0:53178->50050/tcp, [::]:53178->50050/tcp shipping
21e1487c2d6c ghcr.io/open-telemetry/demo:latest-currency "sh -c './usr/local/…" 3 hours ago Up About a minute 0.0.0.0:53185->7001/tcp, [::]:53185->7001/tcp currency
423d08d80e27 ghcr.io/open-telemetry/demo:latest-email "bundle exec ruby em…" 3 hours ago Up About a minute 0.0.0.0:53180->6060/tcp, [::]:53180->6060/tcp email
6a84c62d9979 ghcr.io/open-telemetry/demo:latest-flagd-ui "sh -c 'ulimit -n 65…" 3 hours ago Up About a minute 0.0.0.0:53181->4000/tcp, [::]:53181->4000/tcp flagd-ui
5bd49165b789 ghcr.io/open-telemetry/demo:latest-llm "/venv/bin/python ap…" 3 hours ago Up About a minute 0.0.0.0:53176->8000/tcp, [::]:53176->8000/tcp llm
c635b4a16a80 ghcr.io/open-telemetry/demo:latest-telemetry-docs "/docker-entrypoint.…" 3 hours ago Up About a minute 0.0.0.0:53171->8000/tcp, [::]:53171->8000/tcp telemetry-docs
f63326d940dc ghcr.io/sacloud/sacloud-otel-collector:latest "/sacloud-otel-colle…" 3 hours ago Up About a minute 4317-4318/tcp, 8888/tcp, 13133/tcp sacloud-otelcol
d01b9425ba98 postgres:17.8 "docker-entrypoint.s…" 3 hours ago Up About a minute 0.0.0.0:53175->5432/tcp, [::]:53175->5432/tcp astronomy-db
3d4228681676 ghcr.io/open-feature/flagd:v0.14.2 "/flagd-build start …" 3 hours ago Up About a minute 0.0.0.0:53169->8013/tcp, [::]:53169->8013/tcp, 0.0.0.0:53170->8016/tcp, [::]:53170->8016/tcp flagd
7e1dbf11fdce ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.151.0 "/otelcol-contrib --…" 3 hours ago Up About a minute 0.0.0.0:53173->4317/tcp, [::]:53173->4317/tcp, 0.0.0.0:53174->4318/tcp, [::]:53174->4318/tcp otel-collector
8fe0e1b403b3 ghcr.io/valkey-io/valkey:9.0.2-alpine3.23 "docker-entrypoint.s…" 3 hours ago Up About a minute 0.0.0.0:53172->6379/tcp, [::]:53172->6379/tcp valkey-cart
Docker Desktopからも確認可能です。

デモアプリへのアクセス確認
ブラウザからhttp://localhost:8080にアクセスします。
ECサイトのデモアプリが表示されればOKです。
商品の閲覧・カート追加などの操作を通じてテレメトリデータが生成されます。

検証:モニタリングスイートの確認
モニタリングスイート一覧への正しい行き方が不明ですが、以下の流れで確認しました。
ログ
[ログストレージ] > [ユーザー領域のストレージ] の右端にあるプルダウンから、[詳細]をクリックします。
[情報]タブ> [内容を閲覧]をクリックします。

すると、モニタリングスイート一覧画面へ遷移できます。
以下を確認しました。
ERRORフィルタ

- cart

- payment

単なるテキストのログ転送にとどまらず、Node.js(payment)や.NET(cart)といったマルチ言語環境のメタデータ、OTel独自のtrace_id、さらにはエラー発生時のソースコードの行数(Python/Locust)まで、構造化データとしてパースされて届いています。
画面のように、左側のメニュー(ファセット)を使えば、特定のマイクロサービスやERRORログだけの絞り込みもスムーズに行うことができます。
メトリクス
[Metrics]を選択します。
PromQLでクエリを試します。
- HTTPリクエスト数の合計
http_server_request_duration_seconds_count

デモアプリから収集されたhttp_server_request_duration_seconds_countをPromQLで検索し、負荷テストによってリクエスト数が右肩上がりに増えていく様子が、時系列グラフとして可視化されました。
トレース
[Traces]を選択します。

ユーザーの購入リクエスト(user_checkout_single)を起点とした詳細な分散トレースが描画されています。
フロントエンドから始まった処理が、checkout、cart、payment、そしてメール送信を行うemailへと、マイクロサービス間をまたいで次々と処理が伝播していく様子(呼び出し関係)が追跡できています。
全体の処理時間である7.91sのうち、どのコンポーネントがボトルネックになっているかを視覚的に特定できます。
アラート
[Alerts]を選択します。
アラートルールを以下のように追加してみました。
| 項目 | 設定値 |
|---|---|
| メトリクスストレージ | otel-demo-metrics |
| ルール名 | http-request-rate-warning |
| Query | rate(http_server_request_duration_seconds_count[1m]) |
| Warning しきい値 | >= 0.01、継続時間: 15秒 |

OTelデモアプリは、load-generatorが常にリクエストを送り続けているため、15秒後にWarningアラートが発火します。

ダッシュボード
ダッシュボードはメトリクスをグラフで可視化する機能です(Persesベース)。
ダッシュボードプロジェクトの作成
[ダッシュボード] > [追加]をクリックします。

任意の名前を入れて、[作成]をクリックします。

Persesにログイン
作成したダッシュボードの閲覧でPersesに遷移し、[Sign in with Sakura Cloud]でログインします。

ダッシュボード・パネルの作成
[ADD DASHBOARD] > [ダッシュボード名を入力] > [ADD]でパネルを追加します。
| 項目 | 設定値 |
|---|---|
| Type | Time Series Chart等 |
| Prometheus Datasource | otel-demo-metrics |
| PromQL Expression | 例: rate(http_server_request_duration_seconds_count[1m]) |

さくらのコントロールパネルとシームレスに連携できました。
まとめ
モニタリングスイートは、ストレージを作成してアクセスキーを取得するだけというシンプルな設計が好印象でした。
OpenTelemetryなどの業界標準に準拠しているため、特定のベンダー仕様にロックインされることなく、手軽にオブザーバビリティの第一歩を踏み出せるサービスだと感じました。
今回は基本となるテレメトリの可視化を試しました。
次回はアラート運用の詳細な検証や、より実践的なワークロードでの活用など、引き続きユースケースを試していきたいと思います。
参考リンク
公式マニュアル・技術解説
さくらのクラウドの「モニタリングスイート」で多様なシステムを統合監視しよう! | さくらのナレッジ
さくらのクラウド モニタリングスイート専用OpenTelemetry Collector exporterを作りました
Prometheusのクエリ機能とアラート機能 | さくらのナレッジ
OSS・リポジトリ
GitHub - sacloud/sacloud-otel-collector: OpenTelemetry collector for SAKURA Cloud. · GitHub
最後に
弊社はさくらインターネットとパートナー契約を締結しています。 www.ap-com.co.jp
また、一緒に働いていただける仲間も募集中です!
www.ap-com.co.jp