嘉宾介绍:高俊峰(南非蚂蚁),资深Linux技术专家,畅销书《循序渐进Linux》、《高性能Linux服务器构建实战》的作者,曾就职于新浪、万网,具有多年自动化运维和管理经验,擅长Linux、集群应用、MySQL、Oracle等系统管理、性能调优、规划设计,具有丰富的实战经验。目前专注于Hadoop数据平台及Hadoop相关生态系统的运维、监控、部署、优化等技术。前言大家好,我是AiweiLinux的南非蚂蚁。今天给大家分享一下如何搭建统一的运维监控平台。说到运维,监控应该是运维的重中之重。很多人也说监控是运维的第三只眼。一个好的监控平台对运维有很大的帮助。那么,如何搭建一个完整的监控平台,就是我们今天要讨论的话题。以我个人的理解,运维的核心工作其实就是监控和故障排除。因此,首先要对业务系统进行准确、完整的监控,确保问题第一时间发现,并通知相关人员解决。其实,有问题并不可怕。可怕的是我们很久都没有发现问题,却发现我们的业务系统被客户搞坏了。这是一个非常严重的问题。其实这些故障都可以由业务系统监控平台来完成。统一的监控告警平台设计思路构建智能运维监控平台,必须重点关注运行监控和故障告警两个方面,所有业务系统涉及的网络资源、硬件资源、软件资源、数据库资源必须包括在内。在统一运维监控平台。并通过消除管理软件和数据采集方式的差异,实现对各种数据源的统一管理、统一规范、统一处理、统一展示、统一用户登录、统一权限控制,最终实现标准化、自动化、规范化运营和管理。维护得以实现。智能化大规模运维管理。智能运维监控平台六层智能运维监控平台,设计架构从低到高分为6层,三大模块,如下图:数据采集层:位于最底层,主要收集网络数据、业务系统数据、数据库数据、操作系统数据等,然后对收集到的数据进行规范化存储。数据展示层:位于第二层,为Web展示界面,主要将数据采集层获取的数据进行统一展示。展示方式可以是图表、柱状图、饼状图等,可以帮助运维人员了解一段时间内主机或网络的运行状态和运行趋势,为运维人员提供依据。排除故障或解决问题。数据提取层:位于第三层,主要对数据采集层得到的数据进行归一化和过滤,提取需要的数据给监控报警模块。这部分是监控和报警模块之间的连接点。告警规则配置层:位于第四层,主要根据第三层获取的数据设置告警规则、告警阈值、告警联系方式、告警方式等。告警事件生成层:位于第五层,主要实时记录告警事件,将告警结果存入数据库供调用,形成告警结果分析报告统计区域内故障率和故障发生趋势一段时间。用户展示管理层:位于顶层,为Web展示界面,主要统一展示监控统计结果和告警故障结果,实现多用户、多权限管理,实现统一的用户和管理。统一权限控制。智能运维监控平台的三个模块在这6层中按功能实现分为三个模块,即数据采集模块、数据提取模块和监控告警模块。各模块完成的功能如下:数据采集模块:该模块主要完成基础数据的采集和图形展示。数据采集??的方式有很多种,可以通过SNMP、代理模块或者自定义脚本来实现。这里使用数据采集工具Ganglia来实现。数据提取模块:该模板主要完成数据的过滤和采集,将数据采集模块中需要的数据提取到监控报警模块中。数据提取可以通过数据采集模块提供的接口或自定义脚本实现。监控告警模块:该模块主要完成监控脚本设置、告警规则设置、告警阈值设置、告警接点设置等,并集中显示和记录告警结果。常见的监控告警工具有Nagios、Centreon等平台概述以下是基于上述设计架构图的运维监控平台实现拓扑图,请看下图:从图中可以看出,有三个主要组成部分,即数据采集模块、数据提取模块和监控告警模块。其中,数据提取模块用于其他两个模块之间的数据通信,数据采集模块可以由一个或多个数据采集服务器组成,每个数据采集服务器可以直接从服务器组采集各种数据指标。规范数据格式,最终将数据存储在数据采集服务器中。监控报警模块通过数据提取模块从数据采集服务器获取需要的数据,然后对这些数据设置报警阈值、报警触点等,最终实现实时报警。报警方式支持手机短信报警、邮件报警等方式,通过插件或自定义脚本扩展报警方式。这样一整套监控告警平台就基本实现了。Ganglia作为数据采集模块Ganglia是为HPC(高性能计算)集群设计的可扩展的分布式监控系统,可以监控和展示集群中节点的各种状态信息。它使用运行在各个节点上的gmond守护进程收集cpu、mem、硬盘利用率、I/O负载、网络流量等数据,然后在gmetad守护进程下汇总,使用rrdtools存储数据,最后保存历史数据以曲线方式通过php页面呈现。Ganglia的特点如下:灵活的分布式分层架构使得Ganglia能够支持上万个监控节点的数据采集,性能稳定。同时,Ganglia还可以根据区域环境和网络结构的不同,划分区域和层次。Ganglia数据采集点灵活部署,数据采集节点可动态增删,不影响Ganglia整体监控。因此,Ganglia数据采集节点可以灵活扩展。Ganglia收集的数据更准确。它不仅可以采集实时数据并以图表的形式展示,还可以让用户查看历史统计数据。因此,用户可以根据这些数据做出性能调整、升级、扩容等决策。以确保应用系统能够满足不断增长的业务需求。Ganglia可以通过多播和单播收集数据。当被监控节点较多时,通过组播方式采集数据,可以大大降低数据采集的负载,提高监控和数据采集的性能。对于不能使用组播采集数据的网络环境,也可以通过单播采集数据,所以Ganglia在数据采集方式上非常灵活。Ganglia可以收集各种指标的数据。默认情况下,Ganglia可以收集六个方面的数据:cpu、内存、磁盘、I/O、进程和网络。同时,Ganglia提供了C或Python接口,用户可以通过该接口自定义Datacollection模块,这些模块可以直接插入Ganglia来监控用户自定义的应用程序。Ganglia通过gmond完成自定义监控。有很多现成的模块,地址如下:https://github.com/ganglia/gmond_python_modules基于Ganglia的以上优点,非常适合作为监控报警平台的数据采集模块。Cacti/Zabbix虽然也可以实现数据采集和图形化报表展示,但是当监控节点越来越多时,Cacti和Zabbix的缺点也逐渐暴露出来,数据采集的准确性和实时性难以保证。向上。因此,构建高性能的监控告警平台,Ganglia是首选的数据采集模块。我们之前在线监控了三地机房10000多台服务器,性能稳定,数据告警延迟基本在10s左右。Centreon仅仅有Ganglia作为监控和报警模块来收集数据是不够的。运维人员不可能天天盯着数据报表看。因此,还需要对采集到的数据进行监控和告警:为每个需要监控的主机或服务设置一个告警阈值。当采集到的数据超过这个阈值时,会自动报警并通知给运维人员,而如果采集到的数据没有超过指定的报警阈值,运维人员就可以做其他事情,而不是盯着数据报表每时每刻。这是构建智能监控告警平台必须要实现的。功能。实现监控主机或服务的状态值,达到指定阈值报警的功能并不难。可以通过写一个简单的脚本来实现,但是这样太原始了,没有层次感。维护性能差,当需要监控告警的主机或服务越来越多时,脚本的性能就变得很差,管理起来也很不方便,更谈不上任何可视化效果。因此,需要专业的监控报警器。工具来完成这个。Centreon是一个强大的分布式IT监控系统。它可以通过第三方组件监控网络、操作系统和应用程序。它的特点如下:它是开源的,我们可以免费使用它。底层与Nagios紧密结合。它的底层使用nagios作为监控软件(目前官方已经开发了自己的底层监控)。同时nagios通过ndoutil模块定时将监控数据写入数据库,Centreon实时从数据库中读取。通过网页界面显示数据和监控数据。你可以通过Centreon来管理和配置nagios,或者Centreon是nagios的管理配置工具。通过Centreon提供的web配置界面,可以轻松完成nagios的各种繁琐配置。支持多种插件,Centreon还支持NRPE、SNMP、NSClient等插件,通过插件可以搭建分布式监控告警系统。Centreon可以通过第三方组件对网络、操作系统和应用程序进行监控和告警。在数据层,Centreon通过ndoutil模块定时将监控数据写入数据库。在展示层,Centreon提供Web界面来配置和管理需要监控的主机或服务,并提供多种告警通知方式。同时还可以显示监控数据和告警状态,查询历史告警记录。Ganglia和Centreon的无缝集成Nagios和Ganglia都是很好的数据中心监控工具。虽然它们的功能有重叠,但是监控的侧重点是不同的:Ganglia侧重于收集数据和跟踪任何时间状态的数据。通过Ganglia,我们不仅可以看到数据的历史状态,还可以预测数据未来的发展趋势,为我们的应用修改和硬件采购提供决策。Nagios更侧重于监控数据和执行过载警报。综合Ganglia和Nagios的优缺点,同时运行这两个工具可以弥补它们的不足:Ganglia暂时没有内置告警通知机制,Nagios在这方面强。Nagios没有内置代理和分布式监控机制,而Ganglia在设计时就考虑到了这些。Nagios没有直观的报表展示(虽然可以通过PNP插件实现),而Ganglia的报表功能非常强大。Ganglia内置了很多开发接口,通过这些接口可以将Ganglia收集的数据置于Nagios的监控之下。确定使用Ganglia作为数据采集模块,Centreon作为监控报警模块。这样,一个智能监控报警平台的两大主要功能模块就基本实现了,但是现在的问题是:如何将采集到的数据传输到监控报警模块?这是数据提取模块要完成的功能。数据提取模块要完成的功能是定时从数据采集模块采集指定的数据,然后将采集到的数据与指定的报警阈值进行比较。如果发现采集到的数据大于或小于指定的报警阈值,则通过监控报警模块设置的报警方式进行故障通知。在此过程中,数据采集模块仅完成数据采集,其他操作,如数据采集的时间间隔、报警阈值设置、报警方式设置、报警触点设置等均在监控中完成和报警模块。从数据提取模块完成的功能可以看出,该模块主要是用来连接数据采集模块和监控报警模块,进而完成Ganglia和Centreon的无缝集成。实现数据提取模块的功能,目前还没有现成的方法,需要在ganglia的基础上进行二次开发。比较简单的方法是通过程序在ganglia上开发一个数据提取接口,然后将数据提取到nagios中。初步方案是通过python程序实现的。当然也有现成的解决方案,推荐两个现成的数据提取脚本:PHP版:http://www.iivey.com/ganglia/check_ganglia_metric.php.txtPython版:http://www.iivey。com/ganglia/check_ganglia_metric.py.txt统一监控系统架构图我们看一下整个监控平台的系统架构:Cluster1-N都是分布式集群,也可以看成是机房数据中心。每个数据中心的Node服务器运行一个Gmond守护进程收集数据,并将收集到的数据汇总给Ganglia代理主机,Gmetad守护进程运行在Ganglia代理主机上。同时,Gangliaproxy和Nodeserver都加载了用C或Python编写的Ganglia插件,以扩展Ganglia的监控功能。ManagerServer是管理主机,主要用于采集各个数据中心的监控数据,通过数据抽取模块集成Nagios和Ganglia。出于数据安全和服务可用性的考虑,ManagerServer推荐备机。通常,主机和备用机同时工作以进行数据采集。当主机出现故障时,会自动切换到备机,保证管理主机的高可用。通过Web展示监控数据和报表,集成Nagios和Gangliaweb进行二次开发,通过统一的界面展示监控状态和报表信息。Ganglia数据流图在Ganglia分布式监控系统中,gmond和gmetad是如何传递数据的?接下来介绍一下Ganglia是如何实现数据传输和采集的。请看下图:基本流程如下:gmond收集本机的监控数据,发送给其他机器,收集其他机器的监控数据。gmond通过udp通讯,传输文件格式为XDL。gmond节点间的数据传输方式除了支持单播点对点传输外,还支持组播传输。gmetad周期性的去gmond节点或者gmetad节点拉取数据,gmetad只有一个tcp通道,gmond和gmetad之间的数据以XML格式传输。gmetad可以从gmond和其他gmetad获取xml数据。gmetad将获取到的数据更新到rrds数据库中。Nagios通过数据提取模块监控ganglia获取的数据并发出告警。通过web监控界面,从Gmetad获取数据,读取rrd数据库,生成图片展示。至此,神经节的内部结构已经被彻底解剖。这样就搭建了一个完整的运维监控平台。我们使用这个架构作为运维监控平台,已经稳定运行了3年多,监控了12000多台服务器。问答环节问题一:gmetad是单机吗?gmetad监控10000台主机需要什么配置?答:gmetad是数据采集的核心,不建议单机使用。至少应使用两台主备主机。1万台主机分布在3个机房,gmetad做成分布式结构,ganglia本身也支持分布式数据聚合,从刚才的数据流图可以看出。问题2:报警策略只是大于XX还是小于XX?还有其他策略吗?答:报警策略集成在Centreon中,设置策略非常灵活,比如大于、小于、等于、重试次数、间隔等都可以设置,可以根据自己的需要来定义.问题三:中间件和数据库的监控内容是什么?答:监控内容需要根据业务需要定制。通常,监控内容分为三类:系统底层数据。业务系统没有逻辑关系数据。业务系统具有逻辑关系数据。定义监控内容,添加到监控告警平台。问题4:gmond收集本机的监控数据,发送给其他机器,收集其他机器的监控数据。Gmond通过udp通讯,传输文件格式为XDL。怎么理解呢?答:gmond支持单播和组广播收集和发送数据,单播只是向上层节点上报数据,多播是互相收集数据,然后上报,传输文件格式为xdl,发送的数据格式可以通过telnetgmond端口可以看到。问题5:监控平台是否支持所有windows和linux平台的监控?答:支持全平台监控,支持各种系统平台、网络、交换机等。问题6:我们的监控系统有专门的团队维护吗?答:我们的监控平台由运维团队维护,做二次开发。问题七:是否支持波动率监测?答:波动监测是肯定存在的。它以udp方式发送数据,数据更新速度非常快。最重要的一点是,ganglia非常适合分布式多机房监控。每个机房通过VPN传输数据。网络间波动的影响可以通过监控参数进行调整。问题8:10000多台机器有多少个监控项?每天有多少次闹钟?答:我们的数据监控项超过1w,每次获取的xdl数据在20-30M左右。核心数据是Hadoop。这种方式推荐通过单播方式采集,因为组播对网络的消耗很大。问题9:文中提到1w台服务器的监控延时是三秒。如果某些监控点的执行时间太长不能这么快,如何避免呢?如果机器资源不足,频繁运行监控,机器会挂掉吗??答:我们的最大延时报警是10s。每个节点都在从gmond获取数据,gmond主动向上层gmond发送数据,所以消耗很小,几乎可以忽略不计。需要注意的是上层gmond的数据聚合点,这些服务器需要配置高性能的cpu和磁盘,所以磁盘io消耗很大。对于执行时间过长的监控点,可以设置超时机制。这种情况一般发生在跨机房监控,机房内基本不会发生。情况。选择ganglia是因为gmond消耗的客户端资源非常少。问题10:监控运维和开发团队有多少人?答:6人,开发运维2人,系统(业务)运维3人,网络运维1人。
