肖青青负责百度云监控产品的规划设计,在监控领域拥有多年的产品经验。干货总览做运维的人对监控再熟悉不过了,但是对于监控这种老生常谈的东西,今天我们换个角度,看看从大数据的角度又有哪些新发现。为什么要从大数据的角度看监控?首先以大家最熟悉的服务器监控为例。虽然原理很简单,但是从数据的角度来看,仍然是一个典型而完整的数据采集(监控数据采集)、分析(报警)和可视化(趋势图、Dashboard)的过程。其次,监控领域需要关注的数据不仅仅是服务器监控数据,还包括各种角度、各种来源的数据,比如日志数据、网络通信数据等,数据呈现出类型多、量大的特点量大、时效性要求高,符合典型大数据的基本特征。2016年Gartner首次提出AIOps的概念时,AI代表的是Algorithmic(算法)。算法的基石是海量数据。2017年将AI的含义改为ArtificialIntelligence(人工智能)后,海量数据也需要处理和学习。从下面Gartner描述的AIOps平台架构中,我们也可以看出数据对于AIOps、运维、监控的重要性。我们从数据来源的角度对监测数据进行分类。几种常用的数据源如下:机器数据,常用指数★★★★★,获取难度★☆☆☆☆日志数据,常用指数★★★★☆,获取难度★★★☆☆网络通信数据,常用指数★☆☆☆☆,获取难度★★★★★拨号测试数据,常用指数★★★★☆,获取难度★☆☆☆☆Agent代理数据,常用指数★★☆☆☆、获取难度★★★★☆用户行为数据、常用指标★★★☆☆、获取难度★★☆☆☆指标仅供参考。这么多的数据源,各自的特点和用途是什么??接下来详细说一下:机器数据机器数据是指服务器、网络设备等硬件或虚拟硬件在运行过程中产生的状态数据,往往有相应的协议或规范,如SNMP、IPMI、WMI等。机器数据可以准确掌握业务承载平台的基本运行状态,如CPU、内存、磁盘等资源的使用情况,网络流量情况等。是运维监控领域最常用的数据源。这类数据的处理也大同小异,比如Zabbix、Nagios等。在云计算时代,也离不开机器数据。虽然用户不再需要关心底层物理设备的运行状态,但是云厂商提供的各种云服务器、网关、负载均衡等虚拟设备也会产生大量的机器数据,需要用户时刻关注例如,云服务器的资源使用情况、带宽使用情况、网关的负载情况等。做好机器数据监控可以说是做好运维监控的第一步,但是仅仅有机器数据是不够的,因为存在机器数据与运维监控脱节的问题业务运行状态、稳定的机器运行和充足的资源并不能代表业务正常运行,这需要我们丰富我们的监控数据源,请阅读下文。日志数据日志数据是指应用程序、中间件和机器在运行过程中触发事件产生的文本数据,数据格式灵活多样。日志数据的应用场景非常广泛,小到业务指标分析,小到bug跟踪定位。是监控领域的全能选手。但是由于日志数据的灵活性,要想用好日志数据,首先要想好要监控什么,然后通过制定日志规范来获取需要的数据。最常用的日志数据采集分析开源方案是ELKStack,可以说已经形成了一定的行业标准。网络通信数据网络通信数据是指通过抓包获取的设备间的网络通信数据。例如,两个服务器之间存在网络通信。通过抓包分析,可以详细了解两台服务器之间的通信端口、协议、数据等。数量甚至内容。一种常见的方法是通过硬件设备对网络流量进行镜像,并对镜像数据进行分析,避免干扰业务数据的正常流动。网络通信资料非常全面。只要有网络通信,理论上就可以抓取到详细的数据,而不需要像日志数据那样,提前制定数据输出规则。想象一下,你在管理一个交易系统,你可以在不吐出任何日志的情况下获取每笔交易的详细信息,而且这种数据获取方式不会影响应用程序的运行,是不是很酷?但网络通信数据的使用较少,难度较大。我个人认为主要是因为网络相关的运维和业务相关的运维由不同的团队负责。不同的运维团队由于侧重点不同,所关注的重点和侧重点也不同。网络运维团队更关心网络本身的稳定性,对业务的了解不是很深。即使通过抓包得到了详细的数据,也很难进行详细的分析。但是,业务相关的运维和研发团队对网络缺乏完全的掌控,对网络的理解不够深入。此外,网络通信数据也有其局限性。有些业务事件可能不会产生网络通信,所以没有相应的数据。网络通信的数据包分析需要非常清楚应用层的规则,甚至很多数据都是加密的。这增加了网络通信数据的使用难度。目前小编暂时还没有看到围绕网络通信数据采集和分析的成熟开源方案。唯一能说的就是Wireshark这样的工具类产品。在业务解决方案方面,有很多好的制造商。有兴趣的同学可以百度一下GartnerNPMD。NPMD是指网络性能监控和诊断。拨号测试数据拨号测试数据是指使用探测点通过HTTP、Ping、TCP等协议检测监控目标所产生的数据。《站点监控 | 网站健康检查的外科医生》文章中提到的网站监控数据是一种拨号测试数据。拨号测试一词起源于电话通信网络。电话网络建成后,通信人员需要拨打电话测试是否正常。这种主动监控方法称为拨号测试。对于IT业务系统,拨号测试的检测点可以在公网,也可以在业务系统的内网。不同位置的检测点起着不同的作用。公网检测点主要关注业务系统的网络出口质量、运营商网络质量和CDN质量,内网检测点主要关注业务或各业务模块的可用性和性能状态。内网检测点的搭建非常简单。几行脚本和一些开源组件,可以快速获取拨号测试数据。而公网检测点需要在公网部署大量的服务器作为检测点。公网服务器的部署会带来大量的运维成本和业务成本。同学们可以考虑使用商业解决方案。百度云监控BCM(BaiduCloudMonitor)站点监控功能可以很好的满足公网环境下的拨号测试需求。Agent代理数据Agent代理数据是指通过字节码增强等技术获取应用程序过程中的各类数据。与日志数据最大的区别在于它不需要在应用程序的源代码中添加数据输出逻辑,而是在应用程序编译或运行时动态指定数据输出逻辑。也可以以日志的形式输出,但在原理性和灵活性上与一般的日志数据有着根本的区别。Agent代理数据最常用的场景是应用程序性能管理(APM)。通过Agent代理数据,可以获得应用运行过程中的事务执行过程,包括外部调用、数据库调用、分布式调用跟踪、代码执行消耗等。时间等等,这一切都不需要你去修改原来的应用。典型的开源解决方案是用于Java应用程序监控的Pinpoint。用户行为数据用户行为数据是指在用户终端通过埋点获取的用户行为数据,如通过JS埋点在网页中获取的页面访问状态,通过SDK埋点在APP中获取的交互页面和控件使用等。用户行为数据除了可以帮助运维同学分析用户外,还可以帮助运维同学更准确的了解业务系统最终的实际表现,比如用户在哪些地方遇到访问慢,哪些业务模块突然掉线等在用户量上,这些数据可以让你从结果的角度分析业务系统哪里可以优化,也可以在问题只影响到少量用户时及时发现问题,第一时间介入。总结了这么多来源的数据,我们简单总结一下:结合各种来源的数据,我们可以根据业务监控需求构建适合自己业务系统的监控方案。你有没有发现以前没有注意的地方?数据源呢?赶快详细了解一下,看看能不能解决你的痛点。
