『入門監視』を読んで "意味のある" 監視とは何かを改めて考える

こんにちは、@ketancho です。以前、オンラインペア読書を1度だけやったことがあるのですが、その時の題材が『入門監視』でした。1時間でガーッと読んで、感想を共有するという取り組みだったのですが、そのときは1時間で読みきれず、消化できないままの章が残っていました。

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

  • 作者:Mike Julian
  • 発売日: 2019/01/17
  • メディア: 単行本(ソフトカバー)

最近、監視についてお客様とディスカッションすることがあり、その準備として改めて『入門監視』を読んだので個人的メモを残したいと思います。入門監視は、

  • 1章 監視のアンチパターン
  • 2章 監視のデザインパターン
  • 3章 アラート、オンコール、インシデント管理
  • 4章 統計入門
  • 5章 ビジネスを監視する
  • 6章 フロントエンド監視
  • 7章 アプリケーション監視
  • 8章 サーバ監視
  • 9章 ネットワーク監視
  • 10章 セキュリティ監視
  • 11章 監視アセスメントの実行

という章立てからなります。

まず、そもそもの大前提として、なぜ監視をするのか?という話が1章、2章にまとめられています。思考停止で監視を組み込んでないか?本来の目的を忘れていないか?という点で、とても良い章だと思いました。現在の業務でも、このあたりからお客様とディスカッションする機会が多いので、自分の言葉で説明できるところまで落とし込んでいきたいと思っています。

また、6章、7章についても学びが多かったです。特に、フロントエンド監視については、実際にやったことがなかったので、どこかで手を動かさねばと考えています。この記事では、この4つの章についてのメモを書いていきます。

1章: 監視のアンチパターン

"意味のある" 監視ができているかを問う章です。"システムが利用者に価値を提供すること"、あるいは "提供できている時間を最大化する" ことが目的で、あくまで監視はそのための手段です。そのため、「全社的なルールでこの項目を監視しないといけないんですよ」では意味がなく、

  • "動いている" ことことを監視できているか?
  • CPU 使用率が高いことは、あなたのシステムにおいて問題なのかどうか?
  • 監視間隔は適切か?その監視間隔でまれによくある悪い予兆を検知できるのか?

といった "意味のある" 監視になっているかを意識していく必要があります。

また、監視設定を自動化しているか?という問いが、個人的には刺さりました。個人で何かを作る際に、構築は自動化するのに、監視はそのあと手動で設定してしまっていました。改めていきたいものです。

2章: 監視のデザインパターン

監視設計をする上で、意識すべき視点が書かれている章です。取り上げられていることのひとつが "ユーザー視点での監視" を意識すべき、ということで1章に通ずるものがあります。「このメトリクスはユーザーへの影響をどう教えてくれるかを自問すべき」、というところが印象に残りました。

同じく "作るのではなく買う" 選択肢について言及されています。特に最初のフェーズでは、"買う" ことでビジネスのスピード感を上げられないか考えるべきです。やりたいことは監視自体ではなく、プロダクトを成長させることなはずです。その達成のために必要な監視ができるのであれば、機能を買うことで(ゼロから作るより)人的リソースの投入量を減らすことができます。そのリソースをビジネスの成長に繋がることに使った方がいいのではないかと今一度考えてみよう、という話だと理解しました。

6章: フロントエンド監視

フロントエンドのパフォーマンスと、ビジネスとの関連性に関する事例について紹介されています。端的に言うと、ページロードの時間が1秒短くなると、そのサイトのPVやコンバージョン率が上がりまっせ、というような事例です。それでも多くのチームでこのパフォーマンス改善を重要視していない!というフロントエンドのパフォーマンス監視をしたことがない私には耳の痛い内容でした。

フロントエンド監視には、リアルユーザー監視とシンセティック監視の2つのアプローチがあります。前者は、GA のようにコードレベルで埋め込みを行い、ロード時間を計測します。シマンテック監視は、外側から偽のリクエストを発生させ、定期的にパフォーマンスを測るやり方です。新機能が出る、ユーザー数が増えるなどで、知らずのうちにパフォーマンスへの影響が出ることがあるので、定期的にロード時間を計測し、それが許容時間に収まっているかを監視する必要があるという話です。

7章: アプリケーション監視

本書の中では、特定のツールについて語らないというスタンスが取られているのですが、例外的に StatsD というツールが紹介されています。StatsD はコードからメトリクス、例えばログインにかかった時間などを追加するためのツールです。StatsD は使ったことがないどころか、聞いたこともなかったので、どこかで使ってみたいところです。StatusD は内部的に UDP でメトリクスを送付するため、アプリケーションのパフォーマンスに影響を与えにくいそうです。

また、この章ではアプリケーションの情報をメトリクスとして把握すべきか、ログとして把握すべきかについても考察されています。結論としては、ユースケース次第!という話なのですが、実際にトラブルシューティングをするときにどんな情報がどんな形で見えると嬉しいかを問うてます。1章で書かれている、あなたのシステムにとって "意味のある" 監視になっているか、という意識をどんなときも持ち続けましょうという話だと理解しました。

まとめ

様々なところでオススメされている『入門監視』ですが、前提となる考え方と、具体的な方法論の両方が学べるのがいいなーと思いました。200ページ弱という分量なので、初めて監視に携わるタイミングでクイックに読んでから、実務に入っていくと効果が高いのではないかと感じています。ぜひ読んでみてくださいー!

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

  • 作者:Mike Julian
  • 発売日: 2019/01/17
  • メディア: 単行本(ソフトカバー)