当前位置: 首页 > 科技观察

运维必须知道监控知识体系

时间:2023-03-19 13:23:53 科技观察

监控是整个运维乃至整个产品生命周期中最重要的一环。事前提供故障预警和检测,事后提供详细数据,便于问题的跟踪和定位。现在业界有很多好的开源产品可供选择。选择开源监控系统是一种省时、省力、高效的解决方案。当然,对监控不是很了解的朋友,看了下面几篇文章后,可能会对整个监控系统有更深入的了解。1.监控对象每个人由于行业、公司、业务、岗位的不同,对监控的理解也不尽相同。但是需要注意的是,监控需要从公司业务的角度来考虑,而不是为了某种监控技术的使用。不间断实时监控系统:其实就是不间断实时监控系统(这就是监控);系统当前状态的实时反馈:我们需要在监控某个硬件或者某个系统的时候能够实时的看到当前系统的状态是正常的,异常的,还是有故障的。保证服务的可靠性和安全性:我们监控的目的是保证系统、服务、业务的正常运行,保证业务的持续稳定运行:如果我们的监控做好了,即使出现故障,我们能第一时间收到故障报警。第一时间处理,确保业务连续稳定运行。二、监控方式1、了解监控对象:你知道我们要监控的对象吗?例如,CPU是如何工作的?2.性能基准指标:我们要监控哪些属性?例如,CPU使用率、负载、用户模式、内核模式和上下文切换。3.告警阈值定义:什么算故障,应该告警?比如CPU负载有多高,用户态和内核态分别有多高?4.故障处理流程:出现故障告警我们怎么处理呢?有没有更高效的处理流程?3、监控核心发现问题:当系统出现故障报警时,我们会收到故障报警的信息。定位问题:故障邮件一般包含某台主机故障和具体故障的信息。我们需要分析告警的内容。比如一个服务器连接不上,我们需要考虑是不是网络问题,或者是负载过高导致长时间连接不上,或者是某个开发触发了相关政策被禁止防火墙等,需要具体分析故障原因。解决问题:当然,我们在了解了故障原因后,还需要通过故障解决的优先级来解决故障。总结问题:在我们解决了主要故障之后,我们需要总结故障的原因和预防措施,以免以后再次发生。4、监控工具接下来,我们需要选择适合公司业务的监控工具进行监控。这里我对监控工具做了一个简单的分类。一、资深监控MRTG(MultiRouteTrafficGrapher)是一套可以用来绘制网络流量图的软件。它由瑞士奥尔滕的TobiasOetiker和DaveRand开发,并根据GPL获得许可。MRTG最好的版本是1995年推出的,用Perl语言编写,可以跨平台使用。数据收集使用SNMP协议。MRTG利用手机接收到的数据,通过网页绘制GIF或PNG格式的图片。Ganglia是一个跨平台、可扩展、高性能的集群和网格等分布式监控系统。它基于分层设计,并使用了广泛的技术来使用RRDtool存储数据。具有可视化界面,适用于集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的连接开销非常低。目前有上千个集群在使用这套监控系统,可以轻松应对2000个节点的集群环境。Cacti(英文意为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监控图形分析工具。它通过snmpget获取数据,使用RRDtool进行绘制,但用户不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能。可以指定每个用户可以查看树形结构、主机设备和任意图片。也可以结合LDAP进行用户认证,也可以自定义模板。在历史数据显示监控方面,它的功能还是比较不错的。Cacti通过添加模板使得不同设备的监控可复用,并具有可定制的绘图功能和强大的计算能力(数据叠加功能)Nagios是一个企业级的监控系统,可以监控服务的运行状态和网络信息等,并可以监控指定的本地或远程主机状态和服务,并提供异常告警通知等功能。Nagios可以运行在Linux和UNIX平台上。同时提供Web界面,方便系统管理员查看网络状态、各种系统问题以及系统相关的日志。Nagios的功能侧重于监控服务的可用性,可以根据监控指标的状态触发告警。目前Nagios也占据了一定的市场份额,但是Nagios已经跟不上时代的步伐,已经不能满足不断变化的监控需求。架构的可扩展性和使用的便利性需要加强。其高级功能都集成在NagiosXI商业版中。Smokeping主要用于监控网络性能,包括定时ping、www服务器性能、DNS查询性能、SSH性能等。底层也有RRDtool支持。特点是画的很漂亮。网络丢包和延迟用颜色和阴影标记。它支持堆叠多张图片。作者还开发了MRTG、RRDtll等工具。Smokeping网站是:http://tobi.oetiker.cn/hp。开源监控系统OpenTSDB使用HBase存储所有时序(无采样)数据,构建分布式、可扩展的时序数据库。支持秒级数据采集、永久存储、容量规划,轻松接入现有报警系统。OpenTSDB可以从大规模集群(包括集群中的网络设备、操作系统、应用程序)获取相应的采集指标,并对其进行存储、索引和服务,使得这些数据更容易被人们理解,比如基于Web,图解等2.王牌监控Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端。它有专门的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议。它会将采集到的数据存储在数据库中,然后进行分析整理,当满足条件时触发报警。其灵活的扩展性和丰富的功能是其他监控系统无法比拟的。相对来说,它的整体功能还是很不错的。从以上各种监控系统的对比来看,Zabbix是有优势的。其丰富的功能、扩展能力、二次开发能力和简单易用的特点,读者稍加学习即可自行搭建。监视系统。小米的监控系统:Open-Falcon。Open-Falcon的目标是做最开放好用的互联网企业级监控产品。3、三方监控现在市面上有很多不错的第三方监控,比如:监控宝、监控易、听云,还有很多内置监控的云厂商,这里不打算介绍了.如果想了解第三方监控,可以自行查阅官网。(切忌打广告)五、监控流程上面介绍了这么多,选择哪种监控工具最合适呢?这里推荐几款开源监控工具:Zabbix、Open-Falcon、LEPUSUsagi(专用于监控数据库)。但本文仍然是基于Zabbix搭建整个监控系统生态。下面说说Zabbix的整个过程:数据采集:Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等方式从系统中采集数据;数据存储:Zabbix存储在MySQL上,也可以存储在其他数据库服务中;数据分析:当我们事后需要对故障进行回顾分析时,Zabbix可以为我们提供图形、时间等相关信息,以便我们进行故障判断;数据展示:Web界面展示,(手机APP,java_php也可以开发web界面);监控告警:电话告警、邮件告警、微信告警、短信告警、告警升级机制等(无论哪种告警都可以);告警处理:当收到告警时,我们需要根据故障的级别进行处理,如:重要紧急、重要不紧急、等待。根据故障程度,配合相关人员快速处理。6.监控指标以上,我了解了监控的方法、目标、流程,以及有哪些监控工具。有些人可能想知道我们需要监控什么。这里我对它们进行了分类,包括硬件监控、系统监控、应用监控、网络监控、流量分析、日志监控、安全监控、API监控、性能监控、业务监控。1、硬件监控早期我们采用机房巡检的方式,通过检查硬件设备的灯是否闪烁来判断是否有故障。这是浪费人力,而且是重复性的非技术性工作。每个人都明白。当然,我们现在可以通过IPMI监控硬件的细节,并对CPU、内存、磁盘、温度、风扇、电压等设置告警并设置告警阈值(监控告警内容自己写一个合理的告警范围).IPMI监控硬件服务参考:ZabbixIPMIInterface2.系统监控中小型企业基本上都是Linux服务器,所以我们必须监控系统资源的使用情况。系统监控是监控系统的基础。监控主要对象:CPU有几个重要的概念:上下文切换、运行队列和使用情况。这也是我们CPU监控的几个关键指标。正常情况下,每个处理器的运行队列不应高于3,CPU利用率中的“用户态/内核态”比例应保持在70/30,空闲态应保持在50%。应根据系统的繁忙程度集成上下文切换。考虑。CPU常用的工具有:htop、top、vmstat、mpstat、dstat、glances。Zabbix提供了一个系统监控模板:ZabbixAgentInterface。CPU整体状态上下文切换负载状态内存:通常我们需要监控内存使用情况,SWAP使用情况,同时可以使用Zabbix绘制内存使用曲线图,寻找服务内存溢出等常用工具对于内存有:free、top、vmstat、glances。内存使用IO分为磁盘IO和网络IO。除了做性能调优时监控更详细的数据外,日常监控只关注磁盘使用率、磁盘吞吐量和磁盘写入繁忙度。网络还可以监控网卡流量。常用的工具有:iostat、iotop、df、iftop、sar、glances。磁盘使用情况磁盘读写吞吐量网卡进出口流量TCP11种状态信息其他系统监控还包括正在运行的进程端口、进程号、登录用户、OpenFile等(参见Zabbix自带的OSLinux模板细节)。其他相关监控3.应用监控在了解了硬件监控和系统监控的研究之后,我们进一步的操作就是登录服务器查看服务器上运行了哪些服务,这些服务都需要监控。应用服务监控也是监控系统的重要组成部分,如:LVS、HAProxy、Docker、Nginx、PHP、Memcached、Redis、MySQL、RabbitMQ等,需要使用zabbix监控相关服务。nginx_statusPHP-FPM_statusRedis_statusJVM监控之前写过服务监控的详细操作流程,这里就不一一展示了。详情请访问:Zabbix监控各种应用服务。Zabbix提供应用服务监控:ZabbixAgentUserParameterZabbix提供的Java监控:ZabbixJMXInterfacePercona提供MySQL数据库监控:percona-monitoring-plulgins4.网络监控作为面向全国用户的电子商务网站,它跟踪各地到机房的网络状态也是很有必要的。网络监控是我们在搭建监控平台时必须要考虑的,尤其是多机房的场景。各个机房之间的网络状况,机房与全国各地的网络状况,都是我们需要关注的对象。如何掌握状态信息呢?我们需要使用网络监控工具Smokeping。Smokeping是rrdtool的作者TobiOetiker的作品。它是用Perl编写的。主要监控网络性能,www服务器性能,DNS查询性能等,使用rrdtool绘制,支持分布式,直接汇总多个agent的数据。同时,由于监控点比较少,也可以使用很多商业监控工具,比如监控宝、keynote、博锐等。CDN。吸烟监控宝藏5.流量分析网站流量分析是运维人员必备的知识。例如,对于一家电商公司:通过对订单来源的统计分析,可以知道我们在某个网站的广告投入是否收到了预期的效果。可以区分不同地区的访客数量,甚至商品的交易量。百度统计、谷歌分析、站长工具等,只需要在页面中嵌入一个js即可。但数据总是掌握在对方手中,定制不便,因此谷歌发布了一款名为Piwik的开源分析工具。piwik百度统计6、日志监控通常,随着系统的运行,操作系统会产生系统日志,应用程序会产生应用访问日志、错误日志、运行日志、网络日志。我们可以使用ELK来进行日志监控。对于日志监控,最常见的需求是收集、存储、查询和展示。开源社区有对应的开源项目:Logstash(采集)+ElasticSearch(存储+搜索)+Kibana(展示)。我们把这三种技术的结合称为ELKStack,所以ELKStack是指Elasticsearch、Logstash、Kibana技术栈的结合。如果收集了日志信息,部署更新有异常,可以第一时间在Kibana上看到。当然ELK日志展示也可以通过Zabbix过滤错误日志进行告警。7、安全监控虽然Linux的开源安全产品很多,比如四层iptables,七层WEB防护Nginx+Lua实现WAF,最后接收相关日志到ELkstack,图形化展示不同的攻击类型。但总归是一件费时费力的事情,而且个人效果也不是很好。这时候我们可以选择接入第三方服务商。某第三方安全第三方厂商提供完善的漏洞库,涵盖服务、后门、数据库、配置检测、CGI、SMTP等类型。主机全面检测、Web应用漏洞自主挖掘、行业分享相结合,第一时间更新0-day漏洞,杜绝最新安全隐患。8、API监控随着API变得越来越重要,显然我们也需要这样的数据来区分我们提供的API是否能够正常运行。监听API接口GET、POST、PUT、DELETE、HEAD、OPTIONS请求。可用性、正确性和响应时间是三个重要的性能指标。API监控三方API监控响应时间9.性能监控全面监控网页性能、DNS响应时间、HTTP连接建立时间、页面性能指标、响应时间、可用率、元素大小等Zabbix提供URL监控:Zabbix网络监控。Zabbix站点监控终端响应时间第三方监控监控市场。各类图表一目了然,全面反映网页性能的健康状况。10、业务监控没有业务指标监控的监控平台不是一个完整的监控平台。通常在我们的监控系统中,我们必须监控我们重要的业务指标,并设置告警通知的阈值。比如电商行业:每分钟产生多少订单,每分钟注册多少用户,每天有多少活跃用户,每天有多少促销活动,每天带来多少用户促销活动,促销活动带来多少流量,促销活动带来多少利润等等,重要的指标都可以添加到Zabbix,然后通过Screen展示出来。注:由于业务监控图,涉及隐私的数据过多,所以没有截图。7.监控告警故障告警的通知方式有很多种,当然最常用的是短信和邮件。短信告警和邮件告警8.告警处理告警后一般如何处理故障。首先,我们可以通过告警升级机制自动处理。比如Nginx服务宕机,可以设置告警升级自动启动Nginx。但是如果一般业务出现严重故障,我们通常会根据故障的级别和业务分配不同的运维人员进行处理。当然,不同的业务形态、不同的架构、不同的服务可能采用不同的方法。没有固定的模式可以应用。九。面试监控在运维面试中,经常会有监控相关的问题。如何回答这个问题,本文为大家提供一个简单的答案。1.通过SNMP进行硬件监控路由器交换机监控(这些可以和一些厂家沟通了解怎么做),服务器的温度等可以通过IPMI实现。当然,如果没有硬件,一切都是云,直接跳过这一步。2.CPU负载、上下文切换、内存使用、磁盘读写、磁盘使用率、磁盘inode使用率等系统监控。当然,这些都是需要配置的trigger,因为默认的太低了,alarm会很频繁。3、服务监控比如公司使用的LNMP架构,Nginx有自己的Status模块,PHP也有相关的Status,MySQL可以通过官方的Percona工具进行监控。Redis通过自身的info获取信息进行过滤等。方法类似。或者服务随附。要么用脚本实现你要监控的东西,还有报警和图形功能。4.网络监控如果是云主机,不是跨机房,可以选择不监控网络。当然,你说我们是跨机房,怎么办。推荐使用smokeping做网络相关的监控,或者直接交给你的网络工程师,因为技术行业有专攻。5.安全监控如果是云主机,可以考虑使用自带的安全防护。当然也可以使用iptables。如果是硬件,建议使用硬件防火墙。可以使用云购买防DDOS,避免故障导致机器宕机一天。如果是系统,那么权限、密码、备份、恢复等基本的解决方案一定要做好。Web端也可以使用Nginx+Lua来实现Web级的防火墙。当然,你也可以使用集成的OpenResty。6.Web监控关于Web监控的话题仍然很多。比如可以使用内置的web监控来监控页面相关的延迟、js响应时间、下载时间等。这里我推荐使用专业的商业软件监控宝或者听云来实现。毕竟全国都有机房(如果是多个机房那就另当别论了)。7、日志监控如果是Web,可以使用Nginx的50x、40x错误日志和PHP的ERROR日志。其实这些需求无非就是采集、存储、查询、展示。我们其实可以使用开源的ELKStack来实现。Logstash(收集)、Elasticsearch(存储+搜索)、Kibana(展示)。8、业务监控做了这么多,其实最终还是保证了业务的运行。这样我们做的监控才有意义。所以业务层面的监控需要跟开发和总监开会商量,监控比较重要的业务指标(需要开会确认)然后通过简单的脚本实现,最后设置触发器.9、流量分析通常我们分析日志都是用awksedxxx等一堆工具。这样不太方便我们统计IP、PV、UV。然后就可以利用百度统计、谷歌统计、业务开发内嵌代码了。为了避免隐私,你也可以使用Piwik做相关的流量分析。10.可视化使用Screen,引入一些第三方库来美化界面。同时,我们还需要知道订单量突然增加和减少。或者说,一大波流量突然来了,流量是从哪里来的,是推广的还是攻击的。结合监控平台梳理各个系统之间的业务关系。11、自动化监控我们做了上面这么多工作,当然不是一个一个加key就能实现的。可以通过Zabbix的主动模式和被动模式来实现。当然最好通过API来实现。综上所述,如果真的要实现一个比较完善的监控系统,目前的开源软件确实不能很好的满足。有条件的企业开始研发自己的监控系统,比如小米开源的Open-Falcon。也有比较好的开源监控框架如Sensu等,加上InfluxDB和Grafana可以定制适合自己企业的监控平台。