了解监控指标

当我第一次遇到带有颜色和数字标记为“平均值”和“上 90”的术语countergauge图表时,我的反应是一种回避。就像我看到了它们,但我不在乎,因为我不了解它们或它们如何有用。由于我的工作不需要我关注他们,他们一直被忽视。

那是大约两年前的事了。随着我在职业生涯中的进步,我想更多地了解我们的网络应用程序,这就是我开始学习指标的时候。

我了解监控(到目前为止)的三个阶段是:

  • 第 1 阶段:什么?(别处看)
  • 第 2 阶段:没有指标,我们真的是盲目飞行。
  • 第 3 阶段:我们如何避免错误地衡量指标?

我目前处于第 2 阶段,将分享我到目前为止所学到的知识。我正在逐步进入第 3 阶段,我将在本文末尾提供有关该阶段的一些资源。

让我们开始吧!

我为什么要监控?

进行监控的主要原因是:

  • 了解正常异常的系统和服务行为
  • 进行容量规划、扩大或缩小
  • 协助性能故障排除
  • 了解软件/硬件更改的影响
  • 响应测量改变系统行为
  • 当系统出现意外行为时发出警报

指标和指标类型

对于我们的目的, 度量是在给定时间点某个数量的 观察值 。博客文章的总点击次数、参加演讲的总人数、在缓存系统中找不到数据的次数、您网站上的登录用户数量——所有这些都是指标的例子。

它们大致分为三类:

计数器

考虑您的个人博客。您刚刚发布了一篇文章,并希望关注随着时间的推移它获得的点击量,这个数字只会增加。这是一个计数器指标的示例。它的值从 0 开始,并在您的博客文章的生命周期内增加。从图形上看,一个计数器看起来像这样:

 

计数器指标总是增加。

仪表

假设您想跟踪每天或每周的点击次数,而不是您的博客文章随时间的总点击次数。该指标称为量表,其值可以上升或下降。从图形上看,仪表如下所示:

 
 

仪表指标可以增加或减少。

仪表的值通常在某个时间窗口内有上限下限

直方图和计时器

直方图(如普罗米修斯称之为)或计时器(如StatsD称之为)是一种指标来跟踪采样的观测。与计数器或仪表不同,直方图指标的值不一定显示向上或向下模式。我知道这没有多大意义,可能看起来与仪表没有什么不同。与仪表相比,您期望对直方图数据执行的操作有所不同。因此,监控系统需要知道指标是直方图类型,以允许您执行这些操作。

 
 

直方图度量可以增加或减少。

 

统计 101

如果我们回想高中数学,有一些统计术语我们都应该记得,即使是模糊的,包括均值、中位数、百分位数和直方图。让我们简要回顾一下它们,而不判断它们的用处,就像在高中一样。

平均值

平均值,或平均数字的名单,是名单的基数整除的数的总和。3、2 和 10 的平均值是(3+2+10)/3 = 5

中位数

是另一种类型的平均水平,但它的计算方式不同; 它是从最小到最大排序的数字列表中的中心数字(反之亦然)。在我们上面的列表 (2, 3, 10) 中,中位数是 3。计算不是很简单;这取决于列表中的项目数。

百分位

百分比是一项措施,为我们提供了一个测度低于某一(k数字)的百分比撒谎。从某种意义上说,它给了我们一个想法如何这项措施相对于做给k我们的数据的百分比。例如,上表的第 95 个百分位分数为 9.29999。百分位度量从 0 到 100(不包括在内)。第零个百分位数是一组数字中的最低分数。你们中的一些人可能还记得中位数是第 50 个百分位数,结果是 3。

一些监测系统将百分位数称为upper_X其中X是百分位数;上 90指的是第 90 个百分位数处的值。

分位数

所述Q-位数是行列q中的量度Ñ在一组Ñ号码。q的值介于 0 和 1 之间(包括这两个值)。当q为 0.5 时,该值为中位数。分位数和百分位数之间的关系是q分位数处的度量等效于100 q百分位数处的度量。

直方图

我们之前了解到的度量 直方图是监控系统的一个实现细节。在统计学中,直方图是将数据分组到桶中的图形。让我们考虑一个不同的、人为的例子:阅读您博客的人的年龄。如果您获得了一些此类数据并希望按组大致了解读者的年龄,则绘制直方图将显示如下图表:

 

累积直方图

