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

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

传统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

深入探讨运维驱动的可监控性设计相关推荐

  1. 运维服务器手段(监控宝,Nagios,百度通告平台)

    站在"巨人"的肩膀上运维 现实问题 之前在论坛看到一个运维工程师的帖子,内容如下: "现在的一个IT工作者最头疼的就是加班,秃顶的是IT工作者最多.单身的是IT工作者最多 ...

  2. Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志

    Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志 1. 查看集群资源状况 2. 监控集群资源利用率 3. 管理K8s组件日志 4. 管理K8s应用日志 1. 查看集群资源 ...

  3. 乔安监控云存储_智能运维丨全栈监控,护航云上业务

    自2006年至今,云计算商用领域已经历了十余载的发展.云也从概念普及进入到广泛应用阶段,云服务变成了像水电一样的基础服务,已经是行业共识. 云发展速度快.成长空间大,监控场景复杂 最新Gartner的 ...

  4. [shell] IT运维之Linux服务器监控方案

    随着Linux应用日益广泛,绝大部分的网络服务器都使用Linux操作系统.为了全面掌握网络服务器的运行状况和趋势,需要对服务器进行全面的监控. 利用Linux发行版搭建一个网络服务器可能对于许多人都是 ...

  5. 机房运维神器之远程监控网络设备

    在机房运维工作中,存在很多网络设备,这些网络设备经常会出现各种异常导致损失. 下面分享一款机房运维神器,可以远程监控网络设备的异常状况,自动报警以及远程重启. 别看它小巧,但是功能强大,非常适合智慧城 ...

  6. 运维(32) Prometheus+Grafana监控SpringBoot

    文章目录 一.前言 二.SpringBoot集成Micrometer 1.`pom.xml`中引入依赖 2.`application.yml`配置 3.Micrometer配置 三.部署Prometh ...

  7. 大数据运维 | 集群_监控_CDH_Docker_K8S_两项目_云服务器

    说明:大数据时代,传统运维向大数据运维升级换代很常见,也是个不错的机会.如果想系统学习大数据运维,个人比较推荐通信巨头运维大咖的分享课程,主要是实战强.含金量高.专注度高,有6个专题+2个大型项目+腾 ...

  8. python 远程桌面爆破,Python安全运维第一弹 --实时监控远程桌面连接

    大部分安全工作者都会选择学习python这门语言,常用的内建模块以及大量的第三方模块能够帮助我们快速的实现自己的目的.在日常的安全运维中,很多时候我们会碰到避免安装第三方软件或是第三方软件无法契合自己 ...

  9. 运维思索:系统监控体系

    简述 各位小伙伴,近期技术文感觉发的有点多,不知是否给大家在工作中解决实际问题带来了一些灵感.为什么这么说呢?因为正是文章中涉及的细小知识点积少成多,让我从零碎繁忙的运维工作中得到了一定程度的解放.相 ...

最新文章

  1. webstorm更改scss输出路径
  2. JavaScript语言基础6
  3. 让CNN有了平移不变性,同时提升ImageNet成绩:Adobe开源新方法,登上ICML
  4. 第12天续,CSS基础
  5. Oracle 多行合并一行 方法
  6. 重载练习3_实现重载的println方法
  7. canvas绘制多边形
  8. 编译安装postfix+sasl+mysql+dovecot+extmail构建完成的邮件系统(一)
  9. spss之数据预处理
  10. 深度置信网络(DBN)在Tensorflow中的实现以及它在MNIST中的应用实例
  11. minitab怎么算西格玛水平_计算西格玛水平.ppt
  12. Autodesk如何炸开增加属性块
  13. Java POI word常用方法 在Cell插入子表格
  14. 群晖域名注册_小白瞎折腾 篇九:玩转群晖NAS:域名注册技巧,及SSL证书获取...
  15. 北京大学陈斌教授 python_好老师陈斌,这样在北大走红
  16. 字符串分割和数组组合(spilt,join)
  17. 半丸子头java教程视频教程_半丸子头怎么扎?半丸子头扎发视频教程
  18. vue实现下拉二级联动_Vue实现三级联动/多级联动/城市选择
  19. C++面向对象实现一个模板类链表
  20. 川土微电子 | CA-IF1051 CAN-FD收发器

热门文章

  1. scala 函数中嵌套函数_Scala中的VarArgs函数和@varargs批注
  2. Git合并特定commits 到另一个分支
  3. 云原生技术的优势是什么?
  4. Java开发中常用的设计模式-单例模式
  5. 开课吧:为什么AI工程师都要懂一点架构呢?
  6. java版b2b2c社交电商spring cloud分布式微服务(十)高可用的服务注册中心
  7. 大数据高地,这样炼成!
  8. eclipse错误及解决方法
  9. Android导出jar包后的资源使用问题
  10. window服务程序编写及发布