# 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 を断念した「コスト等の観点」の詳細は記載なし。