概要 — 何をする画面か
サービス概要 は、サービス トップレベルメニューの最初の画面(/service)であり、稼働中のサービス(デーモン)のためのキュレーション型ライブ運用ボード です。運用者は注目したいサービスを自分で選び、優先度カード として配置します。各カードは種類ごとに異なるライブ指標を表示し、先頭(最優先)の web/db/session カードが 可用性ゲージ を駆動し、下部のストリップが選択カードの ライブ時系列 を描画します。
主な特徴:
- 選択と並び順はブラウザ(localStorage)に保存されます — サーバー側には何も保存しません。同じアカウントであっても、ブラウザごとにボードの配置が異なる場合があります。
- 読み取り専用かつ軽量 —
ServiceBoardService(15秒キャッシュ)が配下のサブシステム(Web・DB・セッション・カタログ)を単一の正規カード形状に統合します。この画面がリモートサーバーへ新たな直接接続を開くことはありません(後述の DB カードのジャストインタイム鮮度サンプルを除く)。 - 論理的な到達性・負荷のみを扱います。 物理的なポート開放・露出のスキャンは ファイアウォール の担当です(役割の境界)。
このボードはデモ用の架空環境ではなく、すべて実データです。指標のソースは、コレクターがすでに投入しているテーブル、すなわち
infr_web_metric・infr_db_metric・infr_redis_metric・infr_service(カタログ)です。
どんなときに使うか
- シフト開始時に、主要な少数のサービス(例: 主力ウェブサイト、メイン DB、セッション用 Redis)を1画面でざっと確認するとき。
- NOC /ウォールボード ダッシュボードとして(全画面ボタンと高さスライダーで画面にフィットさせます)。
- サービスの 直近の傾向(1h / 6h / 1d)を時系列で確認するとき。
- 起点として: ここで全体感をつかんでから、Web・データベース・セッション・カタログ の詳細へドリルダウンします。
画面構成
上部 KPI ストリップ
realKpi() が算出する全社サマリーです(30秒ポーリングで更新):
| KPI | 意味 | ソース |
|---|---|---|
| Web トラフィック | 登録済みウェブサービス全体の合計 RPS + 帯域 | WebMetricService::kpi(dashboard()) |
| DB 負荷 | access=database コレクター全体の最新保存 QPS の合計 + 総接続数 | DbCollectorService::latest() |
| Web 稼働率 | 24時間の可用性 | WebProbeService::availabilityOrPassive()(能動プローブ優先) |
| レイテンシ | プローブ応答の平均(ms) | 同上 |
| インシデント | 直近7日間に発生したインシデント | InfrIncident created_at ≥ now-7d |
Web 稼働率とレイテンシは 能動的な合成プローブ を優先します。受動的な vts トラフィックカウンターだけでは、トラフィックのない障害・3xx の背後に隠れた 5xx・カウンターのリセットを誤診するため、ボードは
WebProbeServiceの実 HTTP プローブ結果を使用します。プローブがまだ実行されていない(カバレッジがない)場合は、受動方式(web24h)にフォールバックします。
サービス可用性ゲージ
優先順で 先頭の web/db/session カード から描画します(この3種類がボードに1つもない場合はプレースホルダーのヒントを表示します)。
| カード種別 | ゲージ形状 | 中央の値 | トーン規則 |
|---|---|---|---|
| web | 4分割のレスポンスコード・ドーナツ | REQ(現在の RPS) | 2xx=good · 3xx=info · 4xx=warn · 5xx=crit |
| database | 接続飽和率(conn_pct)のアーク | QPS | ≥90 crit · ≥70 warn · それ以外 good |
| session | ヒット率のアーク | OPS | ≥90 good · ≥70 warn · それ以外 crit |
サービスボード(カードグリッド)
選択したサービスを 優先順 にカードとして配置します。各カードは種類ごとに異なる KPI セットを表示します:
| 種別 | 既定のデーモン | ヘッダー(別名) | 主な KPI |
|---|---|---|---|
| web | nginx | 代表ドメイン | レイテンシ · RPS · オープンセッション(アクティブ接続数) · 24時間の累計リクエスト · エラー率 |
| database | mysql/mariadb/postgres/mongo | コレクターの別名 | QPS · 座席(使用中/最大) · 飽和率 · 実行中 · ロック(平均行ロック ms) · slow 累計 · 待機 |
| session | redis | ノードの別名 | OPS · ヒット率 · クライアント(現在のセッション数) · キー数 · 飽和率(メモリ使用率 %) |
| proxy | software_key/proxy | インスタンスの別名 | 依存関係(+N) · レイテンシ · リッスンポート |
| docker | software_key/docker | インスタンスの別名 | 依存関係(+N) · レイテンシ · リッスンポート |
- カードは ドラッグハンドルで並べ替え できます(SortableJS)— DOM の順序がそのまま優先度(
sel)となり、localStorage に永続化されます。 - カード右上の ✕ でボードから削除します。
- proxy/docker カードには可用性ドーナツも時系列もありません(web/db/session のみ)。
ライブサービス(下部の時系列)
系列を持つ選択カード(web/db/session)は、2列グリッド に SVG のエリア+ライン スパークとして描画されます。各グラフには時間軸を判別するための ルーラー(縦のグリッド線と 開始/中間/終了 の HH:MM ラベル)が付きます。上部の レンジ切替(1h · 6h · 1d) で表示ウィンドウを切り替えます(既定は 1h)。
ヘッダーのコントロール
- LIVE トグル — 30秒ポーリングのオン/オフを切り替えます。
- 全画面ボタン — 上部ナビを隠して本文を全面に広げます(ESC で解除 ·
fullscreenミックスイン ·body.infr-fs)。 - 2つの高さスライダー — ボードのカード高さ(既定 118px、90–240)とライブチャートの高さ(既定 50px、34–160)。フィット値は localStorage に永続化されます。
使い方
1) サービスを選ぶ
- ボードヘッダーの [サービスを選択] / [サービスを追加] をクリックして選択モーダルを開きます。
- モーダルは利用可能なすべてのサービスを 種類別 にグループ化します(web → database → session → proxy → docker)。
- サービスをオン(✓)/オフに切り替えます。選択は即座にボードへ反映され、localStorage に保存されます。
初回訪問時の既定 = web・database・session それぞれの先頭項目が自動選択され、可用性ゲージがそのまま機能します。不要な場合はモーダルで選択を解除してください。
2) 優先度を調整する
- カードのドラッグハンドルをつかんで移動します。最前面の web/db/session カード が可用性ゲージの対象になります。
3) 表示ウィンドウを変更する
- 下部ライブストリップの 1h / 6h / 1d ボタンを使います。切り替えると
POST /service/seriesが発行され、選択カードの代表指標をそのウィンドウで再取得します(最大60ポイントにダウンサンプリング)。応答が空の場合は、カードに同梱された系列にフォールバックします。
// POST /service/series リクエスト例
{ "keys": ["web:12", "db:db@blue", "session:blue"], "range": "6h" }
カードキーの規約:
web:{infr_web_service.id}
db:{infr_collector.key} 例: db@blue
session:{node_alias} 例: blue
proxy:{infr_service.id}
docker:{infr_service.id}
4) 全画面の状況ボード
- 全画面ボタン → スライダーでカード/チャートの高さを調整し、壁掛け NOC ボード向けに画面へフィットさせます。
データソース
| カード種別 | ビルダー | 実際のテーブル |
|---|---|---|
| web | WebMetricService::dashboard() + WebProbeService::overlayStatus() |
infr_web_metric(vts カウンター) · infr_web_check(能動プローブ) · infr_web_service |
| database | InfrCollector(access=database) + DbCollectorService::latest()/series() |
infr_db_metric · infr_collector |
| session | RedisMetricService::dashboard() |
infr_redis_metric · infr_instance |
| proxy/docker | InfrService(kind IN proxy,container) |
infr_service · infr_instance |
| KPI インシデント | — | infr_incident(直近7日間) |
時系列のソース:
- web —
infr_web_metricにおける主ドメイン/主ノードのrequest_counterの差分 → RPS(複数ノードのカウンター混在を避けます)。 - database —
infr_db_metric.qps(保存済み指標。ライブ接続はしません)。 - session —
infr_redis_metric.instantaneous_ops_per_sec。
ステータストークン
| トークン | 意味 |
|---|---|
| up | 正常 |
| degraded | 劣化 |
| down | 障害(実際の接続/プローブの失敗) |
| pending | 待機(判定保留。例: データ遅延) |
DB カードの誤った赤表示の回避 — economy 収集モードでは、収集が一時的に遅れて最後のサンプルが5分以上前になると、
statusOfは stale を理由にdownを返します。DB 自体は正常なのに赤い警報が見えてしまうため、ボードは stale による down をpendingへ降格 し、down は実際の接続失敗(ok=false)のときだけ維持します。さらに、ボードを見ているユーザーが在席している場合に限り、最後のサンプルが45秒以上前であればensureFresh(45)によりジャストインタイムで1回サンプリングします(スケジューラーがすでに収集中であれば接続を伴わない no-op)。またこのサンプラーは、リークを防ぐため finally ブロックで接続を破棄します。
アクセス権限
- 読み取り(閲覧): 認証済みのすべてのユーザー(demo=1 以上)。
/serviceはinfr.authグループに属し、追加のレベルゲートはありません。 - 書き込みなし: この画面は完全に読み取り専用です。カードの選択・並び順・高さ・レンジはすべて ブラウザの localStorage にのみ 保存され、サーバー側には何も書き込みません。破壊的な操作がないため、監査ログも記録されません。
- 詳細画面での書き込み(Web のウェブサイト管理、データベース、カタログ のビルド/編集)は、それぞれの画面でゲートされます(例: レベル2以上)。
localStorage のキー:
infr:svcboard:sel:v1 選択したサービス key の配列(順序=優先度)
infr:svcboard:h:v1 ボード/ライブの高さスライダー値
infr:range:service-overview 下部時系列の range(1h/6h/1d)
トラブルシューティング・FAQ
ボードが空です。 ヘッダーの [サービスを追加] で注目したいサービスを配置してください。利用可能なサービスがまったくない場合(コレクターがまだデータを投入していない場合)、選択モーダルのグループが空に見えることがあります — まず コレクター の登録と収集パイプラインを確認してください。
可用性ゲージが表示されません。 ゲージには、優先順で先頭となる web/db/session カードが必要です。proxy/docker しか選んでいない場合はプレースホルダーのヒントが表示されます。web/db/session のカードを少なくとも1枚、前方に配置してください。
下部の時系列が空です。 系列を持つのは web/db/session カードだけで、proxy/docker は対象外です。また、選択したウィンドウ(1h/6h/1d)にソーステーブルのデータがない場合もグラフは空になります。
DB カードが赤いのに DB は正常です。
データ遅延の場合は pending(グレー/待機)へ降格されます。それでも down のままなら実際の接続失敗です — データベース 画面と、コレクター 配下の access=database コレクターの状態を確認してください。
リフレッシュしてもカードが残る/別の PC では違って見えます。 選択と並び順は、サーバー上のアカウント設定ではなくブラウザの localStorage が所有します。ブラウザ・端末ごとに独立しています。
5分のウィンドウが欲しいです。 現在の実装が提供するウィンドウは 1h · 6h · 1d です(既定 1h)。より短い観測には サーバー や データベース といった専用画面を使用してください。
関連項目
- サービス ▸ Web — 登録済みウェブサイトの vts ライブ監視 + 能動プローブによる稼働率
- サービス ▸ データベース — 直接接続による DB 負荷とスキーマ分析
- サービス ▸ セッション — Redis セッションの収容量とスループット
- サービス ▸ カタログ — バージョン原簿からサービスを導出(proxy/docker のソース)
- 管理 ▸ コレクター — コレクターレジストリ(指標のソース)
- リアルタイム/ポーリング — ライブ更新の仕組み
