我尝试访问Rook/Ceph的度量标准,并在Prometheus中进行监控

首先

我們現在在自己的Kubernetes(K8s)集群中使用Rook/Ceph,但是在K8s集群之外我們引入了Prometheus。Rook的官方文檔中記錄了獲取metrics的方法,但是這些設置是基於coreos/prometheus-operator,所以我決定留下一個簡單的備註。

我试着查找Rook/Ceph的服务。

$ 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 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的度量指标导出到外部。

可以参考现有的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

第二种方法:使用Ingress将rook-ceph-mgr/metrics代理到指定位置。

关于方法,不予详述。

总结

首先,K8s运行的网络与外部隔离,并且将要公开的服务由单独的nginx作为边界进行管理。其次,rook-ceph-mgr的9283端口用于Prometheus,因此直接将其注册到负载均衡器上并进行公开。

如果/metrics与其他服务在相同的IP:Port上公开,我认为应该谨慎考虑安全问题。(在这种情况下,我认为可以使用ingress来导出有限的路径)

我在Grafana Labs中注册了适用于Ceph的JSON,并将其作为仪表盘来观察情况。

    https://grafana.com/grafana/dashboards/7056

外观虽然很重要,但是通过确认这个定义,我们可以知道应该在alert_rules.yaml中添加哪些监控项目,所以公开的仪表板定义信息应该是设置监控项目的参考。

上述内容

广告
将在 10 秒后关闭
bannerAds