はじめに
以前Kubernetesで監視を行う際のポイントについて調べたり、Prometheusを触ったりしていましたが、そもそも監視自体に対して理解できていないことが色々とありました。以下にその項目を書き出してみます。
- 監視のそもそもの目的。システムに異常がないことを確認することだとは思うけど、じゃあどんな場合は異常なのか?
- 優れた監視システムの定義。上記を踏まえて、ではどんな監視システムが優れていると言えるのか?
- 具体的な設計の指針。具体的にどんな設計をすれば優れた監視システムを構築できるのか?
私は監視システムの運用は経験がなく、また構築も一部お手伝いをした程度です。そのため、そもそも監視とは何か?に関しての理解が十分できていません。
そんな中、先日オライリーから「入門 監視」の日本語版が出版されました。
普段は何となく技術書を買ってそのまま積ん読してしまうことが多いのですが、これはちゃんと読まなければならない本だと思い、読み進めています。まだ完全に理解できたとは言えない状態ですが、上記の疑問に対しての回答を得られたと感じたため、ここに書き残しておきます。
本書の構成
本書は大きく2つのパートに分かれています。
- 監視の原則:監視に対する考え方の紹介。アンチパターンから始まり、監視のデザインパターン、アラートを使う際の考え方などが紹介されています。
- 監視戦略:具体的な戦略の紹介。ビジネス、フロントエンド、サーバなどの観点から、どのような設定をすれば良いかが紹介されています。
1. 監視のそもそもの目的
監視の定義
監視の定義は「はじめに」のパートの中で紹介されています。
監視とは、あるシステムやそのシステムのコンポーネントの振る舞いや出力を観察しチェックし続ける行為である。
※上記定義はGreg Poirier氏がMonitorama 2016というカンファレンスで発表したものです (こちらのリンクから動画が見れます)。
監視の目的
上記のように、監視とは対象のシステムやコンポーネントの振る舞いをチェックし続けることです。ではなぜそのようなことをするかといえば、システムに問題が発生して動かなくなると、システムの利用者・システムの管理者の双方にとってデメリットしかないからです。
それでは対象のシステムが正常に動いているとは、どのような状態のことを指すのでしょうか。また正常でないことが確認できたらどうすれば良いのでしょうか。
監視の目的については、第1章で幾つかヒントが書かれています。
「動いている」とはどういう意味か。「動いている」かどうかを監視しよう
システムが「動いている」状態については、具体例が紹介されています。
例えば、Webアプリケーションの場合、HTTPでGET / した結果を確認するといったことです。 HTTPレスポンスコードを記録し、HTTP 200 OK が返ってきているか、 ページに特定の文字列があるかどうか、 さらにリクエストのレイテンシが小さいかどうかを確認します。
このように「動いている」状態を定義することで、監視の設計に対する基準を設定することができます。上記の場合、例えばHTTP 200 OKが返ってきているけどレイテンシが増大していれば、何か重大な問題が発生していることがわかります。
システム管理者としてのキャリアを始めた頃、私はリードエンジニアのところへ行きました。 あるサーバのCPU使用率が高いことを伝え、どうしたらよいか聞きました。彼の答えは私を驚かせるものでした。 「そのサーバはやるべき処理はしてるんだろう?」そうだと私は答えました。「それなら、何も問題はないじゃないか」。
逆に言えば、「動いている」状態であれば、何か数値が異常なものがあったとしても、それは緊急性を要するものではないと判断することもできます (もちろん将来的に問題が表出する可能性もあるので、原因調査は必要です)。
この場合、「動いている」とはどういう状態なのでしょうか。サービスやアプリケーションのオーナーに聞いてみることから始めましょう。
では「動いている」状態をどうやって定義すれば良いのでしょうか。筆者はシステムの開発者や責任者と話して聞き出すことが有効だと述べています。
ここまでで、監視の目的についてまとめておきます。
監視の目的とは、システムやコンポーネントが「正常に」動いているかどうかをチェックすることである。正常に動いていない、何か問題がある場合にはその問題を修正する必要がある。またシステムに異常があると判断する基準は、そのシステムが「正常に動いている」という定義から外れている場合を指す。
2. 優れた監視システムの定義
監視の目的についてはわかってきました。ではそれを踏まえて、優れた監視システムとはどのようなシステムを指すのでしょうか。
監視システムのデザインパターンについては、第2章で幾つか紹介されています。
監視の目的を踏まえた上で特に参考になりそうなのが、2つめのデザインパターンである"ユーザ視点での監視"です。
まず監視を追加すべきなのは、ユーザがあなたのアプリケーションとやり取りをするところです。
Apacheのノードが何台動いているか、ジョブに対していくつのワーカが使用可能かといったアプリケーションの実装の詳細をユーザは気にしません。
ユーザが気にするのは、アプリケーションが動いているかどうかです。
監視の目的は、システムが「動いている」状態かどうかを見張ることです。そしてシステムが「動いている」状態というのは、やはりそのシステムを利用するユーザが利用できる状態にあることを指すと思います。それならば、ユーザ視点で監視システムを構築することは理にかなっていると感じます。
しかし一方で、優れた監視システムとはすぐに出来上がるものではない、とも述べています。なぜなら、監視対象のシステムは変化し続けるものであり、その都度監視方法や仕様も変化しなければならないからです。 世界的に有名な企業が自社開発・公開したツール群も、数年後には使われなくなり、また新しいツールが開発されるかもしれません。
世界レベルの監視システムは1週間でできるものではなく、数カ月あるいは数年間にわたる継続した注意深さとか以前から生まれるものです。あなたはこの長い道のりの途中にいるのです。
ここまでで、優れた監視システムについてまとめておきます。
優れた監視システムを一概に定義することは難しい。それは対象のシステムが常に変化を続けるからである。監視システムはその変化に対応するため、常に改善を続ける必要がある。その中でも、まず最初にユーザ視点での監視を考えることで、優れた監視システムを作り出す可能性を高めることができる。
3. 具体的な設計の指針
優れた監視システムを一言で定義することはできないようですが、それを目指し続けることは可能であることが見えてきました。それでは、具体的にどのような指針を元に、監視システムの設計を行うのが良いのでしょうか。
ここまでまとめてきて、個人的に重要だと感じたのが以下の2点です。
- システムが「動いている」、つまりユーザが利用できる状態であることを念頭に置いた監視システムの設計
- 監視対象のシステムやコンポーネントは常に変化するので、変化に対応できるよう柔軟性を持った監視システムの設計
1つめに対しては、第5章の「ビジネスを監視する」にて紹介されています。
ビジネスKPIを技術指標に結びつける
ビジネスKPIとは、ビジネスにおけるKPI (Key Performance Indicator)であり、会社のビジネスがどのような状態であるかを測る指標になります。また技術指標とは、システムと直接紐付けはできないような数値を推定するのに手助けとなるような、システム上で表示される指標のことを指していると思われます。
ビジネスはユーザの動向によって左右されます。そのためビジネスKPIにはユーザのアクション(ログイン、商品購入、コメントなど)を含みます。 これらを結びつける、つまりビジネスKPIを推定できるような監視メトリクスを設定することで、監視の目的と直結した監視システムを設計することができるようになります。具体的には以下のような感じです。
ビジネスKPI | 技術指標 |
---|---|
ユーザのログイン | ユーザのログイン失敗、ログインのレイテンシ |
ではそもそものビジネスKPIを知るにはどうするか、そしてどのような技術指標を定めればよいのでしょうか。
どのようにアプリケーションが動いていて、何を計測するのが重要かを理解できるよう、間違いない方法を教えます。 それは、人と話すことです。
プロダクトマネージャやエンジニアチームのリーダーと話すことで、測るべき技術指標を決定することができます。監視設定を定める上でのコミュニケーションの重要性については、本書で度々述べられています。
また2つ目に対しては、第2章で「組み合わせ可能な監視」として紹介されています。
専門化されたツールを複数使い、それらを疎に結合させて、監視「プラットフォーム」を作ることです。 このパターンは、多くの人が馴染みがあるであろうモノリシックなツール、代表的なもので言えばNagiosのようなツールとは対照的です。
これにより柔軟な監視システムを作ることができます。
あるツールがやり方に合わなくなった時、監視プラットフォーム全体を置き換えるのではなく、そのツールだけを削除して他のもので置き換えればよいのです。
ここまでで、具体的な設計指針についてまとめます。
優れた監視システムを作るため、まずはビジネスKPIと結びつくような技術指標を決定する。そして監視対象の変化に対応できるよう、複数の監視ツールを組み合わせた柔軟な監視プラットフォームを構築する。
まとめ
ここまで、監視に対する個人的な疑問に対する回答を探し、述べてきました。これまで私の中でイマイチまとまらなかった、監視の目的や具体的な設計指針までが一冊に書かれており、とても参考になりました。はじめに述べましたが、私はこれまで監視業務にはほとんど関わっておらず、監視業務とはどんなものか、何が目的か、といったところをイメージできませんでしたが、この書籍を通じて少しずつイメージができるようになったと思います。なので、監視のことを全然知らない、監視業務に就いたことがない方にもオススメしたい、素晴らしい一冊でした。
またこの書籍には、より具体的な監視項目についてもたくさん述べられています。アラートはどのように設定するか、サーバやフロントエンドは何を監視すれば良いか、といったことが述べられていますので、より具体的な監視の設定項目については、これらの章を読んでみると参考になると思います。