© 2023 NTT DATA Group Corporation
© 2023 NTT DATA Group Corporation
Prometheus Operator入門
2023年 7月 4日 Kubernetes Novice Tokyo #26
株式会社NTTデータグループ 技術開発本部
加藤 健
© 2023 NTT DATA Group Corporation 2
自己紹介
名前:加藤 健
所属:株式会社NTTデータグループ 技術開発本部
業務:
• PostgreSQLの研究開発 (PostgreSQL on Kubernetes)
• Prometheus、Grafana Lokiを使ったモニタリング・ログ基盤の設計
© 2023 NTT DATA Group Corporation 3
目次
• Prometheus Operatorとは
• Prometheus OperatorのCRD
• ServiceMonitor
• PrometheusRule
• インストール方法
© 2023 NTT DATA Group Corporation
Prometheus Operatorとは (1/2)
Prometheus Operatorとは、Kubernetes上におけるPrometheusとその関連コンポーネントのデプロイや管理を
自動化してくれるツール。
基本情報
• 開発元: CoreOS社 -> Prometheus Operatorコミュニティ
• 開発言語: Go
• ライセンス: Apache License 2.0
• 最新バージョン(2023年7月現在): 0.66.0
特徴
• カスタムリソースを使い、Prometheus、Alertmanager、その他関連コンポーネントのデプロイ・管理を行う
• 複数台構成の設定を自動で行ってくれるので、スケールイン / スケールアウトが容易に実現できる
• 監視対象の追加・削除・更新が簡単にできる
• ルールの追加・削除・更新が簡単にできる
© 2023 NTT DATA Group Corporation
Prometheus Operatorとは (2/2)
Prometheus Operatorとは、Kubernetes上におけるPrometheusとその関連コンポーネントのデプロイや管理を
自動化してくれるツール。
Prometheus
Prometheus
Alertmanager
Alertmanager
アラート連携先の設定を
自動的に行ってくれる。
Exporter
Alertmanagerの相互通信の
設定を自動的に行ってくれる。
Prometheus Operatorを使用していない場合だと、複数のPrometheusに対して個別にAlertmanagerの
ドメイン名を設定したり、複数のAlertmanagerに対して個別に相互通信の設定をしなければならない。
しかし、Prometheus Operatorを利用すると、レプリカ数を設定するだけで、これらの設定が自動的に行われる。
これにより複数台構成やスケールイン / スケールアウトが容易に実現できる。
© 2023 NTT DATA Group Corporation
Prometheus OperatorのCRD
Prometheus Operatorはカスタムリソースを定義しており、これらを使用してPrometheusや関連コンポーネントの
デプロイ・管理を行う。
CRD 役割
Prometheus Prometheusの設定 (レプリカ数、スクレイプ間隔など)
Alertmanager Alertmanagerの設定 (レプリカ数、ログの保持期間など)
ThanosRuler Thanos Rulerの設定
※Thanos Rulerはクエリ実行に失敗することが多いので、Prometheus内で評価することが
推奨されている。
ServiceMonitor 監視対象であるServiceの設定
PodMonitor 監視対象であるPodの設定
Probe 特定のエンドポイントに対するヘルスチェックの設定
PrometheusRule レコーディングルールやアラートルールの設定
AlertmanagerConfig Alertmanagerのrouteの設定(まだunstable)
PrometheusAgent PrometheusのAgentモード相当の機能(まだunstable)
※Agentモードとは、ターゲットのディスカバリ、メトリクスのスクレイプ、Remote Writeへ特化し
たモード
ScrapeConfig k8s外部のターゲットをスクレイプするための機能 (まだunstable)
© 2023 NTT DATA Group Corporation
ServiceMonitor (1/2)
ServiceMonitorはPrometheusの監視対象の管理を行う。
その名の通り、条件に合ったServiceを監視対象とする。
1. ServiceMonitorで監視対象となるServiceを指定する。
2. Prometheus OperatorがServiceMonitorの作成を
検知し、その設定をPrometheusリソースに統合する。
3. Prometheusリソースの設定がそのままPrometheus
Serverに反映され、新しい監視対象からメトリクスを収集
するようになる。
Prometheus Operatorを使用していない場合だと、複数のPrometheusに対して監視対象の設定を個別に
行う必要がある。しかし、Prometheus Operatorを利用すると、ServiceMonitorの設定が全ての
Prometheusに自動的に反映されるので、変更を1か所で行うだけで済む。
© 2023 NTT DATA Group Corporation
ServiceMonitor (2/2)
SeviceMonitorの設定例を紹介する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app
labels:
prometheus: example
spec:
namespaceSelector:
matchNames:
- frontend
selector:
matchLabels:
app: example
どのServiceを監視対象にするか決めている。
この例では、frontendというnamespaceにあるapp=exampleというラベルの付
いたServiceを監視対象としており、そのServiceの管理下にあるPodの/metrics
エンドポイントにアクセスし、メトリクスを収集する。
relabelの設定や監視対象ごとのスクレイプ間隔なども指定できる。
© 2023 NTT DATA Group Corporation
PrometheusRule
PrometheusRuleはレコーディングルールやアラートルールの管理を行う。
PrometheusRule 1
PrometheusRule 2
Operator Prometheus Server
watch deploy
& manage
1. PrometheusRuleでルールを設定する。
2. Prometheus OperatorがPrometheusRuleの
作成を検知し、その設定を元にConfigMapを作成
する。
3. Prometheus ServerにConfigMapがマウントされ、
Prometheus内でルールが評価されるようになる。
Prometheus Operatorを使用していない場合だと、複数のPrometheusに対してルールの設定を個別に行う
必要がある。しかし、Prometheus Operatorを利用すると、PrometheusRuleの設定が全ての
Prometheusに自動的に反映されるので、変更を1か所で行うだけで済む。
ConfigMap
© 2023 NTT DATA Group Corporation
PrometheusRule
PrometheusRuleの設定例を紹介する。
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: prometheus-example-rules
labels:
prometheus: example
spec:
groups:
- name: alerting-rules
rules:
- alert: JobFailed
expr: kube_job_failed > 0
for: 60s
labels:
severity: critical
annotations:
summary: ‘Job {{ $labels.job_name }}’ failed’
Prometheusのレコーディング / アラートルールを設定する。
書き方はPrometheus本家とほぼ一緒。
この例では、kube_job_failedというメトリクスの値が1以上になった
場合にアラートがあがるように設定している。
© 2023 NTT DATA Group Corporation
インストール方法
Prometheus Operatorをインストールする方法は3つある。
特にkube-prometheus / kube-prometheus-stackは必要なものが一挙にインストールされるのでおすすめ。
方法 説明
prometheus-operator Prometheus OperatorとそのCRDがデプロイされる。
Gitレポジトリのreleasesにあるbundle.yamlをkubectl create/applyすることでデプロイできる。
kube-prometheus Prometheus OperatorとそのCRDだけでなく、Prometheus、Alertmanagerのカスタム
リソースが作成された状態でデプロイされる。また、Grafana、 Node Exporter、kube-state-
metricsなどのコンポーネントもデプロイされ、それらに対応したServiceMonitorや
PrometheusRuleも合わせてデプロイされる。
Gitレポジトリのmanifests内にあるyamlファイルをkubectl create/applyすることでデプロイできる。
kube-prometheus-stack kube-prometheusと同様のスタックをデプロイするHelmチャート。
上記2つはprometheus-operatorのGitレポジトリで管理されているが、kube-prometheus-
stackはprometheus-communityのGitレポジトリで管理されている。
Helmを使いデプロイすることができる。
© 2023 NTT DATA Group Corporation 12
まとめ
• Prometheus Operatorはカスタムリソースを使って、Prometheusや関連コンポーネントの管理を行う。
• 利点としては
• スケールイン / スケールアウトが容易に実現できる
• 監視対象の追加・削除・更新が簡単 (ServiceMonitor、PodMonitor)
• ルールの追加・削除・更新が簡単 (PrometheusRule)
• インストールはkube-prometheus / kube-prometheus-stackを使うのがおすすめ。
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標または商標です。

Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)

  • 1.
    © 2023 NTTDATA Group Corporation © 2023 NTT DATA Group Corporation Prometheus Operator入門 2023年 7月 4日 Kubernetes Novice Tokyo #26 株式会社NTTデータグループ 技術開発本部 加藤 健
  • 2.
    © 2023 NTTDATA Group Corporation 2 自己紹介 名前:加藤 健 所属:株式会社NTTデータグループ 技術開発本部 業務: • PostgreSQLの研究開発 (PostgreSQL on Kubernetes) • Prometheus、Grafana Lokiを使ったモニタリング・ログ基盤の設計
  • 3.
    © 2023 NTTDATA Group Corporation 3 目次 • Prometheus Operatorとは • Prometheus OperatorのCRD • ServiceMonitor • PrometheusRule • インストール方法
  • 4.
    © 2023 NTTDATA Group Corporation Prometheus Operatorとは (1/2) Prometheus Operatorとは、Kubernetes上におけるPrometheusとその関連コンポーネントのデプロイや管理を 自動化してくれるツール。 基本情報 • 開発元: CoreOS社 -> Prometheus Operatorコミュニティ • 開発言語: Go • ライセンス: Apache License 2.0 • 最新バージョン(2023年7月現在): 0.66.0 特徴 • カスタムリソースを使い、Prometheus、Alertmanager、その他関連コンポーネントのデプロイ・管理を行う • 複数台構成の設定を自動で行ってくれるので、スケールイン / スケールアウトが容易に実現できる • 監視対象の追加・削除・更新が簡単にできる • ルールの追加・削除・更新が簡単にできる
  • 5.
    © 2023 NTTDATA Group Corporation Prometheus Operatorとは (2/2) Prometheus Operatorとは、Kubernetes上におけるPrometheusとその関連コンポーネントのデプロイや管理を 自動化してくれるツール。 Prometheus Prometheus Alertmanager Alertmanager アラート連携先の設定を 自動的に行ってくれる。 Exporter Alertmanagerの相互通信の 設定を自動的に行ってくれる。 Prometheus Operatorを使用していない場合だと、複数のPrometheusに対して個別にAlertmanagerの ドメイン名を設定したり、複数のAlertmanagerに対して個別に相互通信の設定をしなければならない。 しかし、Prometheus Operatorを利用すると、レプリカ数を設定するだけで、これらの設定が自動的に行われる。 これにより複数台構成やスケールイン / スケールアウトが容易に実現できる。
  • 6.
    © 2023 NTTDATA Group Corporation Prometheus OperatorのCRD Prometheus Operatorはカスタムリソースを定義しており、これらを使用してPrometheusや関連コンポーネントの デプロイ・管理を行う。 CRD 役割 Prometheus Prometheusの設定 (レプリカ数、スクレイプ間隔など) Alertmanager Alertmanagerの設定 (レプリカ数、ログの保持期間など) ThanosRuler Thanos Rulerの設定 ※Thanos Rulerはクエリ実行に失敗することが多いので、Prometheus内で評価することが 推奨されている。 ServiceMonitor 監視対象であるServiceの設定 PodMonitor 監視対象であるPodの設定 Probe 特定のエンドポイントに対するヘルスチェックの設定 PrometheusRule レコーディングルールやアラートルールの設定 AlertmanagerConfig Alertmanagerのrouteの設定(まだunstable) PrometheusAgent PrometheusのAgentモード相当の機能(まだunstable) ※Agentモードとは、ターゲットのディスカバリ、メトリクスのスクレイプ、Remote Writeへ特化し たモード ScrapeConfig k8s外部のターゲットをスクレイプするための機能 (まだunstable)
  • 7.
    © 2023 NTTDATA Group Corporation ServiceMonitor (1/2) ServiceMonitorはPrometheusの監視対象の管理を行う。 その名の通り、条件に合ったServiceを監視対象とする。 1. ServiceMonitorで監視対象となるServiceを指定する。 2. Prometheus OperatorがServiceMonitorの作成を 検知し、その設定をPrometheusリソースに統合する。 3. Prometheusリソースの設定がそのままPrometheus Serverに反映され、新しい監視対象からメトリクスを収集 するようになる。 Prometheus Operatorを使用していない場合だと、複数のPrometheusに対して監視対象の設定を個別に 行う必要がある。しかし、Prometheus Operatorを利用すると、ServiceMonitorの設定が全ての Prometheusに自動的に反映されるので、変更を1か所で行うだけで済む。
  • 8.
    © 2023 NTTDATA Group Corporation ServiceMonitor (2/2) SeviceMonitorの設定例を紹介する。 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: example-app labels: prometheus: example spec: namespaceSelector: matchNames: - frontend selector: matchLabels: app: example どのServiceを監視対象にするか決めている。 この例では、frontendというnamespaceにあるapp=exampleというラベルの付 いたServiceを監視対象としており、そのServiceの管理下にあるPodの/metrics エンドポイントにアクセスし、メトリクスを収集する。 relabelの設定や監視対象ごとのスクレイプ間隔なども指定できる。
  • 9.
    © 2023 NTTDATA Group Corporation PrometheusRule PrometheusRuleはレコーディングルールやアラートルールの管理を行う。 PrometheusRule 1 PrometheusRule 2 Operator Prometheus Server watch deploy & manage 1. PrometheusRuleでルールを設定する。 2. Prometheus OperatorがPrometheusRuleの 作成を検知し、その設定を元にConfigMapを作成 する。 3. Prometheus ServerにConfigMapがマウントされ、 Prometheus内でルールが評価されるようになる。 Prometheus Operatorを使用していない場合だと、複数のPrometheusに対してルールの設定を個別に行う 必要がある。しかし、Prometheus Operatorを利用すると、PrometheusRuleの設定が全ての Prometheusに自動的に反映されるので、変更を1か所で行うだけで済む。 ConfigMap
  • 10.
    © 2023 NTTDATA Group Corporation PrometheusRule PrometheusRuleの設定例を紹介する。 apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: prometheus-example-rules labels: prometheus: example spec: groups: - name: alerting-rules rules: - alert: JobFailed expr: kube_job_failed > 0 for: 60s labels: severity: critical annotations: summary: ‘Job {{ $labels.job_name }}’ failed’ Prometheusのレコーディング / アラートルールを設定する。 書き方はPrometheus本家とほぼ一緒。 この例では、kube_job_failedというメトリクスの値が1以上になった 場合にアラートがあがるように設定している。
  • 11.
    © 2023 NTTDATA Group Corporation インストール方法 Prometheus Operatorをインストールする方法は3つある。 特にkube-prometheus / kube-prometheus-stackは必要なものが一挙にインストールされるのでおすすめ。 方法 説明 prometheus-operator Prometheus OperatorとそのCRDがデプロイされる。 Gitレポジトリのreleasesにあるbundle.yamlをkubectl create/applyすることでデプロイできる。 kube-prometheus Prometheus OperatorとそのCRDだけでなく、Prometheus、Alertmanagerのカスタム リソースが作成された状態でデプロイされる。また、Grafana、 Node Exporter、kube-state- metricsなどのコンポーネントもデプロイされ、それらに対応したServiceMonitorや PrometheusRuleも合わせてデプロイされる。 Gitレポジトリのmanifests内にあるyamlファイルをkubectl create/applyすることでデプロイできる。 kube-prometheus-stack kube-prometheusと同様のスタックをデプロイするHelmチャート。 上記2つはprometheus-operatorのGitレポジトリで管理されているが、kube-prometheus- stackはprometheus-communityのGitレポジトリで管理されている。 Helmを使いデプロイすることができる。
  • 12.
    © 2023 NTTDATA Group Corporation 12 まとめ • Prometheus Operatorはカスタムリソースを使って、Prometheusや関連コンポーネントの管理を行う。 • 利点としては • スケールイン / スケールアウトが容易に実現できる • 監視対象の追加・削除・更新が簡単 (ServiceMonitor、PodMonitor) • ルールの追加・削除・更新が簡単 (PrometheusRule) • インストールはkube-prometheus / kube-prometheus-stackを使うのがおすすめ。
  • 13.