Prometheus
技術

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 チャートを使います)、モニタリングしたいターゲットを検出するように設定し、最初のアラートルールを書きます。以降のガイドでは、一般的なスクレイプとアラートの設定を説明します。