0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rook/Cephの/metricsにアクセスし、Prometheusで監視してみた

Last updated at Posted at 2019-12-27

はじめに

自前のKubernetes(K8s)クラスターでRook/Cephを利用していますが、K8sクラスターの外にPrometheusを導入しています。Rookの公式ドキュメントでは、metricsを取得する方法が記載されていますが、coreos/prometheus-operatorを前提にした設定になっているので、簡単なメモを残すことにしました。

Rook/CephのServiceを調べてみる

kubectlコマンドでrook/cephのservice定義を確認する
$ kubectl -n rook-ceph get svc
NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
rook-ceph-mgr             ClusterIP   10.233.12.211   <none>        9283/TCP            214d
rook-ceph-mon-ah          ClusterIP   10.233.1.1      <none>        6789/TCP,3300/TCP   36d
rook-ceph-mon-ak          ClusterIP   10.233.27.34    <none>        6789/TCP,3300/TCP   6d20h
rook-ceph-mon-al          ClusterIP   10.233.25.114   <none>        6789/TCP,3300/TCP   6d20h

先頭のrook-ceph-mgrの/metricsにアクセスしてみます。

curlで/metricsを取得した結果
$ curl http://10.233.12.211:9283/metrics | grep -v '#' | head

ceph_mds_mem_dir_minus{ceph_daemon="mds.myfs-b"} 0.0
ceph_mds_mem_dir_minus{ceph_daemon="mds.myfs-a"} 43227.0
ceph_paxos_store_state_latency_sum{ceph_daemon="mon.ak"} 13650.276728195
ceph_paxos_store_state_latency_sum{ceph_daemon="mon.al"} 11494.469300331
ceph_paxos_store_state_latency_sum{ceph_daemon="mon.ah"} 30.680001772
ceph_mds_cache_recovery_completed{ceph_daemon="mds.myfs-b"} 0.0
ceph_mds_cache_recovery_completed{ceph_daemon="mds.myfs-a"} 0.0
ceph_osd_op_out_bytes{ceph_daemon="osd.3"} 1192672815.0
ceph_osd_op_out_bytes{ceph_daemon="osd.1"} 893430742.0

あとは、この/metricsをどうやって取得するかを検討します。

方法1: Rook/Cephのmetricsを外部にexportする

既存のrook-ceph-mgr定義を参考にして、80番ポートで稼動させてみたりします。

$ kubectl -n rook-ceph get svc rook-ceph-mgr -o yaml > metrics.service.yaml
$ vi metrics.service.yaml
$ kubectl -n rook-ceph apply -f metrics.service.yaml

viでは不要な.metadataの要素や.statusなどを削除しています。

apiVersion: v1
kind: Service
metadata:
  name: rook-ceph-metrics
  namespace: rook-ceph
spec:
  ports:
  - name: http-metrics
    port: 80
    protocol: TCP
    targetPort: 9283
  selector:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
  type: LoadBalancer
  loadBalancerIP: 192.168.1.46

方法2: rook-ceph-mgr/metricsにproxyするIngressを利用する

方法については省略。

まとめ

前提として、K8sが稼動するネットワークは外部から切り離されていて、外部に公開するサービスは別にnginxを境界に立ち上げて管理している点と、rook-ceph-mgrの9283ポートはPrometheus用なので、そのままLoadBalancerに登録して公開しています。

/metricsが他のサービスと同じIP:Portで公開されている場合には、セキュリティ上の懸念がないか慎重に考慮するべきかなとは思いました。(この場合には限られたpathをexportするようingressを利用すると思います)

Grafana Labsには、Ceph用のJSONが登録されているので、これをDashboardにして様子をみています。

見た目も大事ですが、この定義を確認すると、alert_rules.yamlに追加するべき監視項目が分かるので、公開されているDashboardの定義情報は監視項目の設定の参考になると思います。

以上

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?