深入探讨运维驱动的可监控性设计

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-应用监控,每月50GB免费额度
日志服务 SLS,月写入数据量 50GB 1个月
简介:

外部质量验收驱动技术债务消除的理念:


技术债务的形成往往是由于赶进度忽略了非功能质量特性而导致的,由于内部质量的不佳(设计或代码质量不高)导致外部质量的低下。


传统IT领域通常有上线前的验收测试,如果能够在验收测试过程中重点关注非功能需求的实现质量,则可以由外而内地驱动开发团队在开发过程中重视和改善软件系统的内部质量。

 

本文来尝试详细探讨一下怎么个驱动法!


运维与开发的关注点不同,运维会更多地关注非功能需求。我们从非功能需求中的“可监控性”来展开看看,运维应该如何应用DevOps思想,驱动开发改善软件系统的质量。 


一、什么是可监控性?


首先我们来对可监控性作出定义:


可监控性是指系统的运行状态、运行关键信息、业务调用过程的透明化程度,信息的可获取、可输出、可转存储程度。

 

系统的可监控性对于运维及时有效地进行故障定位、对于QA和开发进行缺陷定位及调试都至关重要,因此属于DevOps技术领域的核心实践范畴。

 

设备、应用在上线以后,不仅要新增监控点,也要调整现有的相关监控。在系统的运行过程中,同样要对运行的关键信息,特别是业务调用过程加以监控,否则会造成系统故障无法预警,也难以定位问题原因。例如,由于新增进程但是没有增加监控,导致进程僵死却浑然不觉;或者由于没有针对系统积压量的监控而导致数据大量积压却没有及时处理;或者由于关键环节没有输出监控信息从而影响客户感知。

 

因此,可监控性可以从“上线变更监控”、“系统运行监控”和“业务感知监控”这三方面进行规范。


二、监控的变更控制

 

现在一般稍具规模的系统运维都配备了各种各样的监控工具,尤其是针对基础设施(例如:主机、中间件、数据库等层面)的监控,开源的Nagios、Zabbix等都实现了不错的监控功能,新炬也有AMP这类自动化运维平台支持广泛类型的监控。

 

然而,随着系统的不断上线变更,在缺乏有效实施DevOps规范流程的企业中,往往出现设备、应用在上线变更时没有明确相关的改动点,运维侧没有及时部署和调整监控的情况。例如,新增了某些设备、新开启了某个端口、新加了某个应用进程等,而运维缺乏详细的变更清单,导致忽略了监控的调整,后续生产出故障也无法及时定位到。



那么监控的变更控制如何有效实施呢?我认为应该把监控也纳入配置管理进行维护,从管理流程上进行优化:交维时开发需要提交完整的设备、应用监控变更清单;QA和运维需要组织资源进行检查验证和确认,包括变更点的确认检查、新旧监控点的差异对比,确保每个监控点有对应的监控说明(监控脚本或监控工具配置),确保每个监控点的有对应的监控信息输出。

 

纳入监控配置管理的应该包括但不仅限于:

 

  • DNS域名清单:应用、域名、VIP地址、设备端口、IP地址。

  • WEB与APP调用关系清单:模块、WEB实例名称、APP集群组名称。

  • 进程清单:进程类型、进程描述、归属子系统、主机名、IP、主机用户、应用部署目录、日志目录、监控脚本、启动脚本、停止脚本。

  • 接口清单:接口类型、进程描述、进程编码、归属子系统、主机名、IP、主机用户、应用部署目录、启动脚本、停止脚本、日志目录、端口。

 

三、系统运行可监控性设计的验收

 

系统运行的可监控性是指系统运行状态、业务运行信息、系统健康信息的可观测性、透明程度、信息获取的实时程度。


例如:系统定时发出心跳信号,用于判断进程是否仍在工作。



 

为了实时监控系统的状态,保证系统健康运行,系统在开发阶段,需输出系统的运行数据,或提供相关的访问接口,便于维护采集观测。而运维与开发、QA应该在早期就一起(DevOps)分析定义和评审系统运行可监控性的需求和设计。


