我们把大象分成几部分吃。 应用程序健康监控策略及示例

您好!

我公司从事软件开发及后续技术支持。 技术支持不仅需要修复错误,还需要监控应用程序的性能。

例如,如果其中一项服务崩溃了,那么你需要自动记录这个问题并开始解决它,而不是等待不满意的用户联系技术支持。

我们有一家小公司,我们没有资源来研究和维护任何复杂的监控应用程序解决方案,我们需要找到一个简单而有效的解决方案。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

监控策略

检查应用程序的功能并不容易;这项任务并不简单,甚至可以说是创造性的。 验证复杂的多链路系统尤其困难。

你怎么能吃掉大象呢? 仅部分! 我们使用这种方法来监控应用程序。

我们监控策略的本质:

将您的应用程序分解为组件。
为每个组件创建控制检查。

如果一个组件的所有控制检查都没有错误地执行,则该组件被认为是可运行的。 如果应用程序的所有组件都正常运行,则该应用程序被认为是健康的。

因此,任何系统都可以表示为组件树。 复杂的组件被分解为更简单的组件。 简单的组件有检查。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

基准测试并不是为了执行功能测试,它们不是单元测试。 控制检查应该检查组件在当前时刻的感受,是否拥有其运行所需的所有资源,以及是否存在任何问题。

没有奇迹;大多数检查都需要独立开发。 但不要害怕,因为在大多数情况下,一项检查需要 5-10 行代码,但您可以实现任何逻辑,并且您会清楚地了解检查是如何工作的。

监视系统

假设我们将应用程序拆分为多个组件,为每个组件提出并实现了检查,但是如何处理这些检查的结果呢? 我们如何知道某些检查是否失败?

我们需要一个监控系统。 她将执行以下任务:

  • 接收测试结果并使用它们来确定组件的状态。
    从视觉上看,这看起来像是突出显示组件树。 功能组件变为绿色,有问题的组件变为红色。
  • 立即执行一般检查。
    监控系统可以自行执行一些检查。 为什么要重新发明轮子,让我们使用它们吧。 例如,您可以检查网站页面是否正在打开或服务器是否正在执行 ping 操作。
  • 向感兴趣的各方发送问题通知。
  • 监控数据可视化,提供报告、图表和统计数据。

ASMO系统简介

最好用例子来解释。 让我们看看 ASMO 系统的性能监控是如何组织的。

ASMO 是一个自动化气象支持系统。 该系统帮助道路服务专家了解何时何地需要使用除冰材料处理道路。 该系统从道路控制点收集数据。 道路控制点是道路上安装设备的地方:气象站、摄像机等。 为了预测危险情况,系统从外部来源接收天气预报。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

所以,系统的组成是非常典型的:网站、代理、设备。 我们开始监控吧。

将系统分解为组件

ASMO 系统中可以区分以下组件:

1. 个人账户
这是一个网络应用程序。 至少,您需要检查该应用程序是否可以在 Internet 上使用。

2. 数据库
数据库存储对报告很重要的数据,您必须确保成功创建数据库备份。

3.服务器
我们所说的服务器是指运行应用程序的硬件。 需要检查HDD、RAM、CPU的状态。

4. 代理
这是一项按计划执行许多不同任务的 Windows 服务。 至少,您需要检查该服务是否正在运行。

5. 代理任务
仅仅知道代理正在工作是不够的。 代理可以工作,但不执行其分配的任务。 让我们将代理组件拆分为任务,并检查每个代理任务是否成功运行。

6. 道路控制点(所有 MPC 的集装箱)
道路控制点有很多,因此让我们将所有 MPC 合并到一个组件中。 这样可以更方便的读取监控数据。 当查看“ASMO系统”组件的状态时,会立即清楚问题出在哪里:在应用程序、硬件还是在最大控制系统中。

7. 道路管制点(最多限XNUMX个)
如果该 MPC 上的所有设备均可用,我们将认为该组件可用。

8. 设备
这是在最大浓度限制下安装的摄像机或气象站。 有必要检查设备是否正常工作。

在监控系统中,组件树将如下所示:

我们把大象分成几部分吃。 应用程序健康监控策略及示例

Web应用程序监控

因此,我们已经将系统划分为多个组件,现在我们需要对每个组件进行检查。

为了监控 Web 应用程序,我们使用以下检查:

1. 检查主页面的打开情况
该检查由监控系统执行。 为了执行它,我们指示页面地址、预期响应片段和最大请求​​执行时间。

2. 检查域名付款期限
一个非常重要的检查。 当域名仍未付费时,用户无法打开该网站。 解决问题可能需要几天的时间,因为...... DNS 更改不会立即应用。

3. 检查SSL证书
现在几乎所有的网站都采用https协议进行访问。 为了使协议正常工作,您需要有效的 SSL 证书。

下面是监控系统中的“个人账户”组件:

我们把大象分成几部分吃。 应用程序健康监控策略及示例

