matthewhan 2020-05-25
本文介绍如何监控k8s服务层event及报警
应用或服务部署到k8s集群时,首先会经过k8s的调度,这个过程可能会出现一些问题,比如 volume 无法正常挂载,没有足够的资源部署服务,服务异常退出等。
如何及时了解这些问题,保证服务正常运行?
监控k8s集群,大致分为下面3个层级:
应用或服务部署到k8s集群时,k8s服务层会产生一系列的event事件,通过监控这些事件的类型,可以掌握服务状况
k8s event是一种资源类型,当其他资源具有状态更改,错误或应向系统广播的其他消息时,会自动创建该资源类型。在调试Kubernetes集群中的问题时,它们是重要的渠道。
通过 kubectl get events 指令,可以看到集群当前的部分事件列表:
event源代码也可以看到有哪些event类型
type=Normal的event相当于应用层的 log.Info,比较有用的信息是 type=Warning的,可以加上过滤条件:
kubectl get events --field-selector type=Warning
可以通过Reason栏位看到更详细的信息,通过此栏位,可以根据我们服务的实际情况,来筛选出需要监控和报警的event
使用kubernetes-event-exporter,可以方便的在k8s集群部署event收集服务并将其发送到 elasticsearch。
需要注意的是,目前该工具使用的是 elasticsearch 7.x 的api,并不兼容以下的版本。
在grafana中设定好 elasticsearch 的 source,然后在dashboard中建立Graph 图表(Grafana的Alert功能目前只支持 Graph 图表)。
可以通过下面两个指标来设定报警:
部分值:
Warning基本上就是k8s的调度没有按照预期执行,只要有该类型的event,就可以发出alert
部分值:
可以根据服务的场景来确定需要alert的reason
###host字段指定授权使用该证书的etcd节点IP或子网列表,需要将etcd集群的3个节点都添加其中。cp etcd-v3.3.13-linux-amd64/etcd* /opt/k8s/bin/