四、运维前移 – 系统运行可监控性需求分析与设计

 

在需求阶段就应该作出系统运行可监控性的要求(运维前移),否则会造成以下问题:


1、如果需求没有明确需要包含哪些可监控性的要求,那么设计开发人员就不会在实现系统时加入可监控性的设计以及监控访问接口的实现。例如,业务积压量的记录和统计,这样的话,后续运维过程中,一旦发生大量的业务积压量,运维收到投诉,前端用户访问缓慢、业务无法处理,但是也无从知道是否是业务积压,积压量有多少,故障范围无法精确定位,瓶颈无法快速查找!

 


 

2、运营人员需要的业务处理量信息,例如,业务访问量、高峰访问量、业务分类统计等信息,也无法便捷地获取到,对运营分析不利;另外,QA或测试人员如果想做业务性能建模、业务等级划分等工作也没有精确的参考数据。

 

3、无法真正做到开发运维一体化,系统运维缺乏实时透明化的数据(对开发人员有意义的数据),例如系统出错监控信息缺乏,导致开发无法及时响应故障诊断分析和处理;而反过来说,这些数据的缺失,其实是因为需求、设计阶段就没有考虑进去!


五、交付运维 – 系统运行可监控性的验收验证

 

交维的时候,QA和运维应该对系统运行可监控性设计对应的实现进行验证检查和确认验收。系统运行的可监控性验证应该包括但不限于以下内容:

 

  • 心跳信号:系统定时发出简单的消息(数据包),用于判断进程是否仍然在工作。

  • 登录量:系统记录客户端的登录信息,包括登录账号、登录时间、IP地址等,用于统计用户数。

  • 处理量:系统记录业务处理信息,包括业务类型、发生时间、处理时间、处理账号、进程编号等,用于统计已经处理的笔数。

  • 积压量:系统记录等待处理信息,包括业务类型、发生时间等,用于统计等待处理的笔数。

  • 错误量:系统记录业务处理失败信息,包括业务类型、发生时间、报错时间等,用于统计处理失败的笔数。

 

我们可以把它们大致分成几类:

 

  1. 运行状态类:例如,心跳信号等。

  2. 业务运行信息类:例如,登录量、处理量、积压量等。

  3. 系统健康状态类:错误量等。

 

 
 

那么,检查验收的具体方法呢?我觉得主要从完整性有效性两方面来检查验收:


  1. 通过对照需求、设计对系统运行可监控性的要求,对监控点的完整性进行检查,例如,如果对系统的业务运行信息有监控要求,那么就看具体的要求有哪些,逐一对照系统实际的监控输出,看该有的监控信息是否都有,这个可以通过QA或测试进行冒烟测试、主业务流程的测试的同时,对日志文件、监控接口访问、数据记录表等监控信息输出位置进行检查。


  2. 对于某些可监控性的检查,例如系统健康状态类,需要注意检查其有效性,通过在验收测试环境或准发布环境中模拟错误的出现,例如网络故障、进程故障等,触发业务处理失败,查看相关监控点的输出有效性,确保业务类型、错误发生时间等关键信息得以保存、方便统计分析。

 

对于某些检查验证,尽量形成自动化脚本(例如Shell脚本、Python脚本等),或借助自动化工具(例如soapUI、Selenium、RobotFramework等)实现,举部分例子如下:


  1. 某系统的心跳信号的检查,通过脚本发送心跳检查访问接口的数据包,接收响应数据包,检查进程是否工作。


  2. 某系统依赖FTP服务,通过脚本模拟用户ftp登录,获取返回信息,检查是否提示正常登录。


  3. 某接口机属于集群,需要查看某个节点状态,检查执行Shell脚本:


 

六、业务感知可监控性设计的验收

 

业务感知可监控性是指业务处理过程的关键环节信息的可观测性、透明程度、信息获取的实时程度。



