审校 | 重楼
如今的软件开发商经常面临两大挑战——快速交付和大规模创新。DevOps通过在软件开发生命周期(SDLC)中引入自动化来开发和交付高质量的软件,从而帮助解决这些挑战。
持续集成(CI)/持续部署(CD)是DevOps实践中自动化的关键组件。它可以自动化代码构建、测试和部署,因此企业可以更快、更可靠地交付代码更改。但是,必须持续监控他们的持续集成(CI)/持续部署(CD)管道,以实现DevOps承诺。
那么,DevOps中的监控是什么,企业如何利用它来挖掘最佳的DevOps潜力?以下进行深入探讨……
什么是DevOps监控?
DevOps方法论的核心是一种数据驱动的方法。持续改进软件质量的能力完全依赖于理解代码如何执行,它引入了什么问题,以及在哪里找到改进机会。这就是DevOps监控发挥重要作用的地方。
DevOps监控是在DevOps生命周期的每个阶段(从规划、开发、集成和测试到部署和操作)跟踪和测量代码的性能和健康状况的实践。它有助于实现应用程序和基础设施性能的实时、易于使用的单一窗格视图。好处是可以及早发现重大威胁,并在它们成为令人头痛的问题之前解决它们。DevOps监控收集有关从CPU利用率到存储空间到应用程序响应时间的所有数据。实时流、可视化和历史回放是DevOps监控的一些关键方面。
DevOps监控对业务组织的重要性是什么?
DevOps监控使业务组织能够跟踪、识别和理解关键指标,例如部署频率和故障、代码错误计数、拉取请求的周期时间、更改失败率、平均检测时间(MTTD)、平均缓解时间(MTTM)和平均补救时间(MTTR)。这些具有价值的见解使组织能够主动识别应用程序或基础设施问题,并实时解决这些问题。监控还可以通过识别自动化的机会来优化DevOps工具链。
以下是突出DevOps监控对业务组织的重要性的一些关键好处:
1.能见度高
由DevOps促成的持续集成(CI)/持续部署(CD)支持频繁的代码更改。然而,代码更改速度的加快使得生产环境越来越复杂。此外,在现代云原生生态系统中引入微服务和微前端会导致在生产中运行各种工作负载,每种工作负载在规模、冗余、延迟和安全性方面都有不同的操作需求。因此,提高DevOps生态系统的可见性对于团队实时检测和响应问题至关重要。这就是持续监测发挥关键作用的地方。
DevOps监控提供了在不同环境中部署新版本代码时应用程序性能的实时视图。因此,可以在流程的早期识别和修复问题,并继续测试和监控后续的代码更改。监控可以帮助组织验证新版本,以确保它们按计划执行,因此可以放心地发布新部署。
2.加强协作
DevOps的核心原则是实现开发团队和运维团队之间的无缝协作。然而,工具之间缺乏适当的集成会阻碍不同团队之间的协调。这就是DevOps监控的用武之地,可以利用持续监控来获得整个DevOps管道的完整和统一的视图。甚至可以跟踪提交和拉取请求,以更新相关Jira问题的状态并通知团队。
3.高实验性
不断变化的客户需求要求组织不断尝试,通过个性化和优化的转换渠道来优化他们的产品线。组织的团队经常在生产环境中运行数百个实验和功能标志,这使得很难确定任何降级体验的原因。此外,客户对不间断服务和应用程序的需求不断增加,可能会增加应用程序的漏洞。持续监控可以帮助组织监控实验,并确保它们按预期工作。
4.管理变更
通常,大多数生产中断都是由频繁的代码更改触发的。因此,必须实现变更管理,特别是对于关键任务应用程序,例如银行和医疗保健应用程序。人们需要确定与变更相关的风险,并基于变更的风险自动化审批流程。全面的监控策略可以帮助组织处理这些复杂性,只需要一组丰富、灵活、高级的监控工具。
5.监控分布式系统
组织经常处理由许多规模的跨公司服务组成的分布式系统。因此,组织的团队需要监控和管理他们所构建的系统以及相关系统的性能。DevOps监控使组织能够轻松地处理这种依赖的系统监控。
6.左移测试
左移测试就是向左移动时进行测试。在软件开发生命周期的开始阶段执行时,它可以显著提高代码质量,并减少测试周期。但是,只有当组织简化对预生产环境运行状况的监控并尽早且频繁地实施时,才能实现左移测试。持续监控还使组织能够在将应用程序部署到生产环境之前跟踪用户交互并维护应用程序的性能和可用性。
统一监控和分析的好处
统一的监控和分析可以帮助组织的DevOps团队在整个软件生命周期中获得完整的端到端可见性。然而,在DevOps持续集成(CI)/持续部署(CD)生态系统中统一监控数据、分析和日志可能具有挑战性和复杂性。
DevOps监控类型
基础设施监控
每个IT企业都必须建立和维护IT基础设施,以便以无缝和高效的方式交付产品和服务。通常,IT基础设施包括与IT相关的一切,例如服务器、数据中心、网络、存储系统以及计算机硬件和软件。DevOps监控有助于管理和监控这个IT基础设施,这被称为基础设施监控。
基础设施监控从IT基础设施收集数据。它通过分析数据来获得深入的见解,从而帮助跟踪计算机系统、网络和其他IT统的性能和可用性。它还有助于收集关于CPU利用率、服务器可用性、系统内存、磁盘空间和网络流量等指标的实时信息。基础设施监控包括硬件监控、操作系统监控、网络监控和应用程序监控。
一些流行的基础设施监控工具有:
- Nagios
- Zabbix
- ManageEngine OpManager
- Solarwinds
- Prometheus
应用程序监控
应用程序监控帮助DevOps团队跟踪应用程序性能的运行时指标,比如应用程序正常运行时间、安全性和日志监控细节。应用程序性能监控(APM)工具用于监控广泛的指标,包括事务时间和数量、API和系统响应以及整体应用程序运行状况。这些指标以图形和统计数据的形式得到,因此DevOps团队可以轻松地评估应用程序的性能。
一些流行的应用程序监控工具是:
- Appdynamics
- Dynatrace
- Datadog
- Uptime Robot
- Uptrends
- Splunk
网络监控
网络监控用于跟踪和监控计算机网络及其组件(如防火墙、服务器、路由器、交换机和虚拟机)的性能和可用性。通常,网络监控系统共享5个重要数据点,即发现、映射、监控、警报和报告。网络监控有助于发现网络故障、测量性能和优化可用性。这使组织的DevOps团队能够防止网络停机和故障。
一些流行的NMS工具有:
- Cacti
- Ntop
- Nmap
- Spiceworks
- Wireshark
- Traceroute
- Bandwidth Monitor
DevOps监控和可观察性的区别
DevOps团队经常交替使用监控和可观察性。虽然这两个概念在确保系统、数据和应用程序的安全性方面都起着至关重要的作用,但监控和可观察性是互补的功能,并不相同。以下了解一下这两个概念的不同之处:
监测和可观察性之间的区别取决于所收集的数据是否预定义。监控收集和分析从各个系统收集的预定义数据,可观察性收集所有IT系统产生的所有数据。
监控工具通常使用仪表板来显示性能指标和其他KPI,因此DevOps团队可以轻松地识别和纠正任何IT问题。然而,指标只能突出组织的团队可以预见的问题,因为它们是创建仪表板的问题。这使得DevOps团队难以监控云原生环境和应用程序的安全性和性能状况,因为这些问题通常是多方面的且不可预测的。
另一方面,可观察性工具利用从整个IT基础设施收集的日志、跟踪和度量来识别问题,并主动通知团队以减轻问题。在监控工具提供有用数据的同时,DevOps团队需要利用可观察性工具对整个IT基础设施的健康状况进行可操作的洞察,并在性能异常的第一个迹象时检测漏洞或脆弱的攻击载体。然而,可观察性并不能取代监测,与其相反,它有助于更好的监控。
最好的DevOps监控工具
DevOps监控工具使DevOps团队能够实现对整个DevOps应用程序开发生命周期的持续监控,并在将代码发布到生产环境之前识别潜在的错误。但是,组织需要选择最适合其业务目标的监控工具,以便以最小的成本获得高质量的产品。以下是市场上一些优秀10大的DevOps监控工具:
1.Splunk
Splunk是机器生成数据方面最受欢迎的监控工具。除了监控,这个流行的工具还用于搜索、分析、调查、故障排除、警报和报告机器生成的数据。Splunk将所有机器生成的数据整合到一个中心索引中,使DevOps团队能够快速收集所需的见解。Splunk的诱人之处在于它不利用任何数据库来存储数据;与其相反,它使用索引来存储数据。
该工具有助于创建图形、仪表板和交互式可视化,因此组织的团队可以轻松访问数据并找到复杂问题的解决方案。
Splunk的主要特点如下:
- 实时数据处理。
- 接受各种格式的输入数据,包括CSV和JSON。
- 允许轻松搜索和分析特定的结果。
- 允许排除任何性能问题。
- 可以监控任何业务指标,并做出明智的决定。
- 可以将人工智能与Splunk结合到数据策略中。
2.Datadog
Datadog是一个基于订阅的SaaS平台,支持对服务器、应用程序、数据库、工具和服务的持续监控。这个工具可以帮助组织培养一种可观察性、协作性和数据共享的文化,这样就可以获得关于操作变更的快速反馈,并提高开发速度和敏捷性。
Datadog的一些关键特性是:
- 可扩展的检测和开放的API。
- 自动发现监控检查的自动配置。
- 与配置管理和部署工具的代码监控集成。
- 易于定制的监控仪表板。
- 80多个交钥匙集成。
- 获取其他DevOps工具的运行状况和性能可见性。
3. Consul
Hashi公司的Consul是一个开源监控工具,用于连接、配置和保护动态基础设施中的服务。该工具使组织能够创建实时跟踪应用程序、服务和运行状况状态的中央注册中心。Consul的内置用户界面(UI)或APM集成使DevOps团队能够监控应用程序性能,并在服务级别识别问题区域。Consul用户界面中的拓扑图帮助组织可视化网格中注册的服务之间的通信流。
Consul的一些主要特性如下所示:
- 现代基础设施的趁手工具。
- 提供了一个健壮的API。
- 使用DNS或HTTP轻松找到每个应用程序所需的服务。
- 支持多数据中心。
4.Monit
Monit是一个开源的DevOps监控工具。它用于管理和监控Unix系统。组织的团队可以利用Monit来监控守护进程,例如在系统启动时从/etc/init/启动的进程,比如Sendmail、apache、sshd和MySQL。该工具还可以用于运行在本地主机上运行的类似程序、文件、目录和文件系统,并跟踪更改,例如大小更改、时间戳更改以及校验和更改。此外,还可以使用Monit监控本地主机上的一般系统资源,例如CPU使用情况、内存使用情况和平均负载。
Monit的一些主要特点是:
- 自动维护和维修。
- 在任何事件中执行有洞察力的操作。
- 该工具有内置的网络测试关键互联网协议,如HTTP和SMTP。
- 用于在特定时间测试程序或脚本。
- Monit是一个自治的系统,不依赖于任何插件或特殊的库来运行。
- 易于编译和运行在大多数Unix风格。
5.Nagios
Nagios是最流行的DevOps监控工具之一。它是一种开源工具,用于监控所有关键任务基础设施组件,包括服务、应用程序、操作系统、系统指标、网络协议和网络基础设施。该工具促进了基于代理和无代理的监控,使监控Linux和Windows服务器变得很容易。使用Nagios,组织的DevOps团队可以监控各种应用程序,包括Windows应用程序、Unix应用程序、Linux应用程序和Web应用程序。
Nagios的一些关键特性如下:
- 支持数百个第三方插件,因此可以监控几乎任何事物,所有内部和外部应用程序、服务和系统。
- 简化日志数据排序流程。
- 提供高网络可见性和可扩展性。
- 提供完整的Java管理扩展监控。
6. Prometheus
Prometheus是一个开源的监控工具包,主要用于系统监控和警报。该工具收集并存储度量信息以及记录它的时间戳,称为标签的可选键-值对也存储在度量信息中。Prometheus工具生态系统由多个组件组成,包括用于存储时间序列数据的主Prometheus服务器、用于检测应用程序代码的客户端库、用于处理短期作业的推送网关和用于处理警报的警报管理器。
Prometheus工具的一些关键特性是:
- 为StatsD、HAProxy和Graphite等服务的特殊目的导出提供了便利。
- 支持Mac、Windows和Linux操作系统。
- 方便监控容器环境,比如Dockers和Kubernetes。
- 轻松集成配置工具,如Ansible,Puppet,Chef和Salt。
- 该工具不依赖分布式存储。
- Prometheus工具支持多种模式的图形化和仪表板。
7. Sensu
Sumo Logic的Sensu是针对关键任务系统的监控即代码解决方案。这种端到端的可观察性管道使组织的DevOps和SRE团队能够收集、过滤和转换监控事件,并将它们发送到他们选择的数据库。使用单个Sensu集群,组织可以轻松监控数万个节点,并快速处理每小时超过100亿个事件。该工具有助于企业级监控生产工作负载,为整个基础设施提供真正的多租户和多集群可见性。
Sensu工具的一些关键特性是:
- 支持外部PostgreSQL数据库,允许组织无限扩展Sensu。
- Sensu的内置等,处理10000个连接设备和40000个代理/集群。
- 提供了声明性配置和基于服务的监控方法。
- 轻松与Splunk、PageDuty、ServiceNow和Elasticsearch等其他DevOps监控解决方案集成。
8.Sematext
Sematext是满足所有DevOps监控需求的一站式解决方案。与其他仅提供性能监控、日志记录或体验监控的监控工具不同,Semattext提供了DevOps团队需要的所有监控解决方案,以解决其生产和性能问题并加快进度。使用Semtext,组织的DevOps团队可以监控应用程序性能、日志、度量、真实用户、流程、服务器、容器、数据库、网络、库存、警报、事件和API。组织还可以执行日志管理、合成监控和JVM监控以及其他许多操作。
Sematext工具的一些关键特性是:
- 使组织能够实时映射和监控整个基础设施。
- Sematext为DevOps团队、系统管理员、SRE和Bizops提供了更好的可视性。
- 提供完全托管的Elasticsearch和Kibana,因此组织不需要在昂贵的Elasticsearch专家人员和基础设施上花费用。
- 允许组织在不到十分钟的时间内建立免费帐户。
- Seamtext使与外部系统的集成变得轻而易举。
9.PagerDuty
PagerDuty是一个操作性能监控工具,它可以让组织的DevOps团队评估应用程序的可靠性和性能。该工具使组织的DevOps团队与生产中的代码保持联系,利用机器学习技术来识别问题,并提醒团队尽早解决错误。这意味着组织的DevOps团队花更少的时间来响应事件,而有更多的时间来构建和创新。
PagerDuty工具的一些主要功能是:
- PagerDuty带有直观的警报API,使其成为一个优秀的,易于使用的事件响应和警报系统。
- 如果警报没有在预定义的时间内响应,该工具将根据最初建立的SLA自动升级。
- 支持通过HTTP上的拉模型进行数据收集。
PagerDuty作为独立的服务器节点工作,不依赖于分布式存储。
- 这是一个用于调度和升级策略的健壮的GUI工具。
- 还支持仪表板和图表的多种模式。
10.AppDynamics
AppDynamics是市场上最流行的应用程序性能监控工具之一。作为一个持续监控工具,AppDynamics可以帮助监控组织的最终用户、应用程序、SAP、网络、数据库以及云计算和内部部署计算环境的基础设施。有了这个工具,组织的DevOps团队可以轻松地获得跨服务器、网络、容器、基础设施组件、应用程序、最终用户会话和数据库事务的完整可见性,因此他们可以快速响应性能问题。
AppDynamics工具的一些关键特性是:
- 与世界上最好的技术无缝集成,如AWS、Azure、谷歌云、IBM和Kubernetes。
- AppDynamics利用机器学习提供即时的根本原因诊断。
- 支持混合环境监控。
- 具有思科全栈可观察性与AppDynamics。
- 采用按使用付费的定价模式。
DevOps监控用例:企业如何使用监控工具的真实示例
毫无疑问,DevOps监控工具使组织的DevOps团队能够在整个软件开发生命周期中自动化监控过程。这些监控工具使组织的DevOps团队能够尽早识别代码错误,有效地运行代码操作,并快速响应使用中的代码更改。但是,必须有效地使用监控工具,以确保完全成功。以下是一些突出的DevOps监控用例,组织可以利用它们来获得DevOps的成功:
监控Git工作流
由于多个开发人员同时开发相同的项目功能,DevOps团队经常会遇到反复出现的代码库冲突。Git使组织的DevOps团队能够管理和解决冲突,包括提交和回滚。因此,当监控Git工作流时,可以轻松地保持代码冲突并确保项目的一致进展。
代码检测
代码检测工具可以帮助DevOps团队分析代码的风格、语法和潜在问题。有了这些工具,组织的DevOps团队可以确保他们遵循编码的最佳实践和标准。代码检测使组织能够在代码问题触发运行时错误和其他潜在性能问题之前识别并解决它们。使用检测工具,组织可以确保代码干净且一致。
分布式跟踪
组织的DevOps团队需要分布式跟踪,以简化微服务应用程序的监控和调试过程。分布式跟踪帮助组织的团队理解应用程序如何通过API相互交互,更容易识别和解决应用程序性能问题。
持续集成(CI)/持续部署(CD)日志
随着持续集成(CI)/持续部署(CD)管道成为DevOps生态系统的重要元素,监控它们对于DevOps的成功至关重要。持续集成(CI)日志有助于确保代码构建平稳运行。否则,日志将通知组织代码构建中的错误或警告。因此,监控持续集成(CI)日志有助于识别构建管道中的潜在问题并主动解决它们。同样,持续部署(CD)日志会告知整个管道的运行状况和状态。因此,监控持续部署(CD)日志可以帮助DevOps团队轻松地排除任何失败的部署并修复潜在的问题。
配置管理更改日志
配置管理更改日志帮助DevOps团队深入了解系统的运行状况和重要更改(包括人工和自动更改)。因此,监控这些日志使组织的团队能够跟踪对系统所做的更改,识别未经授权的更改并纠正问题。
代码插装
代码插入是将代码添加到应用程序的过程。这一过程使组织能够收集有关应用程序性能及其操作路线的数据。这对于跟踪堆栈调用和了解场景值至关重要。因此,监控这种代码插装结果使组织能够衡量DevOps实践的效率,并了解潜在的差距(如果有的话)。它还可以帮助组织识别错误并改进测试。
确定DevOps监控的最佳实践
就像采用DevOps本身一样,实现健壮的DevOps监控模型需要文化、流程和工具的战略组合。尽管组织可以从竞争对手采用DevOps监控的方式中获得灵感,但组织采用的正确模型必须与组织独特的组织需求和软件开发生命周期(SDLC)相一致。以下是一些最佳实践,可以帮助组织更好地监控DevOps:
知道该监控什么
知道该监控什么是成功的一半。因此,即使在开始实施DevOps监控策略之前,了解需要监控的内容也是至关重要的。组织的监控目标应该集中于服务器的性能、漏洞、用户活动和应用程序日志。
明确发展目标
组织的DevOps监控策略必须以固定的开发目标为锚定。这些目标帮助组织了解DevOps监控策略的执行情况。最受欢迎的确保实现目标的方法是跟踪每个Sprint持续时间,并测量用于识别、记录和纠正问题的时间。利用机器学习技术自动化配置过程可以帮助组织节省大量时间并避免人工错误。
监控用户活动
监控用户活动是最重要的监控类型之一。它可以帮助组织跟踪不寻常的请求,多次登录尝试,从未知设备登录,以及任何可疑的用户活动,如开发人员试图访问管理帐户。通过监控用户活动,组织可以确保正确的用户正在访问正确的资源。这个过程有助于防止对系统的潜在威胁,并减轻网络攻击。
选择合适的监控工具
从DevOps生态系统中大量可用的工具中选择正确的DevOps监控工具集是一项艰巨的任务。选择最适合软件开发生命周期(SDLC)和应用程序基础设施的精确工具始于评估过程。它主要涉及了解工具的特性和功能,以便轻松评估它是否最适合应用程序或基础设施监控。所以,在评估DevOps监控工具时,需要问一些问题:
- 该工具易于集成吗?确保监控工具可以轻松地与DevOps管道和更广泛的技术堆栈集成。这可以帮助组织轻松地生成操作和警报。
- 该工具是否提供了新的事物?收集大量数据的DevOps监控工具比其他工具要好。然而,更多的数据需要更多的关注,使用更多的存储空间,需要更多的管理。因此,要选择为新的监测途径铺平道路的监测工具,而不是那些提供正常功能的监测工具。
- 该工具是否提供统一的仪表板? 组织的DevOps生态系统由许多协同工作的服务、库和产品组成。因此,提供统一仪表板的DevOps监控工具可以帮助组织获得整个DevOps生命周期的完整性、实时可见性,并更容易识别问题和差距。
- 该工具提供什么类型的审计日志?了解系统的当前状态非常重要,特别是在出现问题时。审计日志提供的逐项操作记录使组织能够了解发生了什么,确定哪个流程或人员负责,分析根本原因,并为了解系统中的差距提供基础。那么,组织的工具提供什么类型的审计日志,它们如何提供关键信息?
- 工具的数据存储需求是什么?DevOps监控工具会生成大量的数据。因此,了解该工具的存储需求和云存储成本非常重要,以便在不超过其使用寿命的情况下保存有用的历史记录。
- 该工具提供哪些类型的诊断?检查监控工具是否提醒注意事项或帮助组织诊断基本问题。选择综合工具(例如应用程序性能监控平台)以了解复杂场景中发生的情况,例如多个异步微服务一起工作。
原文What Is DevOps Monitoring and How to Implement It in Your Organization,作者:Gilbert Martin