Kubernetesの世界へようこそ。コンテナが乱舞するこの環境では、従来のサーバー監視のような「死活監視」だけでは太刀打ちできません。
なぜなら、Kubernetesは「常に壊れることを前提」に設計されているからです。Podは移動し、ノードは入れ替わり、ネットワークは動的に変化する。このカオスな環境を「見える化」し、信頼性を担保するために不可欠なのが、PrometheusとGrafanaのタッグです。
今日は、Kubernetes運用における「守護神」とも言えるこのスタックを、最短距離で、かつ本質を理解しながら構築する方法を伝授します。これをマスターすれば、深夜の障害対応で右往左往する悪夢から解放されますよ。
—
1. PrometheusとGrafanaの「役割分担」を知る
まず、この二つの役割を明確にしましょう。ここを混同すると、監視設計は崩壊します。
- Prometheus(脳と心臓):
クラスター内のあらゆるメトリクス(CPU使用率、メモリ、リクエスト数など)を時系列で「収集」し、蓄積するデータベース兼クエリエンジンです。「何が起きているか」を記録します。
- Grafana(眼と知性):
Prometheusが蓄積した膨大なデータを「可視化」するフロントエンドです。ただのグラフ描画ツールではなく、異常を検知した際にアラートを飛ばす重要なインターフェースでもあります。
「Prometheusが事実を集め、Grafanaが文脈を与える」。この関係性を覚えておいてください。
—
2. Helmで「kube-prometheus-stack」をデプロイする
ゼロから個別にインストールするのは骨が折れます。業界標準である`kube-prometheus-stack`(Prometheus Operatorを含むオールインワンパッケージ)をHelmで導入するのが、最も「モダンで安全」な方法です。
1. リポジトリを追加
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
2. 名前空間を作成
kubectl create namespace monitoring
3. インストール
values.yamlを定義することで、後々のカスタマイズが劇的に楽になります
helm install my-kube-stack prometheus-community/kube-prometheus-stack \
–namespace monitoring \
–set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
解説: `serviceMonitorSelectorNilUsesHelmValues=false` は重要です。これを指定しないと、後から自分で追加する監視設定(ServiceMonitor)がPrometheusに認識されないという「よくある罠」にハマります。
—
3. 標準ダッシュボードで「異常の予兆」を掴む
インストールが完了すると、Grafanaには最初から100個以上の洗練されたダッシュボードが同梱されています。まずは以下の2つを使いこなすことが、脱・初心者の第一歩です。
- Kubernetes / Compute Resources / Cluster:
クラスター全体の負荷を俯瞰します。ノードごとのCPU/メモリの偏りを見てください。特定のノードだけリソースが枯渇していないか?それが「PodのEviction(強制排除)」の予兆です。
- Kubernetes / Compute Resources / Pod:
Pod単位の性能分析です。メモリの線が右肩上がりになっていたら、それは「メモリリーク」の動かぬ証拠です。
賢い使い方のヒント:
「標準ダッシュボードを改造してはいけません」。代わりにコピーを作成し、自分のチームが必要なメトリクスだけを抽出して「ダッシュボードを育てる」感覚を持ってください。
—
4. カスタムリソース(ServiceMonitor)による監視の拡張
標準監視だけでは、あなたのアプリケーションの「ビジネス的な成功」は測れません。ここで登場するのがServiceMonitorというカスタムリソースです。
「このPodの `/metrics` というエンドポイントを監視してくれ」とPrometheusに指示を出すための設定ファイルです。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-monitor
labels:
release: my-kube-stack # Helmのリリース名と合わせるのがコツ
spec:
selector:
matchLabels:
app: my-app # 監視対象のPodのラベル
endpoints:
- port: web # service.yamlで定義したポート名
interval: 30s
これを適用するだけで、Prometheusは自動的にあなたのアプリを検出し、監視の網に組み込みます。これがKubernetesネイティブな監視の美しさです。
—
最後に:監視とは「対話」である
ツールを入れることはゴールではありません。真のオブザーバビリティとは、「システムと対話ができる状態」を指します。
「なぜ今、このエラーが出たのか?」
「このPodが再起動した理由は?」
Grafanaでグラフを眺めながら、自分の中で仮説を立て、Prometheusのクエリでそれを検証する。このサイクルを繰り返すことで、あなたは単なるオペレーターから、システムを自由自在に操るアーキテクトへと進化します。
まずは今日、ダッシュボードを開いてみてください。そこには、あなたのアプリケーションが語りかけている「生の声」が見えるはずです。頑張りましょう!応援しています。