例如:订单流程涉及订单录入、优惠组合接口的查询、支付接口的调用等关键环节,由唯一的标识串联,还原客户的一笔完整业务交易过程,并将相关信息输出、存储、统计分析。


七、运维前移 – 业务感知可监控性需求分析与设计 

 

为了实现端到端的统一监控,提升客户感知,在系统开发阶段,需在系统间、模块间调用时,以及业务处理过程的关键环节中输出足够的监控信息。而运维与开发、QA应该在早期就一起(DevOps)分析定义和评审系统业务感知可监控性的需求和设计。

 

特别是,由于目前各层级之间的调用基于服务接口或函数,没有标识调用来源的唯一性,导致一笔业务调用中的各环节无法串接成一个整体。因此,为串联业务办理过程的各个处理环节,应用软件需要输出可以用于串联前后端处理环节的标签。



目前比较火的APM工具,是从后端通过技术手段实现业务感知、用户体验、业务流串联分析,例如,借助中间件的JVM动态插桩分析,获取Java代码调用流程,往数据库提交的SQL语句,由SessionID等标签串联并还原成客户的业务调用流程。


这种方式无疑减轻了开发和运维在业务感知体系设计方面的工作量,但是不可避免地会碰到一些技术上的问题,例如某些组件的开发技术不支持,信息无法获取,导致串联断流。


所以,我建议还是要从根本上解决问题,在开发设计过程中就考虑业务感知的可监控性设计,有了这样的基础信息,后续运维自己开发统计分析平台或借组APM这类工具支撑业务感知监控,都会方便很多!


八、交付运维 – 业务感知可监控性的验收验证

 

交维的时候,QA和运维应该对业务感知可监控性设计对应的实现进行验证检查和确认验收。


业务感知的设计需要重点考虑节点输出信息完整性两个方面:


 

1

 

节点输出

每笔业务调用的所有服务或程序均需要输出相关的监控信息,如web应用、中间件、后台服务、其他应用程序等。这样才能在运维过程中接到业务失败投诉的时候,快速定位问题原因,出现故障的位置!

2

 

信息完整性

监控输出的信息包括但不限于以下内容:可用于串联各处理环节的标签、用户号码、渠道来源、操作工号、调用时间、响应时长、成功或失败、详细报文。其中特别是业务处理失败时,要求必须输出详细的异常信息,日志内容清晰完整,辅助定位问题原因。  

 

因此,对业务感知可监控性的验收验证也要对照需求和设计,重点检查节点输出信息的全面性,以及输出信息的完整性。


 

另外,对监控信息的输出性能(时效性)也要进行检查,例如:延迟时间不高于3分钟。


其次,对监控信息存储的方式也要做合规检查,例如:


  • 监控信息支持的存储方式完整性检查(监控信息支持文件、数据库表等多种保存格式)。

  • 监控信息存储正确性检查。

 

最后,还要对开启业务感知监控对系统性能影响进行验证评估。

 

例如:在验收测试环境或准发布环境进行两轮测试,第一次不开启业务感知监控,第二次开启,对比两次测试的性能结果,确保业务感知监控信息的输出不对系统的处理能力带来较大的影响(例如:处理能力和资源消耗损失在3%以内) 

 

九、小结

 

本文从可运维性角度,结合运维前移的理念,强调需求设计阶段对非功能需求中的运维可监控性进行详细考虑的必要性,并提出交维阶段对可监控性设计和实现的验收验证方法、技术和工具的应用方法。


