day2 がつらいよ
SRE エンジニアとして、3年間 Cloud Foundry を含めたプラットフォームの信頼性向上を実施しているのですが、なかなか安定させることは難しいです。 難しい理由として、
- プロダクトの中身で何が実際に起きているのか詳細に追うことが難しい
- オペレーターの知識不足(OS, ネットワーク, CF, アプリケーションと疑うべき箇所が多い)
- 扱っているプロダクトの都合上、すぐにパッチをあてることが難しい(ソースコードの書き換えが運用上困難)
などが挙げられます。この記事では特に 1 に着目してどうすればよいか考えます。
Observability を上げる
https://amasuda.xyz/slide/2019-07-15-golang-observability/ のスライドで紹介している内容ですが、 go-zen-chu/observable-server: golang observable server をサンプル実装として行いました。
Observability は「観測しやすさ」であり、動いているアプリケーションをいかにダウンタイムやリグレッションなく挙動を知ることができるのかがポイントとなります。
Golang ではスタンダードライブラリの pprof という便利なプロファイラが備わっており、そこにカスタムメトリクスの出力機能を加えることで「観測しやすさ」を向上させています。