# Enabling Client-side SLO
## 概要
[[Luup]] の SRE エンジニア [[Wataru Tsuda]](gr1m0h)による SRE NEXT 2024(2024-08-04, Track B)の発表。2023 年の SRE NEXT での「Enabling SLO の実践」(Backend/IoT 対象)の続編として、iOS/Android クライアントへの SLO 導入経緯と技法を紹介する。クライアントサイドは API のみの計測では BLE 操作等が漏れるため、より「ユーザーに近い」視点での計測が必要という動機から始まった。
## 主要メッセージ
- **なぜクライアントサイド SLO の事例が少ないのか**(p.10): コスト問題・ユーザー側の都合(ネットワーク/端末/途中キャンセル)・SRE はバックエンド/インフラ出身が多く慣れていない・API でほぼ完結するサービスは必要性が低い、という理由が推察される。
- **Luup の動機**(p.11): (1) よりユーザーに近い部分で計測したい、(2) クライアントが API を介さず Firestore を直接叩くケースがある、(3) BLE でのアクション(施錠・解錠・ライド開始終了)を含めてユーザー体験を計測したい。
- **4 つの取り組み**(p.13): CUJ 再設定 → SLI 設定 → 文化醸成 → SLO 設定、という順序で実施。
- **文化醸成が最重要**(p.26): Enabling していく中で文化醸成・運用の軌道乗せが一番重要とされる。
## 視覚的に重要な図表
**p.13 — 4 つの取り組み概要**
![[_attachments/20240804_SRENEXT2024/page-013.png]]
①CUJ 再設定(PdM・SWE と連携)、②SLI 設定(Datadog にメトリクスをアップロード・Latency SLI 閾値決定)、③文化醸成(ダッシュボード作成・Weekly 確認)、④SLO 設定(Datadog Time Slice SLO・複数 SLO 作成)の 4 フェーズ。
**p.17 — ユーザージャーニーマトリクス**
![[_attachments/20240804_SRENEXT2024/page-017.png]]
PdM・SWE・SRE で議論した結果を表にまとめたもの。列は Type / UserJourney / SRE Activities / Priority / SLO / SLO links / Android TraceName / iOS TraceName / 関連WebAPI で構成され、Enabling SLO で継続更新する。
**p.27 — SLI ダッシュボード**
![[_attachments/20240804_SRENEXT2024/page-027.png]]
Datadog で CUJ ごとにグルーピングし、iOS と Android のパフォーマンスグラフを横に並べた。PdM/SWE がイメージしやすいよう設計。ヒット数として 39.76k と 317.65k が表示されている(具体的な CUJ 名はモザイク)。
**p.31 — Monitor-based SLO vs Time Slice SLO 比較表**
![[_attachments/20240804_SRENEXT2024/page-031.png]]
Monitor-based SLO: SLI はモニターのアップタイムを基にする(モニターが必須・SLO 作成時に調整不可)。Time Slice SLO: SLI はカスタムアップタイム定義(合計時間で割ったもの)を基にする(モニター不要・作成中に即座にダウンタイムを調査可能)。Time Slice SLO は 2024-05-02 に GA。
**p.33 — Multi-tiered SLOs の 3 段階定義**
![[_attachments/20240804_SRENEXT2024/page-033.png]]
| Upside SLO | Downside SLO | Actual SLO |
|---|---|---|
| 将来的に目指す水準(理想値)<br>e.g. 99%, 1sec | 現実的に割りたくない水準(現状監視中)<br>e.g. 99%, 3sec | Downside を割っている一部 SLO のみ作成<br>e.g. 99%, 5sec |
**p.34 — フェーズ別ロール・SLO 注目度マトリクス**
![[_attachments/20240804_SRENEXT2024/page-034.png]]
Now / Near Future(Actual is gone)/ Future(Downside is gone)の 3 フェーズにわたり、PdM と SWE がどの SLO タイプ(Upside/Downside/Actual)を強く意識するかを示す表。Now は SWE が Downside・Actual を中心に監視し、PdM は Upside を中心に意識する。将来的には Actual を廃止し Downside のみを見る状態を目指す。
## 取り組みの詳細
### CUJ 再設定(p.15–17)
これまでの CUJ は「施錠・解錠・ライド開始・ライド終了」という サービス的に自明なものを使っていた。クライアントの SLO 設定にあたり、サービス全体観からユーザージャーニーを洗い出し、PdM・SWE・SRE で議論して CUJ を再設定した。PdM が Figma でユーザージャーニー一覧を作成し、それを基に 3 者で議論してユーザージャーニーマトリクスにまとめた。
### SLI の設定(p.19–24)
Availability SLO と Latency SLO を候補とした。既存計測ツールとして iOS/Android ともに以下があった:可用性 = Firebase Crashlytics(→ Datadog RUM)、レイテンシ = Firebase Performance Custom Trace(→ Datadog APM)。Firebase では SLI/SLO を設定できないため Datadog にメトリクスをアップロードする方針とした。Datadog RUM はコスト面から断念し、**Latency SLO から先行着手**(運用実績を積む)とした。
Latency SLI のメトリクス: 本番環境の APM Metrics(CUJ の実行時間)の **p75**。クエリ: `p75:trace.<TRACE_NAME>{service:<SERVICE_NAME>, env:production}`。p75 を選んだ根拠は **Core Web Vitals の Good LCP Score が 75%ile を採用**していること(Web 周りの事例を参照)。ユーザー側都合の外れ値を除外しつつ多数のユーザー体験をカバーする折り合い点とした。
SDK 導入: Datadog SDK を使って Trace を Datadog にアップロード。トライアル段階では SRE がメインで動き、iOS/Android チームのサポートのもと SDK 導入・Trace 設定部分をコーディングした(p.21)。
### 文化醸成(p.26–28)
Enabling の中で最も重要視した部分。(1) SLI を見るダッシュボードを作成: SLO 設定のための情報収集と SLI への馴染みを目的に、PdM/SWE がイメージしやすいよう CUJ ごとにグルーピングし iOS/Android のグラフを横並びにした。(2) SLI/SLO を Weekly で確認: SRE がファシリテーションしサマリーを共有、CUJ/SLI/SLO の妥当性とパフォーマンスについて議論した。
### SLO の設定(p.30–34)
**Datadog Time Slice SLO を採用**(2024-05-02 GA)。API の Latency SLO では Monitor-based SLO を使っていたが、Time Slice SLO は Datadog モニターが不要でメトリクスフィルターやしきい値を SLO 作成中に即座に調査できる利点がある。最小 1 分単位で評価でき、短期的なパフォーマンス変動を許容する(割合で丸められることを受け入れる)。
**Multi-tiered SLOs**(Alex Ewerlöf の概念を参照): 1 つの SLI に対して Upside / Downside / Actual の 3 段階 SLO を設定。現時点では Downside SLO を注視して運用する。
## 今後の展望(p.36)
- **アラート設定**: Burn Rate Alert の調整・SLO の補助アラート追加
- **運用**: Actual SLO を廃止し Downside だけ見る状態へ移行、API の SLO との接続
- **SLO 追加**: Client-side Availability SLO の追加
## 概念・実体への接続
- 登壇者: [[Wataru Tsuda]]
- 組織: [[Luup]]
- 概念: [[サービスレベル目標]] / [[SLI-SLO段階的導入]]
- 前作: [[@2023__SRENext2023__電動マイクロモビリティのシェアサービス「LUUP」におけるEnabling SLOの実践]]
## 限界・不確実点
- transcript なし(音声未取得)。口頭補足がある可能性がある。
- ユーザージャーニーマトリクス(p.17)の具体的な CUJ 名・SLO 値はモザイクで読み取れない。
- SLI ダッシュボード(p.27)の具体的なグラフ値・CUJ 名もモザイク。
- Datadog RUM を断念した「コスト等の観点」の詳細は記載なし。