技術
Prometheus
メトリクスベースのモニタリングとアラート
Prometheus は、時系列データベースと pull 型のメトリクスモデルを中心に構築されたオープンソースのモニタリングシステムです。設定されたターゲットから定期的にメトリクスをスクレイプし、保存し、独自のクエリ言語である PromQL でクエリとアラートを行えます。
仕組み
Prometheus は、テキストベースの公開形式でメトリクスを公開する HTTP エンドポイントを定期的にスクレイプします。ほとんどのアプリケーションとインフラコンポーネントは、これをネイティブに、または exporter を介して公開しています。スクレイプされたサンプルは、ローカルの時系列データベースに保存されます。PromQL はそのデータに対して、ダッシュボード(一般に Grafana でレンダリングされる)と、アラートルールのためにクエリを行います。アラートルールは Prometheus が継続的に評価し、発火したときに Alertmanager に転送します。
主要な概念
- Metric(メトリクス) — 名前とタイムスタンプを持つ数値の測定値で、多次元にするためのキーと値のラベルを持つこともあります(例:
http_requests_total{method="GET", status="200"})。 - Target(ターゲット) — Prometheus がメトリクスのためにスクレイプするエンドポイントで、静的に、またはサービスディスカバリー(Kubernetes のネイティブなサービスディスカバリーを含む)で検出されます。
- PromQL — 時系列データを選択、集約、計算するための Prometheus のクエリ言語です。
- Alertmanager — Prometheus のアラートルールが発火させたアラートを重複排除、グルーピングし、メール、Slack、PagerDuty などの受信者にルーティングする、別個のコンポーネントです。
チームが Prometheus を採用する理由
- Kubernetes ネイティブのサービスディスカバリー。 クラスターが変化するのに合わせて、スクレイプする Pod、Service、エンドポイントを自動的に検出できます。
- 強力なクエリ言語。 PromQL は、豊富な集約、レート計算、メトリクス間の結合をサポートします。
- 多次元メトリクス。 ラベルにより、すべての組み合わせを事前に定義しなくても、計装した任意の次元で 1 つのメトリクスを切り分けられます。
- 事実上の標準。 Kubernetes ネイティブなソフトウェアのほとんど、つまり ingress コントローラー、サービスメッシュ、Kubernetes 自体のコンポーネントが、デフォルトで Prometheus 形式のメトリクスを公開しています。
はじめに
Prometheus をクラスターにインストールし(一般的には、Grafana と Alertmanager も含む kube-prometheus-stack の Helm チャートを使います)、モニタリングしたいターゲットを検出するように設定し、最初のアラートルールを書きます。以降のガイドでは、一般的なスクレイプとアラートの設定を説明します。