プロダクトを支えるSREの存在意義と役割 / Significance and role of SRE

C0479b152c326746e911be790617f75b?s=47 katsuhisa_
December 15, 2018

プロダクトを支えるSREの存在意義と役割 / Significance and role of SRE

2018/12/15 に開催されたDevelopers Boost での招待講演の資料です。
https://event.shoeisha.jp/devboost/20181215/session/1892/

SREの存在意義や役割について話しました。
過去にもSREについては色々とお話しているので、よければあわせてご覧ください!
・最高のITエンジニアリングを支える守りと攻めの「設計技術」と「SRE」
https://speakerdeck.com/katsuhisa91/zui-gao-falseitenziniaringuwozhi-erushou-ritogong-mefalse-she-ji-ji-shu-to-sre
・SRE大全 スタディスト編 前半 #hbstudy 85 / SRE Taizen Studist 1
https://speakerdeck.com/katsuhisa91/sre-taizen-studist-1
・SRE大全 スタディスト編 後半 #hbstudy 85 / SRE Taizen Studist 2
https://speakerdeck.com/katsuhisa91/sre-taizen-studist-2

C0479b152c326746e911be790617f75b?s=128

katsuhisa_

December 15, 2018
Tweet

Transcript

  1. Copyright (C) 2018 Studist Corporation. All Rights Reserved プロダクトを支えるSREの存在意義と役割 #devboost

    2018/12/15 Developers Boost 招待講演 @katsuhisa__ / Katsuhisa Kitano Copyright (C) 2018 Studist Corporation. All Rights Reserved
  2. Copyright (C) 2018 Studist Corporation. All Rights Reserved #devboost

  3. • Katsuhisa Kitano / 北野 勝久 • @katsuhisa__ • SRE

    @ Studist Corporation • Organizer of SRE Lounge / Rails Developers Meetup • Linux カーネルと同い年
  4. マニュアル作成・共有プラットフォーム

  5. None
  6. サービスの運用に関わっている人?

  7. SRE をやっている/関わっている人?

  8. 今日のテーマ SRE の存在意義・役割への理解を通じ、 運用業務に役立つ知見を持ち帰ってもらう

  9. Site Reliability Engineering

  10. SRE ? • Google の運用チームを率いていた Ben Treynor 提唱 ◦ SREは、ソフトウェアエンジニアに

    運用チームの設計を依頼した時にできあがるもの • class SRE implements DevOps ◦ それ以外の役割も担う ◦ 「それ以外」の中身は各社で異なる
  11. SREが登場した背景 〜従来型システム運用の問題〜

  12. ▶ 直接的なコスト ▶ 間接的なコスト

  13. 直接的なコスト • 従来型のシステム運用では、 人の手による問題解決に依存しがち ◦ コードを書くことに対し、手作業が増えやすい傾向 ▪ デプロイ ▪ ミドルウェアのconfig

    ファイルの変更 ▪ 障害対応 • サービスの拡大に伴い、運用コストが線形増加
  14. 間接的なコスト • Dev とOps で利害関係の対立が起きやすい ◦ Dev: 「Agility」を求める ◦ Ops:

    「Stability」を求める • はやく機能開発してリリースしたいDev VS. とにかく安定して運用したいOps
  15. SRE のアプローチ

  16. VS. 直接的なコスト →運用をソフトウェアの問題として扱う • ソフトウェアでの自動化・効率化を推進する ◦ サービス規模が拡大しても、 運用コストの線形増加を防ぐ • e.g.

    ◦ 障害時に自動復旧(Self-Healing) ◦ デプロイ自動化 ◦ モニタリングにより 問題と原因を把握する
  17. VS. 間接的なコスト →共通目標でDevとOpsの利害関係を解消 • SLO (Service Level Objective ) を運用

    ◦ サービスレベルを維持できている限りは、 機能開発速度を維持する ◦ サービスレベルを維持できなさそうであれば、 bug fix や、性能の問題解決に注力する • サービスレベルは、後ほど詳細説明します
  18. 詳しくは・・・ 私がCodeZineさんに 寄稿している SREの連載をぜひ! https://codezine.jp/article/detail/11002

  19. SRE のプラクティス

  20. ▶ サービスレベル ▶ OnCall

  21. サービスレベル

  22. サービスレベルに関する用語 • SLI (Service Level Indicator) ◦ サービスレベルの具体的な指標 • SLA

    (Service Level Agreement) ◦ サービスレベルに関する顧客との合意 • SLO (Service Level Objective) ◦ サービスレベルに関する目標 ◦ 主にチーム内で運用
  23. サービスレベルは何を測ればよい? • 可用性 ◦ 一定タイムウィンドウ内でのエラーを集計 ◦ エラーレートが一定値を越えれば、 そのウィンドウをダウンタイムとして計測 ◦ ダウンタイムが一定時間継続すれば障害とみなす

    ▪ リクエストが一定数以下の場合、未計測とする • レイテンシ ◦ 一定タイムウィンドウ内でのレイテンシを集計 ◦ レイテンシの 99%tile を計測
  24. サービスレベルは何を測ればよい? • 可用性 ◦ 一定タイムウィンドウ内でのエラーを集計 ◦ エラーレートが一定値を越えれば、 そのウィンドウをダウンタイムとして計測 ◦ ダウンタイムが一定時間継続すれば障害とみなす

    ▪ リクエストが一定数以下の場合、未計測とする • レイテンシ ◦ 一定タイムウィンドウ内でのレイテンシを集計 ◦ レイテンシの 99%tile を計測 測定しやすいものから始めるとよい e.g. エラーリクエスト / 全リクエスト
  25. サービスレベルは何を測ればよい? • 可用性 ◦ 一定タイムウィンドウ内でのエラーを集計 ◦ エラーレートが一定値を越えれば、 そのウィンドウをダウンタイムとして計測 ◦ ダウンタイムが一定時間継続すれば障害とみなす

    ▪ リクエストが一定数以下の場合、未計測とする • レイテンシ ◦ 一定タイムウィンドウ内でのレイテンシを集計 ◦ レイテンシの 99%tile を計測 マルチテナンシーなサービスの場合 顧客ごとに集計できると、より良い
  26. https://royal.pingdom.com/2009/03/24/a-handy-uptime-and-downtime-conversion-cheat-sheet/ 可用性については、 ダウンタイムを参考にすると どれくらいのサービスレベルかを 意識しやすい

  27. Google App Engine のSLA 定義 https://cloud.google.com/appengine/sla

  28. スタディストでのSLI 計測システム アクセスログ Kinesis Stream S3 Athena Kinesis Analytics Lambda

    Stackdriver
  29. スタディストでのSLI 計測システム アクセスログ Kinesis Stream S3 Athena Kinesis Analytics Lambda

    Stackdriver Stream SQL を使った リアルタイム計測基盤 時間軸方向に対して 無限のデータ →どこかで時間を区切る
  30. スタディストでのSLI 計測システム アクセスログ Kinesis Stream S3 Athena Kinesis Analytics Lambda

    Stackdriver 集計とアラートを分離 測定方法を後から変更しても 過去の推移を再計測できる
  31. OnCall

  32. OnCall → 障害対応など、呼び出しへの対応

  33. OnCallに関するSREのプラクティス • Run Book • アラート疲労をへらす • Postmortem

  34. Run Book • SOM ( Systems Operation Manual ) のこと

    • 記載項目の例 ◦ フェイルオーバーの手順 ◦ パッチの適用 ◦ トラブルシューティングの一般的な流れ
  35. スタディストでのRun Book • 自動化されていない処理に関するSOM の ドキュメント作成はマスト ◦ GUI 操作を行う場合は、 自社サービス(Teachme

    Biz )でマニュアル作成 ▪ Excelにスクショぺたぺたをしなくて済む ◦ 障害対応時の心得などは、 社内ドキュメントを公開している
  36. Run Book はテンプレが 世の中にたくさん存在 → 活用しよう https://github.com/SkeltonThatcher/run-book-template

  37. アラート疲労を減らす • OnCallが頻繁だと注意力が低下する ◦ 感度が低下すると、 重要なアラートの見落としが発生する • アラート疲労を減らすために ◦ モニタリングアウトプットの分類を意識する

    ◦ 優れたアラートロジック/エスカレーションポリシー ◦ 1つ1つ問題を確実に対処する
  38. モニタリングのアウトプット分類は3つ

  39. There are alerts, which say a human must take action

    right now. Something that is happening or about to happen, that a human needs to take action immediately to improve the situation. The second category is tickets. A human needs to take action, but not immediately. You have maybe hours, typically, days, but some human action is required. The third category is logging. No one ever needs to look at this information, but it is available for diagnostic or forensic purposes. The expectation is that no one reads it. What is ‘Site Reliability Engineering’? https://landing.google.com/sre/interview/ben-treynor.html
  40. スタディストでのアラート疲労対策 • Slack Channel 通知先を分ける ◦ emergency ( 書き込まれると常に関係者にプッシュ通知 )

    ◦ info ( 必要なタイミングで対応 ) • アラートロジックは、要修正であれば即修正 • 後述するポストモーテムを運用し、 問題は1つずつ確実に対処
  41. スタディストでのアラート疲労対策 • Slack Channel 通知先を分ける ◦ emergency ( 書き込まれると常に関係者にプッシュ通知 )

    ◦ info ( 必要なタイミングで対応 ) • アラートロジックは、要修正であれば即修正 • 後述するポストモーテムを運用し、 問題は1つずつ確実に対処 運用者の人数が増えれば、 インシデントレスポンスの専用ツール導入予定 e.g. PagerDuty
  42. スタディストでのアラート疲労対策 • Slack Channel 通知先を分ける ◦ emergency ( 書き込まれると常に関係者にプッシュ通知 )

    ◦ info ( 必要なタイミングで対応 ) • アラートロジックは、要修正であれば即修正 • 後述するポストモーテムを運用し、 問題は1つずつ確実に対処 運用者の人数が増えれば、 インシデントレスポンスの専用ツール導入予定 e.g. PagerDuty エスカレーションロジックの 管理コストが高くなるため
  43. ポストモーテム • 障害振り返りドキュメント • 人を非難するためのものではない • SREにとって障害復旧完了は、仕事の半分 ◦ 詳細な原因究明と、 再発防止をエンジニアリングで行うまでがSREの仕事

  44. スタディストのポストモーテム運用 • ポストモーテム読書会 ◦ 似た局面で同じ失敗を繰り返さないように • 社内向けに全公開 ◦ 他のチームの人からコメントをもらう •

    「幸運だったこと」を書くようにしている ◦ 今回はたまたまこの被害規模で済んだけど、 もし、この状況で、XXX だったら…を想像する ▪ ヒヤリハットの考え方
  45. まとめ

  46. まとめ • SREは、サービス運用を ソフトウェアの問題として取扱う • SREの考え方を適用することで、 より信頼性の高い運用ができる ◦ エンジニアリングでの問題解決を基本としつつも、 それに留まらない幅広いプラクティスが共有されている

  47. ウェブオペレーションは 技芸であり科学ではない

  48. SRE に決まった答えはない ぜひ皆さんなりのSRE を! おわり