1.简介我们知道监控系统的目标是帮助我们更全面详细的了解业务系统的运行状态,以保障业务SLA,更及时的发现系统风险,同时给技术操作的同学更多的时间去化解风险和解决问题的方向。为此使用了开源监控系统(如Nagios、Zabbix、Prometheus、Grafana等),同时为了满足自身业务需求,会使用自研监控系统(如小米的openfalcon、腾讯内部监控系统tnm2【基础监控】、cms【日志监控】等)。由于业务系统依赖于监控系统,我们对监控系统的高可用性和可扩展性会有更高的要求。那么我们应该如何全面、系统地看待和改进自身监控系统的要求呢?2、如何全面、系统地提升能力看监控系统的需求有很多种方式。遇到问题时,对比一些顶级公司优秀的监控系统,找出改进点。也可与由中国信息通信研究院牵头、BATJ等各大互联网巨头参与的专家《研发运营一体化(DevOps)能力成熟度模型》对“监控与管理”能力的测评内容进行对比。根据标准的评估内容,我们可以看到BATJ是如何定义一个进阶的我们来看看监控系统的能力:3.改进点:能力项我们发现,关于“监控管理”的整个能力项被划分了分为三个能力项,分别是“监控采集”、“数据管理”和“数据应用”三项,能力项包括相关的子能力项,我摘取一些我认为很有代表性的点进行分析:a)[能力项目一:监控采集】1、能力点:“支持提供开放定制的数据内容采集上报方案”问题:为什么对上报方案有要求?解读:比如腾讯内部自研的日志监控系统CMS有多种采集方案“Agent、SDK、Kafka、ES等”,各种采集方案对应不同的场景。Agent:类似于filebeat,指定server的具体路径,监听文件的inode节点,发现有新的数据立即上报;SDK:可以嵌入到业务代码逻辑中,处理一些敏感数据没有落地但需要上报的场景,敏感数据可以在业务逻辑中处理上报前脱敏(着色)也可以处理一些场景日志量太大,不想经过日志转储这个中间耗性能的环节;例如:在金融交易场景中,交易数据需要被监控,但是有敏感数据不想进入监控系统。这时候就需要在生成日志的时候使用SDK进行脱敏,隐藏用户信息,然后上报给监控系统;Kafka:可以处理一个日志有多个消费者的场景。让业务把日志放到Kafka中,多个消费者自己提取;例如,在金融交易场景中,日志可以用于安全审计和监控系统。这时候就可以用到安全审计系统和监控系统了。系统同时拉取一份Kafka的topic数据,无需打印多份;2、能力点:“支持多种传输方案,比如同时有推拉数据”问题:为什么要有推拉数据?不可能有一个吗?解读:正常的监控系统一般都是采用拉取数据的方案,因为是服务端发起的,顺序和流程是可控的,但是为什么一定要拉取数据呢?原因是有几个场景需要这个能力:网络限制,当网络限制发生时,比如安全等保护规定高安全级别区域可以向低安全级别区域发起链接,反之亦然,因此需要将数据从高安全级别区域推送到监控服务;性能需求,比如Zabbix的主动模式和被动模式;服务特性,有些服务不对外提供请求接口,因此内部逻辑需要主动向外部推送监控数据。为了保证对业务系统和流程的全面监控,我们需要具备多种能力;例如:某业务有一个定时任务,将离线数据统计并更新到数据库中。定时任务没有任何请求访问接口。我们如何监控它的运行状态?可以在定时任务逻辑中加入心跳机制,周期性地将自身的监控状态推送给监控系统,所以推送的传输能力对于监控来说也是必不可少的;b)【能力项2:数据管理】1.能力点:对原始数据进行正则处理的能力》问题:为什么接收数据时需要正则处理?登陆后不是正则处理吗?解读:基于基于高性能和数据完整性的考虑,在接收过程中需要有这个能力,我们以腾讯自研的日志监控系统为例,当我们接收到大量的日志Agent上报时,日志可能会不一定是按照我们的日志格式如果有错误,会导致数据库大量数据异常,也会造成数据污染,这时候就需要一个正规的处理能力来对不符合规则的数据进行清洗,同时如果大量日志出现异常,落地后的清洗处理会消耗大量的算力,也会对以后造成很大的压力,所以这是非常有必要拥有这种能力。2.能力点:《异构数据源关联分析处理能力》问题:异构数据源关联分析处理能力到底是什么?解读:异构数据源泛指“具有不同数据结构、访问方式和形式的多个数据源”。我们以腾讯内部自研的日志监控系统CMS为例。当一个服务向日志上报了源IP地址和业务关键数据,我们可以通过简单的排序排序就知道哪个源IP地址的访问量最多,但是如果我们想知道某个城市、某个省份,甚至运营商(电信、移动、联通),则需要这种关联分析能力。我们知道有一种数据是对应IP地址的城市、省份、运营商(因为不断更新,所以需要独立维护)。通过将这些数据与日志数据相关联,我们可以清楚地看到我们想要什么。结果;3、能力点:“具有数据一致性、完整性、可用性等管理特性”问题:数据一致性、完整性、可用性很容易理解,但是管理特性是什么?解读:我们以腾讯自研的日志监控系统CMS为例。日志监控系统由用户数据上报、数据格式化、处理、聚合(统计、维度分析)、入库/发送、写入时序数据库等多个环节组成,用户如何快速知道哪里出了问题看看最后的结果是不是异常?这就需要相关的管理特性来实现,在各个环节加入自我监控能力,清晰的看到数据流向和图形,快速发现异常点;c)【能力项3:数据应用】1、能力点:“具备对告警风暴的控制能力,如抑制、收敛等。”问:告警收敛能力常用的方法有哪些?解读:一般告警收敛中常用的规则有“基于时间的收敛”、“基于事件的收敛”和“基于级别的收敛”等,根据不同的业务需求可以有不同的收敛方式。基于时间的是最常用的,Nagios和Zabbix的基本配置。基于事件,一般是需要有主动和被动调用关系的告警,比如Zabbix的trigger-Dependencies这个函数。基于层次的收敛用于开源和自研系统。4.最后,如何看待和提升监控系统的能力,无论是参考开源监控系统对比学习,还是借鉴《研发运营一体化(DevOps)能力成熟度模型》,都是一个不错的方向。当然里面的知识点是大部分大牛的智慧。结晶,本文仅摘取少量要点进行解读。
