こんにちは。技術開発室の與島です。
「入門Prometheus」を献本いただきました。ありがとうございます。
ハートビーツは、現時点ではPrometheusを利用していませんが、最近Kubernetesを利用した環境を扱うことも多くなり、そのような場合にKubernetesクラスタやコンテナリソースをより詳細に監視するためにPrometheusによるモニタリング基盤の整備を検討しています。 また、一部ではお客様の環境内でのPrometheusの本番運用に向けて検証を行っている最中でもあり、非常によいタイミングで読ませていただくことができました。
本エントリでは、特に印象に残った点を紹介します。
アプリケーションの監視
クライアントライブラリによって、アプリケーションの独自のメトリクスをモニタリングできるという点はPrometheusを利用する際の大きな利点と言えると思います。「3章 インストルメンテーション」、「4章 開示」、「6章 ラベル」ではこのあたりについて、詳しく触れられています。
メトリクスは最終的には時系列データとして保存し、PromQLによって集計して可視化、アラーティングを行います。ラベルによってグルーピング(例えば、サービスごと、チームごと、など)することで、様々な角度でメトリクスの分析が行えるというのはPrometheusの魅力のひとつだと思います。これを実現するためにはメトリクスの設計として、メトリックキーの命名やラベリングを適切に行う必要がありますが、初めから適切に行うことは難しそうだなという印象を受けました。本書ではこれらについて多くの箇所で解説されていますので、何度も読み返しながら、よりよいメトリクスを作り上げるために試行錯誤する必要があるでしょう。
インフラストラクチャの監視
「7章 Node exporter」では、Node exporterについて、「10章 よく使われるexporter」では、他のいくつかのexporterが紹介されています。
ミドルウェアごとに対応するexporterの他に、ログをメトリクスに変換するGrok exporter、外部コンポーネントへの外形監視の結果をメトリクスに変換するBlackbox exporterのように、単純なメトリクスではないものもPrometheusが解釈できる形式で開示することで監視対象にするという手法があることを知りました。
「8章 サービスディスカバリ」は、Prometheusがプル型アーキテクチャの監視システムでありながら、どのように動的に増減するサーバを監視しているかという点がまとめられています。
弊社でもプル型アーキテクチャの監視システムであるNagiosを利用して、被監視対象サーバが増減する環境(Amazon EC2 Auto Scaling)の監視を行う取り組みを行っていたため、Prometheusがどのようなアプローチを取っているのかを興味深く読みました。
Prometheusの運用
「20章 本番システムへのデプロイ」では、Prometheusを管理する側の視点で気になるトピックについて紹介されています。
Prometheusは機能が豊富であり、exporterを利用して多種多様なメトリクスが比較的簡単に取得できます。これは便利である反面、使い始めるときに何から手をつければよいか迷ったり、提供されている機能をあれもこれも使っていると小さい規模のうちから運用コストがかさんでしまったりということが起こり得るでしょう。
20章ではPrometheusを使い始める際のプランの立て方がまとめられています。これは、Prometheusを使い始める方にとって非常に参考になる情報だと思います。
他にもシステムを拡張するにあたって必要になってくるフェデレーション(複数のPrometheusの連携)やクラスタリング、パフォーマンス管理などの運用面のトピックがひと通り紹介されています。弊社では監視そのものをサービスとして提供しているので、このあたりはとても気になるところでした。
まとめ
全体をとおして、Prometheus自体についてはもちろんのこと、それと合わせてメトリックの設計やアラートの閾値、通知先など、監視における一般的なトピックについても多く触れられています。扱うべきトピックの多さから、監視そのものが、それなりに労力をかけてきちんと取り組むべきものであることを再認識しました。「入門監視」とセットで読むことで、本書の理解もより深まるのではないかと思いました。