上述所有检查适用于大多数应用程序,并且不需要编码。 这非常酷,因为您可以在 5 分钟内开始监控任何 Web 应用程序。 下面是可以对 Web 应用程序执行的其他检查,但它们的实现更加复杂并且特定于应用程序,因此我们不会在本文中介绍它们。

您还可以检查什么?

要更全面地监控您的 Web 应用程序,您可以执行以下检查:

  • 每个时期的 JavaScript 错误数
  • 期间Web应用程序端(后端)的错误数量
  • 不成功的 Web 应用程序响应数(响应代码 404、500 等)
  • 平均查询执行时间

监控Windows服务(代理)

在ASMO系统中,代理扮演着任务调度程序的角色,它在后台执行预定的任务。

如果所有代理任务成功完成,则代理工作正常。 事实证明,为了监控代理,您需要监控其任务。 因此,我们将“Agent”组件划分为任务。 对于每个任务,我们将在监控系统中创建一个单独的组件,其中“代理”组件将是“父组件”。

我们将 Agent 组件拆分为子组件(任务):

我们把大象分成几部分吃。 应用程序健康监控策略及示例

因此,我们将一个复杂的组件分解为几个简单的组件。 现在我们需要对每个简单组件进行检查。 请注意,父组件“Agent”不会有任何检查,因为监控系统会根据其子组件的状态独立计算其状态。 换句话说,如果所有任务均成功完成,则代理运行成功。

ASMO系统中有一百多个任务,真的有必要为每个任务进行唯一的检查吗? 当然,如果我们为每个代理任务提出并实施我们自己的特殊检查,控制会更好,但在大多数情况下使用通用检查就足够了。

ASMO 系统仅使用任务的通用检查,这足以监控系统的性能。

检查进度
最简单、最有效的检查是执行检查。 检查验证任务是否已完成且没有错误。 所有任务都有此检查。

验证算法

每次任务执行后,如果任务执行成功,则需要将 SUCCESS 检查结果发送到监控系统;如果执行完成但出现错误,则需要将 ERROR 发送到监控系统。

此检查可以发现以下问题:

  1. 任务运行但失败并出现错误。
  2. 任务已停止运行,例如已冻结。

让我们更详细地看看这些问题是如何解决的。

问题 1 – 任务运行但失败并出现错误
下面是任务在 14:00 到 16:00 之间运行但失败的情况。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

如图所示,当任务失败时,立即向监控系统发送信号,监控系统中相应检查的状态变为报警。

请注意,在监控系统中,组件的状态取决于验证状态。 该检查的报警状态将使所有上级组件变为报警,见下图。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

问题 2 - 任务停止执行(冻结)
监控系统如何得知任务被卡住了?

检查结果有一个有效期,例如1小时。 如果一个小时过去,没有新的检测结果,监控系统会将检测状态设置为报警。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

上图中,下午 14:00 灯已关闭。 15:00,监控系统会检测到测试结果(从14:00开始)已腐烂,因为关联时间已过(一小时),但没有新结果,将检查切换到报警状态。

16:00灯再次亮起,程序完成任务并将执行结果发送至监控系统,测试状态再次变为成功。

我应该使用什么检查相关时间?

关联时间必须大于任务执行周期。 我建议将相关时间设置为比任务执行周期长2-3倍。 这是必要的,以避免在任务花费比平常更长的时间或有人重新加载程序时收到错误通知。

检查进度

ASMO 系统有一个“负载预测”任务,它会尝试每小时从外部源下载一次新的预测。 外部系统中出现新预报的确切时间尚不清楚,但已知这种情况每天会发生 2 次。 事实证明,如果几个小时内没有新的天气预报,那么这是正常的,但如果超过一天没有新的天气预报,则说明某个地方出了问题。 例如,外部预测系统中的数据格式可能会发生变化,这就是 ASMO 不会看到新的预测版本的原因。

验证算法

当任务成功取得进展(下载新的天气预报)时,该任务会将 SUCCESS 检查的结果发送到监控系统。 如果没有进展或发生错误,则不会向监控系统发送任何内容。

检查必须有一个相关间隔,以便在这段时间内保证收到新的进展。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

请注意,我们会延迟了解到该问题,因为监控系统会等到最后一次扫描结果的有效期到期。 因此,支票的有效期不需要定得太长。

数据库监控

为了控制 ASMO 系统中的数据库,我们执行以下检查:

  1. 验证备份创建
  2. 检查可用磁盘空间

验证备份创建
在大多数应用程序中,拥有最新的数据库备份非常重要,这样如果服务器出现故障,您可以将程序部署到新服务器。

ASMO 每周创建一次备份副本并将其发送到存储。 当此过程成功完成时,成功检查的结果将发送到监控系统。 验证结果有效期为9天。 那些。 为了控制备份的创建,使用了我们上面讨论的“进度检查”机制。

检查可用磁盘空间
如果磁盘上没有足够的可用空间,数据库将无法正常运行,因此控制可用空间量非常重要。

