Contents
Kubernetes監視の重要性とPrometheus・Grafanaの役割
Kubernetesクラスタの監視は、動的かつスケーラブルな環境において不可欠です。コンテナの起動/停止やリソース配分が頻繁に変化するため、リアルタイムでメトリクスを収集・可視化することが問題発見とパフォーマンス改善の鍵となります。Prometheusはメトリクスの収集に特化し、Grafanaはそのデータをグラフやダッシュボードで可視化するツールとして機能します。両者の連携がKubernetes監視基盤の中心です。
Kubernetesクラスタの監視が必要な理由
Kubernetesクラスタの監視は、動的な運用環境における問題発見と安定運用を支えるために不可欠です。以下の3つの理由から重要となります。
- 動的環境の不安定性: Podの再起動やスケーリングが頻発し、手動で状態を把握できない
- リソース枯渇のリスク: CPUやメモリの使用率がリアルタイムで変化するため、監視なしでは異常検知が困難
- 運用コストの最適化: 無駄なリソース消費を抑えるためにも継続的な状態監視が必要
Kubernetesの設計思想は「自律性」と「高可用性」ですが、その背後にあるインフラの健康診断がなければ安定した運用は成立しません。
メトリクス収集と可視化の違いを理解する
以下にPrometheusとGrafanaの役割分担を比較します。
| 項目 | Prometheus | Grafana |
|---|---|---|
| 主な機能 | タイムシリーズデータの収集・保存 | メトリクスの可視化・ダッシュボード作成 |
| 対応ソース | Kubernetes、Node Exporterなど | Prometheus、InfluxDBなど |
| 設定の難易度 | 高(スクレイピング設定が必要) | 中〜低(テンプレート使用可) |
| 最適な用途 | リアルタイム監視・アラート発火 | データの見やすさ重視の分析・レポート |
例:
Prometheusは/metricsエンドポイントからメトリクスを取得し、Grafanaではそのデータをグラフ化して「CPU使用率が90%を超えた場合」を赤く表示するなど、運用者にとって直感的な可視化を行います。
PrometheusとGrafanaの連携方法
Kubernetes環境でPrometheusとGrafanaを連携させるには、「サービスディスカバリ」と「エクスポーター」の理解が不可欠です。両ツールはKubernetes API経由で自動的に監視対象を検出できます。
サービスディスカバリの仕組み
サービスディスカバリとは、PrometheusがKubernetes APIから動的にサービスやPodの情報を取得し、監視対象に自動登録する機能です。
-
Kubernetes APIとの連携:
Prometheusは/apis/discovery.k8s.io/v1/namespaces/{namespace}/endpointsを定期的にスキャンし、新規Podやサービスの登録を検出します。 -
ラベルフィルタリングの活用:
app=my-appのようにPodに設定されたラベルを使って特定のリソースのみを監視対象とすることで、不要なメトリクスの収集を防ぎます。
例:
scrape_configs:で以下の設定を行うことで、my-label=productionのPodのみを監視できます。
|
1 2 3 4 5 6 7 8 9 10 11 |
- job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod namespaces: names: - default relabel_configs: - source_labels: [__meta_kubernetes_pod_label_my_label] regex: production action: keep |
エクスポーターの役割と設定
エクスポーターは、監視対象(例:Node、DB)からメトリクスを収集し、Prometheusが読み取れる形式で提供するツールです。
- Node Exporter: Nodeのハードウェアリソース(CPU、メモリ)を監視
- Kube-state-metrics: Kubernetesクラスタ内リソース(Pod、Namespace)の状態を監視
設定手順の例:
- 各エクスポーターをKubernetesクラスタにデプロイ
- Prometheusの
scrape_configsでエクスポーターサービスを指定 - GrafanaにPrometheusデータソースを追加し、ダッシュボードを作成
Helmチャートによるインストール手順
HelmはKubernetesリソースのテンプレート化・デプロイを簡略化するツールで、PrometheusやGrafanaの導入にも最適です。以下に簡単な手順を示します。
Prometheus Operatorの導入
-
Helmリポジトリを追加:
bash
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts -
Operatorをインストール(最新バージョンv14.0.0推奨):
bash
helm install prometheus-operator prometheus-community/prometheus-operator --namespace monitoring --create-namespace
Prometheus Operatorは、Prometheus ServerとGrafanaのデプロイを自動化し、スケジューリングや監視設定も簡単に行えます。
Grafanaのダッシュボード設定
インストール後、Grafanaにアクセスして以下を行います:
- データソース追加:
- メニューから
Configuration > Data Sourcesを選択 -
Add data source→Prometheusを選び、URLをDNS名やLoadBalancer経由で設定する(例:http://<prometheus-service-name>.svc.cluster.local:9090) -
ダッシュボード作成:
- メニューから
Create > Dashboardを選択 - 新規グラフを作成し、
Add QueryでPromQLを入力(例:rate(container_cpu_usage_seconds_total[5m]))
アラート設定のベストプラクティス
メトリクスに基づいたアラートは、クラスタの健康状態を維持するための核です。以下のステップで構築します。
Prometheusルールファイルの作成
-
ルール定義ファイル(例:
alert-rules.yml)を作成:
yaml
groups:- name: example
rules:- alert: HighCPUUsage
expr: (avg by (instance) (container_cpu_usage_seconds_total{job="kubernetes-pods"}) / on(instance) group_by(1, max(container_spec_cpu_requests)) > 0.8)
for: 5m
labels:
severity: warning
annotations:
summary: "{{ $labels.instance }}のCPU使用率が高めです"
- alert: HighCPUUsage
- name: example
-
Prometheusにルールを反映:
prometheus-operatedConfigMapに上記ファイルを配置
Grafanaでの通知連携
Grafanaで通知を設定するには、以下を行います:
- 通知チャンネルの作成:
- メニューから
Configuration > Alerting > Channels→Add channel -
Slackやメールなどの通知先を選択し、APIキーなどを入力
-
アラートルールへの連携:
- ダッシュボード内のグラフで
Edit→Alertタブを開く - 通知チャンネルを指定し、アラート条件を設定
サービスディスカバリ機能の動作原理
PrometheusはKubernetes APIを通じて、クラスタ内リソースを自動検出します。この仕組みが「サービスディスカバリ」です。
Kubernetes APIとの連携
Prometheusは定期的にKubernetes APIから以下の情報を取得します:
- サービス(Service)のリスト
- Podのリストとラベル情報
- EndpointsのIPアドレスやポート番号
この情報を使って、scrape_configsに登録されたターゲットを動的に更新します。
ラベルフィルタリングの活用
Prometheusは__meta_kubernetes_pod_label_<label>というメタデータでPodのラベルを取得でき、それをもとに監視対象を選別できます。
例: my-label=productionのPodのみを監視する設定:
|
1 2 3 4 5 6 7 8 9 10 11 |
- job_name: 'production-pods' kubernetes_sd_configs: - role: pod namespaces: names: - default relabel_configs: - source_labels: [__meta_kubernetes_pod_label_my_label] regex: production action: keep |
まとめ
- Prometheusはメトリクスの収集・保存、Grafanaはデータの可視化とアラート通知に特化している
- Helmチャートを使用することで、PrometheusとGrafanaのインストールが簡単かつ保守性が高い
- アラートルールは、メトリクスの傾向を見ながら閾値を設定し、Slackやメールで通知できる
- サービスディスカバリ機能により、Kubernetesクラスタ内リソースを自動検出できる
本記事を参考に、Kubernetesクラスタの監視体制構築を始めてみましょう。