作者介绍   陈能技

  • 【DBA+社群】原创专家,新炬网络首席APM架构师。

  • 14年开发测试与质量架构经验,擅长DevOps及APM、Docker、持续集成、持续交付在企业中的落地实施。

  • 著有《软件性能测试诊断分析与优化》、《软件自动化测试成功之道》、《深入浅出性能测试与LoadRunner实战》等书。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2016-04-12

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
目录
相关文章
|
3月前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全方位实践
本文深入探讨了构建高效运维体系的关键要素,从监控、日志管理、自动化工具、容器化与微服务架构、持续集成与持续部署(CI/CD)、虚拟化与云计算以及安全与合规等方面进行了全面阐述。通过引入先进的技术和方法,结合实际案例和项目经验,为读者提供了一套完整的运维解决方案,旨在帮助企业提升运维效率,降低运营成本,确保业务稳定运行。
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
178 3
|
4月前
|
运维 Prometheus 监控
OceanBase 的运维与监控最佳实践
【8月更文第31天】随着分布式数据库解决方案的需求日益增长,OceanBase 作为一种高性能的分布式数据库系统,在众多场景下得到了广泛应用。为了确保 OceanBase 集群的稳定运行,合理的运维与监控是必不可少的。本文将探讨 OceanBase 的日常运维管理与监控策略,并提供相应的代码示例。
236 2
|
1月前
|
机器学习/深度学习 人工智能 运维
智能化运维:AI驱动下的IT运维革命###
本文探讨了人工智能(AI)技术在IT运维领域的创新应用,强调其在提升效率、预防故障及优化资源配置中的关键作用,揭示了智能运维的新趋势。 ###
|
6月前
|
运维 Prometheus 监控
监控与日志分析:运维的双剑合璧
【6月更文挑战第21天】监控与日志分析在IT运维中至关重要。监控守护系统健康,通过性能指标、服务状态和安全事件预警确保稳定性;日志分析则用于问题追踪,通过错误、访问和安全日志定位故障。监控工具如Prometheus与日志分析工具如ELK堆栈协同工作,统一平台、合理告警、定期分析和团队协作是高效运维的关键。这两者的结合助力运维人员迅速响应和解决问题,维护系统稳定。
|
1月前
|
消息中间件 数据采集 运维
一份运维监控的终极秘籍!监控不到位,宕机两行泪
【10月更文挑战第25天】监控指标的采集分为基础监控和业务监控。基础监控涉及CPU、内存、磁盘等硬件和网络信息,而业务监控则关注服务运行状态。常见的监控数据采集方法包括日志、JMX、REST、OpenMetrics等。Google SRE提出的四个黄金指标——错误、延迟、流量和饱和度,为监控提供了重要指导。错误监控关注系统和业务错误;延迟监控关注服务响应时间;流量监控关注系统和服务的访问量;饱和度监控关注服务利用率。这些指标有助于及时发现和定位故障。
98 1
|
2月前
|
运维 Prometheus 监控
运维之眼:监控的艺术与实践
在信息技术飞速发展的今天,运维监控已成为保障系统稳定运行的关键。本文将探讨运维监控的重要性,介绍常用的监控工具和方法,并通过实际案例分析,展示如何有效地实施监控策略,以确保系统的高可用性和性能。
|
2月前
|
运维 监控 测试技术
构建高效运维体系:从监控到自动化的实践之路
【10月更文挑战第9天】 在当今信息技术飞速发展的时代,运维作为保障系统稳定性与效率的关键角色,正面临前所未有的挑战。本文将探讨如何通过构建一个高效的运维体系来应对这些挑战,包括监控系统的搭建、自动化工具的应用以及故障应急处理机制的制定。我们将结合具体案例,分析这些措施如何帮助提升系统的可靠性和运维团队的工作效率。
55 1
|
2月前
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全面指南在当今数字化时代,运维作为保障系统稳定性和效率的重要环节,其重要性不言而喻。本文将深入探讨如何构建一个高效的运维体系,从监控系统的搭建到自动化运维的实施,旨在为读者提供一套完整的解决方案。
本文详细介绍了高效运维体系的构建过程,包括监控系统的选择与部署、日志分析的方法、性能优化的策略以及自动化运维工具的应用。通过对这些关键环节的深入剖析,帮助运维人员提升系统的可靠性和响应速度,降低人工干预成本,实现业务的快速发展和稳定运行。
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
147 0