LoginSignup
2
1

More than 5 years have passed since last update.

#19 Rook、PostgreSQLのexporterを追加してみる

Last updated at Posted at 2018-12-21

本記事はPostgreSQL on Kubernetes Advent Calendar 2018の19日目です。
昨日は「モニタリング(Prometheus、Grafana)を追加してみる」ということで、PostgreSQL on Kubernetesの環境にPrometheusとGrafanaの追加をしてみました。

正直、今回はかなり苦戦しています。
PrometheusのNamespaceまたがりでの監視は色々事例があるのですが、やってみると中々上手くいかないものですね。

TL;DR

  • 今日は失敗事例。
  • PrometheusのNamespaceではまってます

Rook/Cephのモニタリングを追加する

RookではCephのモニタリングも意識しており、githubにもmonitoringのディレクトリが用意されています。

基本的にはこのmonitoringディレクトリからPrometheusオペレータを作って、Prometheus自身を立ち上げればよいのですが、そこまでは#18で完了しています。ですので、今回は既存のPrometheusオペレータを使って、

  • Rook/CephのServiceMonitorを追加する。
  • PostgreSQLのexporterとそれを取り込むServiceMonitorを追加する。

をやってみようと思います。

ServiceMonitorを追加する

rookのgituhubにあるServiceMonitorはこちらになりますが、これを前回構築したPrometheus用に書き換えます。

rook-service-monitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: pg-rook-ceph-mgr
  namespace: monitoring
  labels:
    prometheus: pg
    app: rook-ceph-mgr
spec:
  namespaceSelector:
    matchNames:
      - rook-ceph
  selector:
    matchLabels:
      app: rook-ceph-mgr
      rook_cluster: rook-ceph
  endpoints:
  - port: http-metrics
    path: /metrics
    interval: 5s

意図としては以下となります。

  • ServiceMonitorのpg-rook-ceph-mgrはPrometheusと同じNamespace:monitoringとする。
  • spec以下はrook-ceph-mgrのポッド配置とあわせて、Namespace:rook-cephとする。

Prometheusに上手く連携されない

しかし、この状態でPrometheusのUIから確認すると、以下のようになっていました。

  • Service Discoveryでpg-rook-ceph-mgrは1つ見つかっている状態。
  • Targetsで見るとrook-ceph-mgrはstate:DOWNになっている。

Endpointは http://<ポッドIP>:9283/metrics となっており、問題がないように見えますし、curlコマンドでもmetricsは取れました。

いろいろと調べると、PrometheusのgithubにNamespaceに関するIssueは沢山あり、このようなドキュメントもあります。しかし、現状でNamespace追加の具体的方法が分かっていません。

仕方なくPrometheus側のNamespaceを変更する

こちらの記事にあるように、ClusterRoleで解決できそうな気がしていましたし色々試しましたが、、、中々上手くいきませんでした。

問題解決のためにNamespaceを変更してみました。
まず、昨日インストールした環境をhelm delete --purgeで削除します。

そして、Namespaceを変更して再度インストールします。

Namespaceを変更して再度helm install
$ helm install coreos/prometheus-operator --name pg-op --namespace rook-ceph -f prometheus-operator-value.yaml

$ helm install coreos/kube-prometheus --name pg --namespace rook-ceph -f kube-prometheus-value.yaml

# 結果はこうなる
$ helm ls
NAME            REVISION        UPDATED                         STATUS          CHART                                   APP VERSION     NAMESPACE
pg              1               Fri Dec 21 14:36:23 2018        DEPLOYED        kube-prometheus-0.0.105                                 rook-ceph
pg-op           1               Fri Dec 21 14:33:39 2018        DEPLOYED        prometheus-operator-0.0.29              0.20.0          rook-ceph

この状態でPrometheusのTargetsもState:UPとなりました。Namespaceの問題であるのは確定のようです。

Rook/CephのGrafanaダッシュボードをインポート

ここまで来るとGrafana側の設定は簡単です。
昨日作成したGrafanaにCephのダッシュボードを追加していきます。こちらを参考にして下さい。

現在はCephのCluster・Pool・OSDと3つのダッシュボードがあります。例えば、Clusterのダッシュボードは以下のようになります。
image.png

PostgreSQLのモニタリングを追加する

PostgreSQLにもPrometheus用のexporterがあります。こちらにhelmのチャートがありますので、これを使ってみましょう。

prometheus-postgres-exporterのインストール

こちらもHelmを使ってインストールします。
同様にNamespaceの問題があるのですが、一旦PostgreSQLを構築してあるDefault向けにインストールします。

prometheus-postgres-exporterのインストール
$helm install --name pg-postgres --set serviceAccount.name=postgres  stable/prometheus-postgres-exporter -f pg-rook-sf-exporter-value.yaml

$ kubectl apply -f pg-rook-sf-exporter-monitor.yaml

しかし、こちらもRook/Cephと同じ問題にあたりました。

  • Service Discoveryでpg-postgres-exporterは1つ見つかっている状態。
  • Targetsで見るとpg-postgres-prometheus-postgres-exporterはstate:DOWNになっている。

先ほどのPrometheusのドキュメントでは、

By default the Prometheus server is limited to the three namespaces it requires: default, kube-system and the namespace you configure the stack to run in via $._config.namespace

と書いてあったので、defaultは大丈夫だと思っていたのですがダメでした。ここを突破できればGrafanaは簡単だと思うのですが、今日は断念します。

まとめ

残念ながら、想定していた形ではPrometheusのモニタリングが出来ていません。実はKubernetesと良く一緒に利用されるツールということでPrometheus+Grafanaだけでなく、ElasticSearch+Kibanaの組み合わせも試してみようと思っていましたが、そんなに簡単ではありませんね。

もう少し勉強して再戦したいと思います。
よろしくお願いします。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1