CNDT 2022、ChatworkのSREがSLO策定にカオスエンジニアリングを使った経験を解説
CNDT 2022から、ChatworkのSREがSLO(Service Level Objective)策定の経験を語るセッションを紹介する。プレゼンターはSRE部の佐々木真也氏、タイトルは「SLO策定までの道とChaos Engineeringを使った最適解の見つけ方」と題されている。
●動画:SLO策定までの道とChaos Engineeringを使った最適解の見つけ方
元々ChatworkにおいてSRE部はSLO/SLIの担当ではなかったが、前任者である副本部長から引き継いだという背景を説明し、SLO/SLIについては定義されドキュメント化もされてはいたものの、佐々木氏自身も知ってはいたが具体的な数値などについては把握してはいなかったと語った。そして四半期ごとのレビューも実施されてはいたものの、存在を知らない人が多かったことを解説した。
このため、定義はできてはいるが運用されていないという状態を改善しようというのが、引き継いだ時の課題ということになったと思われる。その運用の理想として一般論としては開発者がSLO/SLIを意識して信頼性についての指針としていること、違反ポリシーや変更プロセス、コンセンサスなどについて説明を行った。
ただ現状のまま運用をしても納得が得られないという想定から、納得を得るための段階的なフェーズを定義して、まずはプロダクトチーム全体でSLO/SLIの運用をゴールとして活動が始まったことを説明した。
そして現行のSLO/SLIは可用性とレイテンシーについてのみ定義されていたとしてその例を紹介した。
周知を拡大というフェーズにおいてはレスポンスが悪くなったという状態がアラートとして挙がったとしても、その責任がどのチームにあるのかが不明確であるならば、対応も難しくなるという想定から、単にシステムの性能劣化ではなく「ユーザーがどういうことを行った時に性能が劣化したのか?」を明らかにするためにCUJ(Critical User Journey)ごとにSLOを定義するという方法を採用したと説明した。
これによってどのグループが担当している動作/パスにどういう可用性劣化やレイテンシー劣化が発生しているのかを細かく設定することで、責任担当を明確にしたという。
また例えばレイテンシーについてはこれまでのシステムの平均的なレイテンシーから設定した値が本当に妥当なものなのか? についても、納得させるためにはシミュレーションを行って体験してもらうしかないということが、後述のカオスエンジニアリングを使う背景となっていることを説明した。
ここからChatworkにおけるカオスエンジニアリングの内容に入っていくが、まずはカオスエンジニアリングの概要を紹介した。
ソフトウェアはCNCFでホスティングされているChaos Meshを採用している。採用の理由として使いやすさや、Kubernetes用にデザインされているため、Chatworkが利用しているAWS上のマネージドKubernetesサービスであるEKSとの親和性が良いことなどを挙げた。
Chaos Meshのアーキテクチャーについても簡単に紹介し、ダッシュボードやKubernetesに特化していることなどを紹介した。
特に値を変えて繰り返し実行を行うような場合にはGUIよりもコマンドラインからの操作がやりやすかったとして、実際に操作を行ったエンジニアらしい感想を述べた。またAWS/EKSにおいてもマネージドサービスとしてChaos Meshが利用可能であることも簡単に紹介。ここではAWSユーザー限定になってしまうことにも言及しているのがポイントだ。
ここからは実際に実験を行った環境について解説を行った。
このスライドでは、アクセスされるサイトのパスによってレイテンシーを追加する設定を行ってシミュレーションを実施したことを説明した。実際に監視ツールであるDatadogで実行結果を確認するという内容だ。
ただHTTPアクセスに対するカオスエンジニアリングという目的については、Chaos Meshが用意しているNetworkChaosという種類のアタックでも良かったのでは? という問いには、多くのコンポーネントに影響を与えるため指定したレイテンシーよりも大きくなりがちでコントロールが難しかったと説明。単にシステムに対して負荷をかけると目的ではなく、ユーザーが体験する遅さをSLOの値として検証するという目的には合わなかったということだろう。
またHTTPアクセスを振り分けるという目的には、ロードバランサーで行うのではなくChaos Meshの機能を使うという選択肢もあったが、同じ対象に2つの実験を設定すると応答がなくなるという不具合に遭遇したため、選択しなかったことを説明した。本来の目的はシミュレーションを実施することであり、Chaos Meshのデバッグではないということだ。
また可用性についても実験を行っており、99.9%の可用性、つまり1000回に1回はHTTPのエラーコード500のエラーが返るという部分においても行っているが、発生頻度が低すぎてシミュレーションにならないということから85%、つまり1000回に15回エラーが返るという設定について説明を行った。
可用性に関しては「どの期間内で何回エラーが起きるか?」をエラーバジェットとして設定し、そのエラーバジェットを消費するレートをバーンレートと呼ぶことについても解説を行った。
最後にまとめとして、SLO/SLIを社内に浸透させるためにシミュレーションを行ったこと、シミュレーションとしてのカオスエンジニアリングを使ったことなどを解説してセッションを終えた。実験としては不具合に遭遇しながらも、シミュレーションという目的にはChaos Meshが充分に使えるものであることを解説したセッションとなった。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CNDT 2022、SLOの自動化についてGoogleのエンジニアが解説
- カオスエンジニアリングのOSS、LitmusChaosの概要を解説するCNCFのウェビナーを紹介
- KubeCon+CloudNativeCon NA 2020 IntuitとMayaDataによるカオスエンジニアリングのセッション
- Observability Conference 2022、オブザーバビリティから組織、ルールを見直した事例を紹介
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- Oracle Cloud Hangout Cafe Season5 #5「実験! カオスエンジニアリング」(2022年5月11日開催)
- Observability Conference 2022、利用者目線のオブザーバビリティ実装をドコモのSREが解説
- CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは
- CloudNative Days Tokyo 2023から、Yahoo! JAPANを支えるKaaS運用の安定化やトイル削減の取り組みを紹介
- KubeConサンディエゴ最終日のキーノートはカオスエンジニアリング