使用指标来检查数值参数很方便。

公制 是一个数字变量,其值传输到监控系统。 监控系统检查阈值并计算指标状态。

下图是监控系统中“数据库”组件的样子:

我们把大象分成几部分吃。 应用程序健康监控策略及示例

服务器监控

为了监控服务器,我们使用以下检查和指标:

1.可用磁盘空间
如果磁盘空间耗尽,应用程序将无法运行。 我们使用两个阈值:第一个级别是警告,第二个级别是警报。

2. 每小时平均 RAM 值百分比
我们使用每小时平均值,因为... 我们对稀有种族不感兴趣。

3.每小时平均CPU百分比
我们使用每小时平均值,因为... 我们对稀有种族不感兴趣。

4.Ping 检查
检查服务器是否在线。 监控系统可以执行此检查;无需编写代码。

下图是监控系统中“服务器”组件的样子:

我们把大象分成几部分吃。 应用程序健康监控策略及示例

设备监控

我会告诉你数据是如何获得的。 对于每个道路控制点 (MPC),任务规划器中都有一个任务,例如“调查 MPC M2 km 200”。 该任务每 30 分钟从所有 MPC 设备接收一次数据。

沟通渠道问题
大部分设备位于城外,采用GSM网络进行数据传输,工作不稳定(有网络或无网络)。

由于网络故障频繁,一开始查看监控中的MPC调查是这样的:

我们把大象分成几部分吃。 应用程序健康监控策略及示例

很明显,这不是一个有效的选择,因为存在许多关于问题的错误通知。 然后决定对每个设备使用“进度检查”,即当设备被轮询且没有错误时,仅向监控系统发送成功信号。 相关时间设置为5小时。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

现在,仅当设备轮询时间超过 5 小时时,监控才会发送有关问题的通知。 这些很有可能不是误报,而是真正的问题。

下图是监控系统中设备的样子:

我们把大象分成几部分吃。 应用程序健康监控策略及示例

重要的信息!
当 GSM 网络停止工作时,所有 MDC 设备都不会被轮询。 为了减少来自监控系统的电子邮件数量,我们的工程师使用“MPC”类型而不是“设备”类型订阅有关组件问题的通知。 这允许您为每个 MPC 接收一个通知,而不是为每个设备接收单独的通知。

最终的ASMO监控方案

让我们把所有的东西放在一起,看看我们有什么样的监控方案。

我们把大象分成几部分吃。 应用程序健康监控策略及示例

结论

我们来总结一下。
监控 ASMO 的性能给我们带来了什么?

1. 缺陷消除时间减少
我们之前听说过用户的缺陷,但并非所有用户都报告缺陷。 碰巧我们在某个系统组件出现故障一周后才获悉该故障。 现在监控系统一旦发现问题就会通知我们。

2.系统稳定性提高
由于较早开始消除缺陷,整个系统开始工作得更加稳定。

3. 减少致电技术支持的次数
现在,许多问题在用户意识到之前就已得到解决。 用户开始减少联系技术支持的频率。 所有这些都对我们的声誉产生了良好的影响。

4. 提高客户和用户忠诚度
客户注意到系统稳定性发生了积极的变化。 用户在使用系统时遇到的问题更少。

5、降低技术支持成本
我们已停止执行任何手动检查。 现在所有检查都是自动化的。 以前,我们从用户那里了解问题;常常很难理解用户在谈论什么问题。 现在,大多数问题都是由监控系统报告的;通知包含技术数据,总是可以清楚地表明出了什么问题以及出在哪里。

重要的信息!
您不能将监控系统安装在运行应用程序的同一服务器上。 如果服务器出现故障,应用程序将停止工作,并且不会有人通知这一情况。

监控系统必须运行在另一个数据中心的单独服务器上。

如果您不想在新的数据中心使用专用服务器,则可以使用云监控系统。 我们公司使用Zidium云监控系统,但您可以使用任何其他监控系统。 云监控系统的成本比租用新服务器要低。

建议:

  1. 尽可能详细地以组件树的形式分解应用程序和系统,这样可以方便地了解哪里出了问题、出什么问题,控制也更加完整。
  2. 要检查组件的功能,请使用测试。 使用许多简单的检查比使用一项复杂的检查要好。
  3. 在监控系统一侧配置指标阈值,而不是将其写入代码中。 这将使您不必重新编译、重新配置或重新启动应用程序。
  4. 对于自定义检查,请使用相关时间裕度以避免收到错误通知,因为某些检查需要比平常更长的时间才能完成。
  5. 尽量只有在确定有问题的情况下才让监控系统中的部件变成红色。 如果它们无缘无故变成红色,那么你就不再关注监控系统的通知,也就失去了它的意义。

如果您还没有使用监控系统,那就开始吧! 这并不像看起来那么困难。 欣赏自己种植的绿色原料树,会很开心。

祝你好运。

来源: habr.com

添加评论