PrometheusとGrafanaによるメトリクス管理
Prometheusを構築してクラスターとアプリケーションのメトリクスを収集し、Grafanaで可視化します。
「PrometheusとGrafanaによるメトリクス管理」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。
メトリクスの力
メトリクスとは、アプリケーションやインフラストラクチャの状態とパフォーマンスを表す数値による測定値です。ソフトウェアのバイタルサインのようなものだと考えてください。
メトリクスから、次のような重要な情報を得られます。
- パフォーマンス: アプリの応答速度はどのくらいですか。
- リソース使用量: サーバーのメモリが不足しそうですか。
- 可用性: ユーザーに対してサービスが稼働していますか。
メトリクスを追跡することで、傾向を把握し、異常を検出して、問題に先回りして対処できます。
Prometheus の紹介
Prometheus は、信頼性とスケーラビリティを重視して設計されたオープンソースの監視システムです。クラウドネイティブなオブザーバビリティスタックの主要なツールです。
主な役割は次のとおりです。
- スクレイプ: 設定されたターゲット(アプリケーションなど)からメトリクスを収集します。
- 保存: これらのメトリクスを時系列データベースに保存します。
- クエリ: 収集したデータについて質問できるようにします。
Prometheus を使うと、Kubernetes クラスター内部で何が起きているかを明確に把握できます。
Prometheus の「スクレイピング」モデル
Prometheus は、メトリクスの収集に「pull」モデルを使用します。アプリケーションが Prometheus にデータをプッシュするのではなく、Prometheus がアプリケーションからメトリクスを能動的に「スクレイプ」またはプルします。
一般的な流れは次のとおりです。
- アプリケーションが、特定の HTTP エンドポイント(多くの場合
/metrics)でメトリクスを公開します。 - Prometheus に、ターゲット(アプリケーションの IP アドレスとポートなど)の一覧を設定します。
- Prometheus が一定の間隔で各ターゲットの
/metricsエンドポイントに HTTP リクエストを送信します。 - ターゲットが現在のメトリクスを返し、Prometheus がそれを保存します。
メトリクス: キーと値のペア
Prometheus はデータを時系列として保存します。時系列とは、タイムスタンプ付きの値のストリームです。各時系列は、メトリクス名と、ラベルと呼ばれるキーと値のペアの集合によって一意に識別されます。
例: http_requests_total{method="GET", path="/api"}
Prometheus には、次の主要なメトリクスタイプがあります。
- Counter: 累積値を表すメトリクスで、値は増加のみします(例: リクエストの総数)。
- Gauge: 増減する値を表します(例: 現在の CPU 使用率)。
- Histogram/Summary: 観測値をサンプリングし、設定可能なバケットに分類して数えるために使用します(例: リクエスト時間)。
アプリにメトリクスを「話させる」
Prometheus がメトリクスをスクレイプするには、アプリケーションが Prometheus の理解できる形式でメトリクスを公開する必要があります。通常は HTTP エンドポイントを使用します。
多くのプログラミング言語には、コードの計測を簡単にするクライアントライブラリがあります。
- イベント発生時にカウンターをインクリメントする。
- 現在の状態をゲージに設定する。
- 処理の実行時間を観測する。
ここでは、基本的なカウンターメトリクスを公開する非常にシンプルなアプリの例を見てみましょう。
メトリクスを公開する Python アプリ
これは、シンプルなカウンターメトリクスを公開する小さな Python Flask アプリです。ページビュー数をカウントする処理をシミュレートします。
このコードを実行したら、ブラウザまたはターミナルから /metrics にアクセスしてみてください(実行後に http://localhost:5000/metrics を開くなど)。
from flask import Flask
from prometheus_client import Counter, generate_latest
import time
app = Flask(__name__)
c = Counter('my_app_requests_total', 'Total requests to my app')
@app.route('/')
def hello():
c.inc() # Increment the counter
return "Hello, CoddyKit!"
@app.route('/metrics')
def metrics():
return generate_latest().decode('utf-8')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)クラスター内の Prometheus
Kubernetes で Prometheus を効率的にデプロイするには、Prometheus Operator を使うことが一般的です。この Operator は、Prometheus のインスタンスと設定の管理を支援します。
Prometheus に関連する主な Kubernetes リソース:
- ServiceMonitor: メトリクスエンドポイントの場所(スクレイプ対象の Service や Pod など)を Prometheus に伝えます。
- PodMonitor: ServiceMonitor と似ていますが、Pod を直接対象にします。
これらのリソースにより、デプロイ済みのアプリケーションを Prometheus が自動的に検出し、メトリクスをスクレイプできるようになります。
Grafana: ダッシュボードの達人
Prometheus がメトリクスを収集して保存する一方で、Grafana はメトリクスを可視化するための代表的なツールです。オープンソースの分析・インタラクティブ可視化 Web アプリケーションです。
Grafana では、次のことができます。
- 見やすく有用なダッシュボードを作成する。
- 複数のデータソース(Prometheus など)に対してクエリを実行する。
- メトリクスのしきい値に基づくアラートを設定する。
生のメトリクスデータを、実際の行動につながる洞察へと変換します。
Grafana と Prometheus: 強力な組み合わせ
Grafana 自体はメトリクスデータを保存せず、外部のデータソースからデータをクエリします。Kubernetes のメトリクスを可視化するには、Grafana のデータソースとして Prometheus を設定します。
手順:
- Grafana で新しいデータソースを追加します。
- 種類として「Prometheus」を選択します。
- Prometheus サーバーの URL を入力します。
- Prometheus のクエリ言語 PromQL を使ってダッシュボードの作成を始めます。
この組み合わせにより、クラスターの監視を完全に制御できます。
知識を確認しましょう
Prometheus と Grafana についての理解度を確認しましょう。
まとめ: メトリクスと可視化
よくできました。このレッスンでは、次のことを学びました。
- オブザーバビリティにおけるメトリクスの重要性。
- 時系列メトリクスをスクレイプして保存する強力なシステムとしてのPrometheus。
- Prometheus が収集できるように、アプリケーションがメトリクスを公開する方法。
- 有用なダッシュボードの作成とメトリクスデータの可視化に使う Grafana。
これらのツールを理解することは、Kubernetes アプリケーションを正常かつ高いパフォーマンスで保つために重要です。自分のアプリケーションを計測する方法について、さらに探究してみてください。
よくある質問
「PrometheusとGrafanaによるメトリクス管理」レッスンは無料ですか?
はい。「PrometheusとGrafanaによるメトリクス管理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。
「PrometheusとGrafanaによるメトリクス管理」で何を学びますか?
Prometheusを構築してクラスターとアプリケーションのメトリクスを収集し、Grafanaで可視化します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kubernetes Basicsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「PrometheusとGrafanaによるメトリクス管理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKubernetes Basicsレッスンでコードを書いて実行できますか?
はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- kubectl logsによるログ管理
- PrometheusとGrafanaによるメトリクス管理
- ヘルスチェック:LivenessとReadiness Probe
- 分散トレーシングとイベント