我尝试访问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中添加哪些监控项目,所以公开的仪表板定义信息应该是设置监控项目的参考。
上述内容