概述
了解基础设施和系统的状态对于确保服务的可靠性和稳定性至关重要。有关部署的运行状况和性能的信息不仅可以帮助您的团队对问题做出反应,而且还可以让他们放心地进行更改。获得这种洞察力的最佳方法之一是使用强大的监控系统,该系统收集指标,可视化数据,并在事情出现故障时向操作员发出警报。
在本文中,我们将讨论什么是指标,监控和警报。我们将讨论它们为何重要,一般情况下你需要关注哪些类型的指标以及您可能希望跟踪的数据类型。同时我们将在此过程中介绍一些关键术语。
什么是指标,监控和警报?
指标,监控和警报都是相互关联的概念,它们共同构成了监控系统的基础。他们能够提供对系统运行状况的可见性,帮助您了解系统使用或行为的趋势,并了解您所做的更改的影响。如果指标超出预期范围,系统可以发送通知以提示操作员查看,然后可以提供帮助信息以确定可能的原因。
在本节中,我们将介绍这些概念以及它们如何组合在一起。
什么是指标以及我们为什么收集它们?
指标表示可以在整个系统中观察和收集的资源使用情况的原始数据。这些数据可能是操作系统提供的使用情况摘要,也可能是与系统组件的特定功能相关的更高级别的数据类型,例如每秒提供的请求数或Web服务器池中的操作数。某些指标与总容量相关,而其他指标则表示为操作组件的“繁忙”速率(调用频率)。
通常,最简单的指标是您的操作系统已经公开的表示底层物理资源使用的指标。例如磁盘空间,CPU负载,内存使用等,这些数据都是可用,可立即提供价值,并且无需额外工作即可转发到监控系统。许多Web服务器,数据库服务器和其他软件也提供了自己的指标,这些指标也可以直接传给监控系统。
而对于其他组件,尤其是您自己的应用程序,您可能必须添加代码或接口以公开您关注的指标数据。收集和公开指标有时被称为向您的服务添加工具。
度量指标非常有用,因为它们可以深入了解系统的行为和运行状况,尤其是在汇总分析时。它们代表监控系统使用的原材料,用于构建环境的整体视图,自动响应变更,并在需要时提醒人员。度量指标是用于了解历史趋势,关联各种因素以及衡量绩效,消费或错误率变化的基本值。
什么是监控?
虽然指标代表系统中的数据,但监控是收集,汇总和分析这些值的过程,用以提高对组件特征和行为的了解。来自环境各个部分的数据被收集到监视系统中,该系统负责存储,聚合,可视化以及在数值满足特定要求时启动自动响应。
通常,指标和监控之间的差异反映了数据和信息之间的差异。数据由原始的,未处理的事实组成,而信息则通过分析和组织数据来构建,以构建提供有价值的上下文。监控采用指标数据,对其进行聚合,并以各种方式呈现,以便人们可以从各个部分的集合中洞察系统的运行情况。
监控系统实现了许多相关功能。他们的首要责任是接受和存储传入的数据和历史数据。虽然表示当前时间点的值很有用,但查看与过去值相关的数字几乎总是更有帮助,可以提供有关变化和趋势的参考。这意味着监控系统应能够在一段时间内管理数据,这可能涉及对旧数据进行采样或聚合。
其次,监控系统通常提供数据的可视化。虽然度量指标可以作为单独的值来显示和理解,但是当信息以视觉上有意义的方式组织时,人们可以更好地识别趋势并理解系统组件是如何组合在一起。监控系统通常使用可配置的图表和仪表板,可通过浏览显示器来理解复杂变量或系统内变化的相互作用。
监控系统提供的附加功能是组织和关联来自各种输入的数据。为了使指标有用,管理员需要能够识别不同资源之间和服务器组件之间的模式。例如,如果应用程序遇到错误率高峰,则管理员应该能够使用监控系统来发现该事件是否与相关资源的容量耗尽有关。
最后,监控系统通常用作定义和激活警报的平台,我们将在下面讨论。
什么是警报?
警报是监控系统的响应组件,它根据度量指标值的更改来执行操作。警报由两个部分组成:基于度量的条件或阈值,以及当值超出可接受条件时要执行的操作。
虽然监控系统对于主动解释和调查非常有用,但完整监控系统的主要优点之一是让管理员脱离系统。通过警报,您可以定义有效管理,同时依靠软件的被动监控来监控不断变化的情况。
虽然通知责任方是警报的最常见行动,但也可以根据阈值违规触发一些程序性响应。例如,可以使用自动扩展应用程序层的脚本来响应指示您需要更多CPU来处理当前负载的警报。虽然这不是严格的警报,因为它不会产生通知,但通常也可以使用相同的监控系统机制来启动这些过程。
但是,警报的主要目的仍然是引起人们对系统当前状态的关注。自动化响应是确保仅在需要知识渊博的人员考虑的情况下触发通知的重要机制。警报本身应包含有关错误的信息以及查找其他信息的位置。然后,响应警报的个人可以使用监视系统和相关工具(如日志文件)来调查问题的原因并实施缓解策略。
即使是中等复杂性的基础设施也需要区分警报严重程度,以便可以使用适合问题规模的方法通知负责的团队或个人。例如,存储利用率的升高可能需要工作单或电子邮件,而面向客户端的错误率或无响应的增加可能需要向待命的工作人员发送消息。
什么类型的信息是重要的需要跟踪的?
您监控的值和跟踪的信息可能会随着基础架构的发展而变化。由于系统通常以层次结构运行,更复杂的层构建在更原始的基础架构之上,因此在规划监控策略时考虑这些不同级别的可用度量标准会很有用。
基于主机的指标
原始指标层次结构的底部是基于主机的指标。这些将涉及评估单个机器的运行状况或性能,而忽视其应用程序堆栈和服务。这些主要包括操作系统或硬件的使用或性能,例如:
- CPU
- 内存
- 磁盘空间
- 进程
这些可以让您了解可能影响单台计算机保持稳定或执行工作的能力的因素。
应用程序指标
您可能希望查看的下一类指标是应用程序指标。这些指标涉及依赖于主机级资源(如服务或应用程序)的处理或工作单元。要查看的特定类型的度量指标取决于服务提供的内容,它具有与之交互的其他组件一定的依赖关系。此级别的度量标准是应用程序的运行状况,性能或负载的指标:
- 错误和成功率
- 服务失败并重新启动次数
- 响应的性能和延迟情况
- 资源使用情况
这些指标有助于确定应用程序是否正常运行并且具有高效率。
网络连接指标
对于大多数类型的基础设施,网络连接指标将是另一个值得探索的数据集。这些是面向外部可用性的重要指标,对于确保跨越多台计算机的任何系统,可以被其他计算机能正常访问服务也是必不可少的。与我们到目前为止讨论过的其他指标一样,应该检查网络的整体功能正确性以及通过查看以下内容来提供必要性能的能力:
- 连接
- 错误率和丢包率
- 延迟
- 带宽利用率
监控网络层可以帮助您提高内部和外部服务的可用性和响应能力。
服务器集群指标
在处理水平扩展的基础架构时,您需要为服务器集群添加某些指标。虽然有关单个服务器的指标很有用,但大规模的服务更多地体现为一组计算机执行工作并对请求做出充分响应的能力。这种类型的度量在很多方面只是应用程序和服务器度量的更高级别推断,但在这种情况下,资源是同构服务器而不是机器级组件。您可能想要跟踪的一些数据是:
- 集群池资源使用情况
- 缩放调整指标
- 降级的实例
收集总结服务器集合运行状况的数据对于了解系统处理负载和响应具有非常重要的作用。
外部依赖指标
您可能希望添加到系统的其他指标是与外部依赖关系相关的指标。通常,服务通过提供状态页面或API来发现服务中断,但在您自己的系统中跟踪这些内容以及您与服务的实际交互可以帮助您识别可能影响您运营的提供商问题。可能适用于此级别跟踪的某些指标包括:
- 服务状态和可用性
- 成功率和错误率
- 运行率和运营成本
- 资源枯竭
还有许多其他类型的指标可以帮助收集。不同侧重点的重要信息可以帮助您确定对预测或识别问题,成为最有用的指标。请记住,较高级别上最有价值的指标可能是由较低层提供的资源。
影响您选择监控的因素
影响您选择收集和采取行动的一些因素包括:
- 可用于跟踪的资源:根据您的人力资源,基础架构和预算,您必须将您所跟踪的范围限制为您能够负担得起并合理管理的范围。
- 应用程序的复杂性和目的:应用程序或系统的复杂性会对您选择跟踪的内容产生很大影响。可能对某些软件至关重要的项目在其他软件中可能并不重要。
- 部署环境:虽然强大的监控对于生产系统来说是最重要的,但是分段系统和测试系统也可以从监控中受益,尽管严重性,粒度和测量的总体指标可能存在差异。
- 度量标准有用的可能性:影响某些事物是否被衡量的最重要因素之一是它有可能在未来发挥作用。跟踪的每个附加度量标准都会增加系统的复杂性并占用资源。数据的必要性也可能随时间而变化,需要定期重新评估。
- 稳定性的基本要素:简单地说,稳定性和正常运行时间可能不是某些类型的个人或早期项目的优先事项。
影响您决策的因素取决于您的可用资源,项目的成熟度以及您所需的服务水平。
指标,监控和警报系统的重要性质
虽然每个监控应用程序或服务都有其优点和缺点,但最佳选择通常具有一些重要的特性。下面评估监测系统时要考虑的一些更重要的特征。
独立于大多数其他基础设施
监控系统的最基本要求之一是在其他服务之外。虽然将服务组合在一起有时很有用,但监控系统的核心职责,诊断问题的有用性以及与监控系统的关系意味着监控系统的独立可访问性非常重要。您的监控系统将不可避免地对其监控的系统产生一些影响,但您应该尽量减少这种影响,以减少跟踪对性能的影响,并在发生其他系统问题时提高监控的可靠性。
可靠,值得信赖
另一个基本要求是可靠性。由于监控系统负责收集,存储和提供对高价值信息的访问,因此您必须相信它能够每天正常运行。丢失的指标,服务中断和不可靠的警报都会对您有效管理能力产生直接的有害影响。这不仅适用于核心软件可靠性,也适用于您启用的配置,因为不准确的警报等错误可能会导致系统失去信任。
易于使用的摘要和详细信息视图
显示高级摘要并按需提供更多详细信息的能力是确保指标数据对操作员有用且可操作的重要特征。以可立即理解的方式呈现最常见数据的仪表板可帮助用户一目了然地了解系统状态。可以为不同的工作职能或感兴趣的领域创建许多不同的仪表板视图。
同样重要的是能够从摘要显示中向下钻取以显示与当前任务最相关的信息。动态调整图表的比例,切换不必要的指标以及覆盖来自多个系统的信息对于使工具以交互方式用于调查或根本原因分析至关重要。
维护历史数据的有效策略
当监控系统具有丰富的数据历史记录,可以帮助建立长时间线上的趋势,模式和一致性时,它是最有用的。理想情况下,所有信息都将以其原始粒度无限期保留。成本和资源限制有时可能需要以较低的分辨率存储较旧的数据。监控系统具有以全粒度和采样格式处理数据的灵活性,为如何处理不断增加的数据量提供了更广泛的选择。
一个有用的相关功能是能够轻松导入现有数据集。如果降低历史指标的信息密度不是一个有吸引力的选择,那么将旧数据导入到长期存储可能是更好的选择。在这种情况下,您不需要在系统中维护旧数据,但是当您希望分析或使用它时,您需要能够批量重新加载它。
能够关联不同来源的因素
监控系统负责提供整个基础架构的整体视图,因此它需要能够显示相关信息,即使它来自不同的系统或具有不同的特征。管理员应该能够将来自其系统的不同部分的信息粘合在一起,以了解整个基础架构中的潜在交互和整体状态。确保在整个系统中配置时间同步是能够可靠地关联来自不同系统的数据的先决条件。
易于开始跟踪新指标或基础架构
为了使您的监控系统准确地表示您的系统,您需要能够随着机器和基础设施的变化进行调整。添加额外机器时的最小摩擦力将有助于您这样做。同样重要的是能够在不破坏与其相关的收集数据的情况下轻松移除退役机器。系统应使这些操作尽可能简单,以鼓励将监视设置为实例配置或报废过程的一部分。
相关的能力很重要,可以轻松设置监控系统以跟踪全新的指标。这取决于核心监视配置中度量标准的定义方式,以及可用于将度量标准数据发送到系统的机制的种类和质量。定义新指标通常比添加其他计算机更复杂,但降低添加或调整指标的复杂性将有助于您的团队在适当的时间范围内响应不断变化的需求。
灵活而强大的警报
要评估的监控系统最重要的一个方面是其警报功能。除了非常严格的可靠性要求之外,警报系统还需要足够灵活,以通过多种媒介通知操作员,并且功能强大,能够构成周到,可操作的通知触发器。许多系统通过提供与现有寻呼服务或信使应用程序的集成,将实际向其他方传递通知的责任推迟。这最大限度地减少了警报功能的责任,并且通常提供更灵活的选项,因为插件只需要使用外部API。
但是,监控系统无法推迟的部分是定义警报参数。警报是根据超出可接受范围的值定义的,但定义可能需要一些细微差别以避免过度警报。例如,瞬间尖峰通常不是问题,但持续升高的负载可能需要操作员注意。能够清楚地定义警报的参数是构成健壮,可靠的一组警报条件的要求。
附加术语
在探索监控生态系统时,您将开始遇到一组共享术语,这些术语经常用于讨论监控系统的特性,正在处理的数据以及需要考虑的不同权衡。虽然并非详尽无遗,但下面的列表可以帮助您了解一些您最有可能遇到的术语。
- 可观察性:虽然没有严格定义,但可观察性是一个通用术语,用于描述与提高对系统的认识和可见性相关的过程和技术。这可以包括监控,指标,可视化,跟踪和日志分析。
- 资源:在监控和软件系统的环境中,资源是任何可耗尽或有限的依赖。根据所讨论的系统的特征,被认为是资源的内容可能有很大差异。
- 延迟:延迟是衡量完成操作所需时间的指标。依赖于组件的可以衡量的处理、响应或传递时间。
- 吞吐量:吞吐量表示系统可以处理的最大处理速率。这可能取决于软件或硬件设计。通常,理论吞吐量与实际观察到的吞吐量之间存在重要区别。
- 绩效:绩效是衡量系统完成工作效率的一般指标。性能是一个总称,通常包含吞吐量,延迟或资源消耗等工作因素。
- 饱和度:饱和度是衡量所用容量的指标。完全饱和表示当前正在使用100%的容量。
- 可视化:可视化是以一种格式化呈现度量数据的过程,该格式允许通过图形或图表进行快速,直观的解释。
- 日志聚合:日志聚合是编译,组织和索引日志文件的行为,以便于管理,搜索和分析。虽然与监控分开,但聚合日志可与监控系统结合使用,以识别原因并调查故障。
- 数据点:数据点是单个指标的单次测量。
- 数据集:数据集是度量标准的数据点集合。
- 单位:单位是测量值的上下文。单位定义测量的大小,范围或数量以了解范围并允许比较。
- 百分比单位:百分比单位是作为有限整体的一部分的测量值。百分比单位表示一个值在总量中的占有多少。
- 速率单位:速率单位表示在一段固定时间内度量的大小。
- 时间序列:时间序列数据是一系列表示随时间变化的数据点。大多数指标最好用时间序列表示,因为单个数据点通常表示特定时间的值,结果系列点用于显示随时间的变化。
- 采样率:采样率是对代表性数据点的采集频率的测量,而不是连续采集。更高的采样率更准确地表示测量的行为,但需要更多的资源来处理额外的数据点。
- 分辨率:分辨率是指构成数据集的数据点的密度。在相同时间范围内具有更高分辨率的集合表示更高的采样率和对相同行为的更细粒度的视图。
- 仪表:仪表是跟踪软件行为和性能的能力。这是通过向软件添加代码和配置来输出数据然后由监控系统使用来实现的。
- 观察者效应:观察者效应是监测系统本身对所观察现象的影响。由于监测占用资源,因此衡量行为和绩效的行为将改变所产生的价值。监控系统试图避免增加不必要的开销以最小化这种影响。
- 过度监控:当配置的指标和警报数量与其有用性成反比时,就会发生过度监控。过度监控可能会对基础架构造成压力,使查找相关数据变得困难,并导致团队失去对其监控和警报系统的信任。
- 警报疲劳:警报疲劳是由于频繁,不可靠或不正确的优先级警报导致的人类对敏感性的反应。警报疲劳可能导致操作员忽略严重问题,并且通常表明警报条件需要重新评估。
- 阈值:警报时,阈值是可接受值和不可接受值之间的边界,如果超出则触发警报。警报通常配置为在值超过阈值一段时间时触发,以避免发送临时峰值警报。
- 分位数:分位数是用于根据数值将数据集分成不同组的分界点。分位数用于将值放入表示数据群的片段的“桶”中。通常,这用于将常见值与异常值分开,以更好地理解代表性和极端情况的构成。
- 趋势:趋势是一组值指示的大致方向。在确定被跟踪组件的一般状态时,趋势比单个值更可靠。
- 白盒监控:白盒监控是一个术语,用于描述依赖于对被测组件内部状态的访问的监控。白盒监控可以提供对系统状态的详细了解,有助于识别问题的原因。
- 黑盒监控:黑盒监控是监控,通过仅查看其输入,输出和行为来观察系统或组件的外部状态。这种类型的监控可以与用户对系统的体验密切配合,但对于找出问题的原因则没那么有用。
结论
收集指标,监控组件和配置警报是设置和管理生产基础架构的重要部分。它们能够分辨您系统中发生的事情,需要注意哪些资源,以及导致速度减慢或中断的原因是什么。虽然设计和实施监控设置可能是一项挑战,但这方面的投资可以帮助您的团队确定工作的优先级,将监督责任委派给自动化系统,并了解基础架构和软件对您的稳定性和性能的影响。