监控系统俗称「第三只眼」,几乎是我们每天都会打交道的系统,它也一直是IT系统中的核心组成部分,负责问题的发现以及辅助性的定位。
ChengYing作为一站式全自动化全生命周期大数据平台运维管家,自然也提供大数据产品的监控服务。这篇文章,将为大家系统性地介绍ChengYing监控的设计和使用,带大家进一步了解ChengYing。
常见监控系统比较
目前市面上主流大众都在用的监控系统主要有zabbix、openfalcon、prometheus,这三者都有各自适合的使用场景。下面来看下这三种监控系统各自的优缺点。
zabbix
zabbix属于老牌企业监控解决方案,优点是在企业的基础设施监控场景下提供了非常丰富的采集插件,能够快速建立起企业内部基础设施的监控和基础设施可视化大屏(包括网络的可视化等)。
zabbix的不足之处在于后端数据库使用了MySQL对监控数据进行存储,因此无法满足现在多维度化的告警需求。同时随着时间的推移,监控告警数据激增的瓶颈也会出现,同样的在对接应用层监控缺乏,所以更适合企业底层基础设施的监控。(注:最新版本的数据库替换了TimescaleDB)
openfalcon
openfalcon是小米开源的企业级监控解决方案,它整体的架构上吸取了zabbix的经验同时也解决了zabbix的不足之处,但是社区的活跃性不高。
prometheus
prometheus是谷歌开源的新一代监控系统,也是契合目前云原生较好的解决方案。优势在于社区活跃度高能推进普适化功能的演进,比如之前只支持pull方式,现在prometheus自身支持了可靠的push的方式推送数据到远端tsdb时序数据库中,同时单点的也能支撑起数百万的metrics指标数据。
不足之处在于官方不提供高可用的架构,需要自行处理,这些方案在社区中也有很多。
ChengYing监控设计
ChengYing平台则是选择了集成prometheus这套监控解决方案。其中的主要原因,是这套解决方案是目前主流的方案,使用的人群较多,推广使用上门槛低而且易维护,同时也适合ChengYing平台的容器化部署。
下面我们来看下这套监控系统是如何在ChengYing平台上进行集成的。
架构设计
首先我们在这套平台的基础上增加了一个dt-alert组件用来对接第三方的告警发送处理,其次我们对grafana进行了少量的二次开发,开发的内容主要在于打通ChengYing平台的告警通道和grafana上的通道的对接。
整体结构如下:
平台接入好主机和部署好服务后,prometheus就能通过服务发现的方式完成目标抓取作业的生成获取监控数据。grafana从prometheus中获取指标数据进行展示,同时触发告警将告警内容发到dtalert组件中,dtalert组件将告警信息发往第三方平台上。
监控设计
那么prometheus是如何通过服务发现来获取目标抓取作业的信息的?
这里ChengYing主要是使用了prometheus的「基于文件的服务发现功能」,Prometheus 会按指定的时间计划从这些文件重新加载目标。对于集群我们分为两部分的监控信息,主机和服务。
● 主机
主机的服务发现流程是在主机接入集群的时候,ChengYing会对接入的主机进行初始化操作,该操作会下发node-exporter,然后将主机的ip和node-exporter端口作为一个目标作业写入node_sd_file.yml文件中。当然用户也能自己指定exporter的端口,这个配置已经提取到的matrix的配置文件中。
节点接入后生成的信息如下:
● 服务
至于服务同样也是使用基于文件的服务发现方式,那么服务的exporter该如何指定和部署呢?
我们在制作产品包的时候就需要把该服务的监控指标给暴露出来,在产品包的schema.yml文件中指定该服务的exporter的端口,同时服务也要将exporter组件放到产品包中,在启动服务的时候一同启动。如下:
在制作好产品包后,通过ChengYing平台去部署该产品包的时候,由于需要对服务进行编排,那么我们就能同时解析出服务暴露的指标端口和服务所部署的目标ip地址。
在完成服务部署后,ChengYing就能将该服务的目标抓取作业写入service_sd_file.yml文件中。(要是我们在部署过程中发现我们使用的exporter端口发生了改变,可以在部署产品包的时候在页面修改对应的配置,平台最终会以修改的为准)
告警设计
ChengYing在获取了监控信息后,该如何展示这些指标数据以及告警呢?
· 首先需要为该产品包配置专属的仪表盘,在这个仪表盘配置中配置好服务要监控的指标信息及其水位线,然后还需要为该仪表盘增加一些标签,标签的key-value为"产品包的名称"和"服务名称",增加这些标签的用处在于通过ChengYing页面查看对应服务的仪表盘时能从grafana中过滤出来
· 将配置好的仪表盘导入到ChengYing上
· 然后我们通过在ChengYing上访问服务的时候就能根据产品包名称和服务名称检索到我们指定的仪表盘
对于告警的话,当我们在ChengYing上配置好告警通道后,还需要在grafana上为服务配置好告警的内容,当grafana触发告警水位线的时候,会将定义好的告警内容消息发送到dtalert组件上,dtalert组件处理好消息内容后,再根据通道类型将告警信息发到第三方平台上。
ChengYing监控告警使用
下面我们来具体看下ChengYing的监控告警具体是怎样使用的。
概览页面的轮播盘配置
我们可以在概览页面上展示需要关注的核心仪表盘的轮播,该功能需要自行配置:
· 登录ChengYing平台选择"运维中心"->"概览",然后点击编辑按钮,将会跳转到grafana的轮播配置页面,或者通过访问ChengYing的地址(http://xxx/grafana/playlists),然后创建需要的轮播仪表盘
· 创建的轮播的设置中,轮播的名称必须填写"DTinsight_index",轮播间隔根据需要填写,然后选择需要轮播的仪表盘,最后点击保存即可
· 刷新概览页面就会展示结果
平台告警通道配置
● 创建告警通道
选择"部署中心"->"告警监控"->"告警",创建告警通道。
● 选择告警通道类型
选择告警通道类型,这里以选择钉钉通道为例,填写相关的信息,需要注意以下两点:
第一点为:"URL"处地址平台会默认填写dtalert的地址,这个地址为容器内部通信的域名地址,若使用host模式部署,该地址需要手动修改为dtalert所在节点的ip地址。
第二点为:通知消息模板,这里主要是配置告警的消息模板即配置模式使用的是grafana的原生格式,通过grafana告警的请求中获取对应的告警名称、消息内容、状态、和链接地址,如下:
告警名称: ${ruleName}
告警信息: ${message}
告警状态: ${state}
告警链接: ${ruleUrl}
而对于“通道配置信息”则是在对接第三方平台的时候需要对接的相关配置,如对接大鱼短信的时候配置其对应的对接身份id、访问的key等信息。
● 发送测试
完成告警通道配置后就可以点击「发送测试」按钮检查通道的正常。
grafana告警配置
01
"运维中心"->"服务"->"仪表板",选择需要为哪个服务进行告警。
02
编辑仪表盘,添加告警规则。
03
添加告警规则,设置需要告警的水位线,和告警名称。
04
添加告警通道,选择上面创建的告警通道,然后在“Message”里面填写需要自定义的内容,该内容会替换到上面告警模板中的${message}变量。
05
查看告警信息。
06
若想在“Message”里面体现告警的节点等相关标签信息,可以在仪表盘编辑页的Metrics选择"Query Inspector",查看当前指标数据中带有的标签信息,如下的metric的object对象内容,然后就可以从这个对象中获取对应的标签,进行完善告警内容。
修改告警“Message”内容如下:
视频课程&PPT获取
视频课程:
https://www.bilibili.com/video/BV16g41147NG/?spm_id_from=333.999.0.0
课件获取:
关注公众号“数栈研习社”,后台私信“ChengYing”获得直播课件 想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szcsdn
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack