効率的なサービス運用を考える
効率的なサービス運用とは、ソフトウェアエンジニアリングでシステム運用の問題を解決することであり、それが行える状態にあることを指す。
例えば煩雑で繰り返しの多い運用業務については、手動の手作業(トイル)を自動化することで撲滅していく。トイルをそのままにしておくと生産性が低下するだけではなく、キャリアの停滞、士気の低下につながるからだ。「Googleではトイルに費やされる時間を業務時間の50パーセント未満にすることを目指していると書かれています」(藏本氏)
またメンバーへの過負荷・属人化という問題に対しては、適切なモニタリングによりデータに基づき業務をハンドリング、過負荷を削減していく。システムのモニタリングに閉じずに、業務上のトイルの発生頻度やトイルに割かれている時間についても可視化し、データドリブンなハンドリングが行える状況を目指すことも含まれている。
「DatadogやPrometheus、Splunkなど、さまざまなサービスが提供されているが、組織にあったサービスを選定し、まずは見える化を進めていくことが大事だと思う」と藏本氏はアドバイスする。
さらにリリース作業の負担という問題は、信頼性の担保されたリリーススキームで軽減することで対応できる。なぜなら、多くの障害は人の手が加わることによって発生するからだ。Terraformを用いたIaC化、CicleCIなどを用いたCICDの導入など、構成管理やリリースエンジニアリングの仕組みを利用し、再現可能で自動化されたリリースプロセスを整備することが重要だ。
SREの効果をまとめると次のようになる。まずはシステムの状態ではなく、ユーザー影響に基づいて、監視を行うことで、不要なアラート対応の削減が見込めること。次にSLO定義・エラー予算の導入により、障害対応と機能開発間の優先順位を明文化し、開発と運用間で意識統一が測れるといった効果が得られること。そして手作業(トイル)を削減することで、本来実施したい作業にリソースを投下でき、ヒューマンエラーの削減による信頼性向上に寄与すること。最後にデータに基づいて、トイル解消など、取り組みの優先度を決めることができるため、納得感や、効率の向上が見込めることだ。