Prometheus Operator默认的监控指标并不能完全满足实际的监控需求,这时候就需要我们自己根据业务添加自定义监控。添加一个自定义监控的步骤如下:

1、创建一个ServiceMonitor对象,用于Prometheus添加监控项
2、为ServiceMonitor对象关联metrics数据接口的Service对象
3、确保Services对象可以正确获取到metrics数据

演示如何添加etcd集群的监控
1.etcd证书

对于etcd集群一般情况下,为了安全都是开启https认证方式,所以要想让prometheus访问etcd集群的监控数据,就需要提供相应的证书校验

cd -

java prometheus自定义metrics prometheus 自定义监控_Redis


就是通过静态pod的方式在集群当中运行的一个etcd的pod.查看etcd pod的运行方式. 输出到yaml文件中

java prometheus自定义metrics prometheus 自定义监控_Redis_02


java prometheus自定义metrics prometheus 自定义监控_redis_03


方便使用ip直接访问到2379端口,因为只要有节点的ip或者修改成0.0.0.0:2379都可以。不然通过ip:2379访问不到metrics数据

存活探针

java prometheus自定义metrics prometheus 自定义监控_redis_04


java prometheus自定义metrics prometheus 自定义监控_Redis_05


使用证书就可以访问到etcd集群

java prometheus自定义metrics prometheus 自定义监控_数据_06


通过hostpath形式挂载进去的现在想要在etcd集群中访问到该证书

java prometheus自定义metrics prometheus 自定义监控_数据_07

通过secert对象吧证书添加到对象当中

通过文件创建。就是genetric

kubectl -n monitoring create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/ca.crt
secret/etcd-certs created

java prometheus自定义metrics prometheus 自定义监控_redis_08

etcd-certs的secert创建成功

java prometheus自定义metrics prometheus 自定义监控_数据_09


创建的etcd证书的secert的一个对象。在对象里面的值都是做了一个编码然后吧证书注入到prometheus的pod中去,因为想要在prometheus的一个pod中能访问到这个证书,通过更改文件

java prometheus自定义metrics prometheus 自定义监控_redis_10


java prometheus自定义metrics prometheus 自定义监控_Redis_11


为什么要把etcd-certs添加到monitoring命名空间下?

因为这样在prometheus下面就能识别到了

java prometheus自定义metrics prometheus 自定义监控_数据_12


这个k8s是部署在集群当中的prometheus的一个资源对象

java prometheus自定义metrics prometheus 自定义监控_Redis_13


可以看到刚才添加的证书

java prometheus自定义metrics prometheus 自定义监控_数据_14


可以看到这两个pod已经更新成功

java prometheus自定义metrics prometheus 自定义监控_Redis_15


可以到该pod中查看etcd证书是否已经注入进来

java prometheus自定义metrics prometheus 自定义监控_redis_16


看到该pod中已经注入证书了

也就是pod中已经有了访问etcd的证书开始创建service monitoring文件

java prometheus自定义metrics prometheus 自定义监控_redis_17


监控名字name:etcd-k8s

标签: lables :

jobLabel: 就是取对应的lable的标签的名称去作为监控项的名字

java prometheus自定义metrics prometheus 自定义监控_redis_18


就是jobLable的值是k8s-app,而k8s-app对应的值就是etcd-k8s

endpoints指定抓取etcd集群的endpoints

interval 30秒抓去一次

etcd通过https。所以添加证书

insecureSkipVerify: true. 不加校验证书可能会失败

加seletor匹配service

想要去匹配一个service具有k8s-app=etcd的service。在xx命名空间下

java prometheus自定义metrics prometheus 自定义监控_Redis_19


创建

java prometheus自定义metrics prometheus 自定义监控_Redis_20


创建service

java prometheus自定义metrics prometheus 自定义监控_redis_21

spec:
因为吧etcd看作是集群外部的一个应用,所以不能通过selector去匹配集群中的pod,而是手动创建一个endpoints去指定etcd集群的访问地址,要手动创建endpoints就需要clusIP设置为none,
ports: 就是service的端口

  • name: port就是刚才在service monitoring中定义了的

接着endpoints需要自己手动创建一个

metadata部分要和service的保持一致

java prometheus自定义metrics prometheus 自定义监控_redis_22

这样endpoints就能和上面的service匹配了

subsets 指定endpoints的地址

java prometheus自定义metrics prometheus 自定义监控_数据_23


修改啊!!!!

java prometheus自定义metrics prometheus 自定义监控_redis_24


java prometheus自定义metrics prometheus 自定义监控_数据_25



Prometheus 监控Redis的正确姿势(redis集群)

Prometheus 监控 Redis cluster,其实套路都是一样的,使用 exporter。
exporter 负责采集指标,通过 http 暴露给 Prometheus 拉取。granafa 则通过这些指标绘图展示数据。Prometheus 收集的数据还会根据你设置的告警规则判断是否要发送给 Alertmanager, Alertmanager 则要判断是否要发出告警。

Alertmanager 告警分为三个阶段

Inactive 触发告警的规则会被发送到这来。
Pending 你设置的等待时间,即规则里面的 for
Firing 发送告警到邮件、钉钉之类的
扯远了,开始监控 Redis cluster

redis_exporter 监控 Redis cluster
监控什么应用,使用的相应的 exporter,可以在官网查到。EXPORTERS AND INTEGRATIONS

Redis 使用 redis_exporter ,链接:redis_exporter


现在 Prometheus 访问redis,接下来创建 ServiceMonitor 对象即可
prometheus-serviceMonitorRedis.yaml