Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭

クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭

Avatar for FUJIWARA Shunichiro

FUJIWARA Shunichiro

July 24, 2026

More Decks by FUJIWARA Shunichiro

Other Decks in Technology

Transcript

  1. 自己紹介 @fujiwara (X, GitHub, Bluesky) @sfujiwara (hatena, mixi2) 2011〜2024 面白法人カヤック

    2025-02〜 さくらインターネット ISUCON 優勝4回 / 運営(出題)4回 github.com/kayac/ecspresso github.com/fujiwara/lambroll
  2. さくらインターネットでの仕事 所属: サービス統括本部 > サービス開発部 > クラウド制御基盤グループ 要するに「VMを立てたり落としたりするコントロールプレーン」を 開発、運用するチーム (AWSでいうとEC2の部分)

    クライアントから呼び出されるAPIサーバー(PHP) VMやdisk(ストレージ)を管理するdaemonやツール(Go, Perl) それらを動かすためのミドルウェアやOS、監視やログ収集基盤 (MySQL, RabbitMQ, Kafka, Elasticsearch...) 依存関係的に 「さくらのクラウド」のマネージドサービスは(ほぼ)使えない
  3. Prometheus → Mackerel にも同時に metrics を送るように OpenTelemetry Collector processors prometheus

    receiver scrape scrape scrape 管理サービス VM /metrics ストレージ管理サービス /metrics ネットワーク管理サービス /metrics Mackerel otlp exporter otlp endpoint
  4. OpenTelemetry Collector をどう用意するか 公式の distribution を使うのが簡単だが… 公式の最小構成では欲しい機能が足りない 全部入りの contrib は何でもかんでも入っているので無駄に大きい

    不要なコンポーネントによるセキュリティリスクなども → 必要なコンポーネントだけを組み合わせてビルドするのが推奨 https://opentelemetry.io/docs/collector/custom-collector/
  5. OpenTelemetry Collector を自分でビルドする 公式に用意された ocb (OpenTelemetry Collector Builder) を使えば簡単 https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder

    dist: name: sacloud-otel-collector description: OpenTelemetry custom collector for sacloud output_path: ./src exporters: - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.125.0 - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.125.0 - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.125.0 processors: - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.125.0 - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.125.0 receivers: - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.125.0 - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.125.0
  6. 別紙2: 技術要件詳細「サービス要件(基本)」 項 番 項目 要件 モニタ コンピュートやRDB等インスタンスベースのサービスについては、インスタンスごとの 107 リング

    CPU使用率、メモリのページング、ディスク容量(使用率)、ストレージのIOPS、スルー 機能 プット、ネットワークトラフィック量を監視、可視化できること 従来はVM外から観測できる CPU, Network, DiskIO のみ提供 メモリやディスク容量の監視にはVM内のagentが必要
  7. 設定例がログ(fluent-bit)/メトリクス(prometheus)/トレース(otel) でバラバラ… [OUTPUT] Name Match Host Port Tls Logs_URI Header

    opentelemetry * ****.logs.monitoring.global.api.sacloud.jp 443 On /v1/logs Authorization Bearer log-****************** remote_write: - url: "https://****.metrics.monitoring.global.api.sacloud.jp/prometheus/api/v1/write" authorization: credentials: met-*********** receivers: otlp: protocols: http: grpc: processors: batch: timeout: 15s send_batch_size: 8092 send_batch_max_size: 16184 exporters: otlphttp/sakura-monitoring-suite: endpoint: https://****.traces.monitoring.global.api.sacloud.jp headers: Authorization: "Bearer trc-*********" service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [otlphttp/sakura-monitoring-suite]
  8. お客様のVMで sacloud-otel-collector を動かせばいいのでは? otel collector なら要件で求められているメトリクスやログを取得 → モニタリングスイートに送信できる メトリクス hostmetrics

    receiver (VM内のメトリクスを取得) prometheusremotewrite exporter (モニタリングスイートへ送信) ログ filelog , journald receiver (VM内のログを取得) otlp exporter (モニタリングスイートへ送信) シングルバイナリでインストールも簡単
  9. 2025-06 sacloud-otel-collector を github.com で公開 github.com/sacloud/sacloud-otel-collector 「これを入れれば項番107を満たせます」とした 項 番 項目

    要件 モニタ コンピュートやRDB等インスタンスベースのサービスについては、インスタンスごとの 107 リング CPU使用率、メモリのページング、ディスク容量(使用率)、ストレージのIOPS、スルー 機能 プット、ネットワークトラフィック量を監視、可視化できること
  10. 2026-01 モニタリングスイート専用 sacloud exporter 作成 exporters: sacloud: metrics: endpoint: "123456789012"

    token: met-****** logs: endpoint: "123456789012" token: log-****** traces: endpoint: "123456789012" token: trc-****** シンプルな設定 + 最適なバッファリング設定も自動 (サーバーが受け付けられないサイズで送信してしまうと100%ロストするので重要) 実は Mackerel Distro of OpenTelemetry (MDOT) Collector の真似
  11. 比較: sacloud exporter を使わない場合 exporters: prometheusremotewrite/sakura-monitoring-suite-metrics: endpoint: https://123456789012.metrics.monitoring.global.api.sacloud.jp/prometheus/api/v1/write headers: Authorization:

    "Bearer met-****" resource_to_telemetry_conversion: enabled: true otlphttp/sakura-monitoring-suite-log: endpoint: https://123456789012.logs.monitoring.global.api.sacloud.jp headers: Authorization: "Bearer log-****" otlphttp/sakura-monitoring-suite-trace: endpoint: https://123456789012.traces.monitoring.global.api.sacloud.jp headers: Authorization: "Bearer trc-****" processors: batch: timeout: 15s send_batch_size: 8092 send_batch_max_size: 16184
  12. 変わらなかったこと: 自分で使う→社内でも使う→他の人も使える sacloud-otel-collector は 最初からOSS化を意図して作ったわけではない 1. 自分のチームで使うために作った 2. 社内の他チームでも使ってもらうようになった 3.

    OSS化してお客様も使えるようになった 自分のために作ったもの → 一般化した形に昇華 ecspressoなどのOSSも全部同じ。最初は自分の仕事を片付けるためのもの 自分の仕事が片付かない道具に価値はない 価値がある道具なら、一般化して他の人も使えるようにすると嬉しい(こともある)
  13. ところでこのサービスは SimpleMQ を多用している SimpleMQ: さくらのクラウドのキューのマネージドサービス (AWSでいうところのSQS) ガバクラ要件のため、IaC(Terraform provider)とSDK(Go)はOSSチームで用意してあるが CLIがなかった 項

    番 項目 リソース作 115 成・管理機 能 要件 システムを稼働させる環境一式を自動的に作成し、管理するために、Infrastructure as Code(IaC)の機能が利用可能であること IaCでは、インフラストラクチャの構成をコードで管理し、冪等性を担保したイン フラストラクチャの構築や全く同一の環境を迅速に複数作成することが可能である こと
  14. テストするためには: API の mock server を書けばよい 新しめのサービスはOpenAPI定義が公開されている SimpleMQの例 https://manual.sakura.ad.jp/api/cloud/portal/?api=simplemq-api →

    SDK実装とAPI定義を突き合わせれば、かなりそれっぽく作れる simplemq-cli, sakura-secrets-cli ともAPI mock serverをリポジトリ内に作成