一个累积直方图是直方图,其中每个桶的计数包括以前桶的数量,故名累积。上述数据集的累积直方图如下所示:

 

为什么我们需要统计?

在上面的演示 1 中,我们观察到在报告指标时会生成大量数据。在处理指标时我们需要统计数据,因为它们太多了。我们不关心个人价值观,而是关心整体行为。我们期望值表现出的行为是被观察系统行为的代理。

我应该监控什么?

一个软件系统有许多变量,它们的值在其生命周期中会发生变化。该软件在某种操作系统中运行,并且操作系统变量也会发生变化。在我看来,您拥有的数据越多,出现问题时的情况就越好。

我建议监控的关键操作系统指标是:

  • CPU使用率
  • 系统内存使用
  • 文件描述符使用
  • 磁盘使用情况

要监控的其他关键指标会因您的软件应用程序而异。

网络应用

如果您的软件是侦听和服务客户​​端请求的网络应用程序,则要衡量的关键指标是:

  • 传入的请求数(计数器)
  • 未处理的错误(计数器)
  • 请求延迟(直方图/定时器)
  • 排队时间,如果您的应用程序中有队列(直方图/计时器)
  • 队列大小,如果您的应用程序中有队列(仪表)
  • 工作进程/线程使用情况(量表)

如果您的网络应用程序在满足客户端请求的上下文中向其他服务发出请求,则它应该有度量来记录与这些服务的通信行为。要监控的关键指标包括请求数量、请求延迟和响应状态。

HTTP Web 应用程序后端

HTTP 应用程序应该监控以上所有内容。此外,他们应该保留有关按所有其他 HTTP 状态代码分组的非 200 HTTP 状态计数的细粒度数据。如果您的 Web 应用程序具有用户注册和登录功能,那么它也应该具有这些指标。

长时间运行的进程

长时间运行的进程,如 Rabbit MQ 消费者或任务队列工作者,虽然不是网络服务器,但工作在拾取任务并处理它的模型上。因此,我们应该监控处理的请求数量和这些进程的请求延迟。

无论应用程序类型如何,每个指标都应具有与其关联的适当元数据

 

用于指标报告的拉取和推送模型

本质上,有两种模式可用于从 Python 应用程序报告指标。在模型中,监控系统在预定义的 HTTP 端点“抓取”应用程序。在推送模型中,应用程序将数据发送到监控系统。

 

模型中工作的监控系统的一个例子是PrometheusStatsD是监控系统的一个示例,其中应用程序指标送到系统。

使用指标的方法

我们已经了解了为什么要在我们的应用程序中设置监控,但现在让我们更深入地研究其中两个:警报和自动缩放。

使用指标进行警报

指标的一个关键用途是创建警报。例如,如果过去五分钟内 HTTP 500 的数量增加,您可能希望向相关人员发送电子邮件或寻呼机通知。我们用于设置警报的内容取决于我们的监控设置。对于 Prometheus,我们可以使用Alertmanager,对于 StatsD,我们可以使用Nagios

使用指标进行自动缩放

指标不仅可以让我们了解我们当前的基础架构是过度配置还是配置不足,它们还可以帮助在云基础架构中实施自动扩展策略。例如,如果我们服务器上的工作进程使用率在过去五分钟内经常达到 90%,我们可能需要水平扩展。我们如何实现扩展取决于云基础设施。默认情况下,AWS Auto Scaling 允许基于系统 CPU 使用率、网络流量和其他因素的扩展策略。但是,要使用应用程序指标进行扩展或缩减,我们必须发布自定义 CloudWatch 指标

多服务架构中的应用监控

当我们超越单个应用程序架构时,例如客户端请求可以在响应被发回之前触发对多个服务的调用,我们需要更多来自我们的指标。我们需要统一的延迟指标视图,以便我们可以了解每个服务响应请求所花费的时间。这是通过分布式跟踪启用的 。

您可以在我的博客文章Introducing Distributed Tracing in your Python application via Zipkin 中看到 Python 中的分布式跟踪示例。

要记住的要点

总之,请务必牢记以下几点:

  • 了解指标类型在您的监控系统中的含义
  • 了解监控系统想要您的数据的计量单位
  • 监控应用程序中最关键的组件
  • 在最关键阶段监控应用程序的行为

以上假设您不必管理您的监控系统。如果这是您工作的一部分,那么您还有很多事情要考虑!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值