监控系统的先决条件
学习监控系统中的指标和警报。
监控:指标和警报
一个好的监控系统需要清晰地定义需要测量的指标及其单位。监控系统还需要定义所有指标的阈值和在值超出可接受范围时通知适当利益相关者的能力(警报)。了解基础架构和系统的状态可以确保服务的稳定性。如果支持团队可以访问部署的健康和性能信息,它们可以更快、更自信地回应问题。收集测量值、展示数据并在出现问题时发送警报的监控系统有助于支持团队。
为了进一步理解指标、警报及其与监控的联系,我们将讨论它们的意义、潜在的好处以及我们可能想要跟踪的数据。
警告
问题:
处理IT基础架构故障的传统方法是什么?
答案:
处理IT基础架构故障的两种传统方法是反应性和预防性方法。
在反应性方法中,纠正措施是在故障发生后采取的。在这种方法中,即使DevOps快速采取行动,找到错误的原因并迅速处理故障,也会导致停机时间。因此,在反应性方法中将出现系统停机时间,这通常对于持续运行的应用程序来说是不可取的。
在预防性方法中,是在故障发生之前采取预防性措施。因此,它可以避免停机时间和相关损失。预防性方法通过预测系统故障以采取纠正措施来避免故障。通过这种方法,可以通过避免停机时间实现更好的可靠性。
在现代服务中,完全避免问题是不可能的。大型数据中心和网络部署中总会出现问题。目标是尽早发现潜在问题,并设计系统以使服务故障对最终用户不可见。
指标
指标客观地定义了我们应该测量什么以及什么单位是合适的。指标值提供了对系统在任何时候的洞察力。例如,Web服务器每秒能处理多少流量或其能否加入Web服务器池,都是与组件特定目的或活动相关的高级数据的示例。另一个例子可以是以吞吐量(兆位每秒)和延迟(往返时间)来度量网络性能。我们需要收集指标值以尽可能少地影响性能。我们可以使用用户感知延迟或计算资源量来测量这种影响。
跟踪操作系统使用的物理资源的值可以是一个很好的起点。如果我们有一个监控系统,我们不需要做太多额外的工作来获取有关处理器负载、CPU统计(如缓存命中和缓存未命中)、操作系统和进程的RAM使用情况、页面故障、磁盘空间、磁盘读写延迟、swap空间使用等问题的数据。许多Web服务器、数据库服务器和其他软件提供的指标可以帮助我们确定一切是否运行顺畅。
相关信息
连接到以下终端以查看当前活动的虚拟机上进程的CPU利用率详细信息。
我们使用' top'命令来查看Linux进程。运行此命令会打开一个交互式视图,其中包含系统的摘要和进程或线程列表。默认视图包括以下内容:
在顶部,我们可以看到机器已经开机多长时间,有多少用户登录以及过去几分钟内机器的平均负载。
在下一行中,我们可以看到机器上运行任务的状态(
running
,sleeping
或stopped
)。接下来,我们有CPU使用量的值。- 最后,我们有物理内存的概述,其中显示了可用的、已用的、缓冲的或可用的有多少。现在,让我们采取以下步骤来查看CPU使用率的变化:1. 在终端中输入
q
来退出。2. 运行nohup ./script.sh &>/dev/null &
。这个脚本中有一个无限循环在运行,运行该命令将在后台执行该脚本。3. 运行top
命令以观察CPU使用率的增加。
填充指标
指标应该在逻辑上集中以进行全局监控和警报。获取指标对于监控系统非常重要。指标可以通过推送或拉取到监控系统中,这取决于用户的偏好。
在这里,我们现在面临一个基本的设计挑战:我们应该使用推送还是拉取?服务器是否应主动将指标值发送出去,还是仅公开一个端点,并等待被动查询?
在拉取策略中,每个受监视的服务器仅需要将指标存储在内存中,并将其发送到公开的端点。公开的端点允许监控应用程序自行获取指标。发送太多数据或发送数据太频繁的服务器不会过载监控系统。监控系统将根据自己的计划拉取数据。
在其他情况下,推送可能有益,例如当防火墙阻止监控系统直接访问服务器时。监控系统具有有关要收集的数据和服务器和交换机应推送数据的间隔的全局配置的能力。
推送和拉取术语可能会令人困惑。每当我们讨论推送或拉取策略时,我们将从监控系统的角度考虑。也就是说,系统将从应用程序拉取指标值,或者指标将被推送到监控系统。为避免混淆,我们将坚持监控系统的视角。
警告
问题:
问题日志记录是将软件系统事件记录在文件中的行为。它如何有助于监控?
答案:
在日志记录中,应用程序服务器将信息记录到文件中。信息可以是CPU使用率、与应用程序相关的信息以及其他我们认为需要用于回溯或调试文件的相关属性。我们可以基于日志中记录的值填充我们的度量标准。
日志和度量标准都有助于监控服务。但这并不总是正确的,因为处理日志信息需要时间。在实时情况下,我们需要迅速采取行动以早期发现问题。因此,日志记录也是度量标准的输入之一。日志记录只是收集信息的机制,监控系统可以使用它来收集必要的信息。
日志记录还可以帮助暂时将数据存储在服务器上,以吸收任何短暂的数据峰值或将数据生成和监控系统解耦。
提示
有时我们使用“指标”一词时应该使用“指标值”。但是,我们可以通过它们在上下文中的使用来确定它们所指的是哪一个.
持久化数据
确定如何存储被监视服务器的度量是很重要的。集中的内存度量库可能是所需的全部内容。但是,对于一个需要监视数百万个元素的大型数据中心,将有大量数据需要存储,这时时间序列数据库可以提供帮助。
时间序列数据库有助于维护持久性,这是一个重要因素。在监视系统中,如果没有事件的历史视图,它就没有多大用处。时间戳值样本以时间顺序存储,因此可以以时间序列的形式展示整个度量的时间线。
应用度量
我们可能需要添加代码或API来公开我们关心的度量,尤其是我们自己的应用程序。我们嵌入在应用程序中的日志记录或监视代码称为代码仪表化,用于收集感兴趣的信息。
将度量作为整体进行查看可以揭示系统的性能状况以及健康状况。监视系统利用这些输入生成对我们环境的全面视图,自动响应变化(例如,如果应用程序的流量增加,则启动更多的EC2实例),并在必要时提醒人类。度量是允许分析历史趋势、相关性和性能、消耗或错误率变化的系统测量。
警报
警报是监视系统响应度量值变化并采取行动的部分。警报定义有两个组成部分:基于度量的条件或阈值,以及在值超出允许范围时采取的操作。