はじめに
現在、クラウドネイティブな環境でインフラ設計の業務を行なっているのだが、監視設計のタスクがふってきた。
アプリ畑出身だった私は、クラウド基盤/マイクロサービスの環境での監視ってなに見ればいいんだ状態になりました。
そんな中、オライリーから出版されているMike Julian氏の「入門 監視」に出会いました。
CPU使用率とか見ておけばOK?な状態だった私が本書を通じて学んだこと/感想をまとめてみました。
第一章 監視のアンチパターン
監視設計における、よくある表面上は問題に見えないような悪い慣習を五つほどまとめている。
1. ツール依存
・求められる監視対象は、単一のツールで完結しないことのほうが多いので、恐れず複数ツールを使ってみる
・ツールに囚われて監視の本質(システムを安定稼働させる)を見誤らないこと
・時にはツールを自作する必要がある。
・監視ツールで謳われている「一目でわかる!」は信用ならない(たいていの場合、そうではない)
2. 役割としての監視
・監視設計は、ひとりのエンジニアに任されることがあるが、全員でやるべき。
3. チェックボックス監視
・CPU使用率、メモリ使用率、ディスク容量など、◯◯を監視しています。という設計をするのではなく、"なんのために"監視しているかを考える。
=> 「動いている」とはどういう状態をさすかを考慮したうえで設計する
・メトリクスは高頻度で取得する。(五分間隔以上は、ナンセンス)
4. 監視を支えにする
・監視で見つけたからと言ってシステムはなおらない。
5. 手動設定
・手作業での監視設定は、ヒューマンエラーが起こりやすいため、可能な限り自動化すべし
第二章 監視のデザインパターン
監視設計における、よいデザインパターンを三つほどまとめている。
1. 組み合わせ可能な監視
監視の5つの要素
・データ収集
→メトリクスやログ。ログは非構造化ログと構造化ログ(JSON形式など)がある。
→これらは、各マイクロサービスやノード、コンテナごとに収集し、一箇所にあつめる(例えばCloud Watchなど)のがよい。
・データストレージ
→TSDBなど
・可視化
→適切なダッシュボードを作成する
・分析とレポート
→可視化からさらに一歩踏み込んで、分析(例えば、稼働時間の計算など)をするとよい。
・アラート
2. ユーザ視点での監視
ユーザからどう見えているかを気にするべし。
・HTTPレスポンスの正常性(ちゃんど200が返ってくるか)
・レイテンシー
3. 作るのではなく買う
多くのケースの場合、(GoogleやAmazonなど超大企業の超大規模システムでもないかぎり)監視ツールは作るのではなく、SaaSにまかせてもよい。