我们部分吃掉大象。 示例应用程序运行状况监视策略

大家好!

我公司从事软件开发和后续技术支持。 作为技术支持的一部分,您不仅需要纠正错误,而且需要监视我们的应用程序的性能。

例如,如果其中一项服务“崩溃”,则您需要自动解决此问题并开始解决,而不是等待不满意用户的技术支持。

我们有一家小公司,没有足够的资源来研究并包含任何用于监视应用程序的复杂解决方案,因此有必要找到一个简单有效的解决方案。



监控策略


执行应用程序运行状况检查并不容易,这项任务并不容易,甚至可能会说出创造力。 测试复杂的多链接系统特别困难。

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

我们的监控策略的实质是:
将应用程序分解为组件。
对于每个组件,都要进行控制检查。
如果组件的所有控制检查均已正确执行,则该组件被视为健康组件。 如果应用程序的所有组件均正常运行,则认为该应用程序是健康的。

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



控制检查不应执行功能测试;这些不是单元测试。 控制检查应检查该组件在当前时间的感觉,是否有所有功能所需的资源,是否有问题。

没有奇迹,大多数检查将需要独立进行。 但是不要害怕,因为在大多数情况下,一次检查需要5-10行代码,但是您可以实施任何逻辑,您将清楚地了解检查的工作原理。

监控系统


假设我们将应用程序拆分为多个组件,为每个组件发明和实现检查,但是这些检查的结果怎么办? 我们怎么知道某种检查失败了?

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

  • 接收测试结果并从中确定组件的状态。
    在外观上,看起来像突出显示了组件树。 可维修的组件变为绿色,有故障的组件变为红色。
  • 开箱即用地进行常规检查。
    监视系统可以自己执行一些检查。 为什么要重新发明轮子,我们将使用它们。 例如,您可以检查站点页面是否正在打开或服务器是否正在响应。
  • 将问题通知发送给感兴趣的各方。
  • 监视数据的可视化,提供报告,图形和统计信息。

ASMO系统的简短说明


最好用例子来解释。 让我们看看如何组织对ASMO系统的监视。

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



因此,系统的组成非常典型:网站,代理,设备。 让我们开始监视。

我们将系统分为几个部分


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

1.个人账户
这是一个Web应用程序。 至少,您需要验证该应用程序在Internet上是否可用。

2.数据库
用于报告的重要数据存储在数据库中;有必要验证是否成功创建了数据库备份。

3.服务器
服务器是指运行应用程序的硬件。 必须检查HDD,RAM,CPU的状态。

4.代理
这是Windows服务,它执行许多不同的计划任务。 至少,您需要验证服务是否正在运行。

5.代理任务
仅仅知道代理正在工作还不够。 代理可以工作,但不能完成分配给它的任务。 我们将代理程序组件划分为多个任务,并检查每个代理程序任务是否成功运行。

6.道路控制点(所有MPC的容器)
道路控制涉及很多方面,因此我们将所有MPC合并为一个组件。 这将使读取监视数据更加容易。 当查看“ ASMO系统”组件的状态时,将立即清楚问题出在哪里:应用程序,硬件还是MPC。

7.道路控制点(一个MPC)
如果该MPC上的所有设备均可维修,我们将认为此组件可维修。

8.设备
这是MPC上安装的摄像机或气象站。 您必须验证设备是否正常运行。

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



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系统仅对任务使用通用检查,这足以监视系统的性能。

检查执行
最简单,最有效的检查是进度检查。 该检查将验证任务正在执行,并且没有错误。 所有任务都有此检查。
验证算法

每个任务执行之后,有必要将成功检查的结果发送到监视系统,如果任务成功,则发送错误,如果执行失败,则发送错误。
通过此检查,您可以检测到以下问题:

  1. 任务运行,但是失败。
  2. 任务已停止执行,例如已冻结。

让我们考虑如何更详细地解决这些问题。

问题1-任务运行,但是失败
以下是执行任务但从14:00到16:00失败的情况。



该图显示,当任务失败时,信号立即发送到监视系统,并且监视系统中相应检查的状态将变为警报。

请注意,在监视系统中,组件的状态取决于验证的状态。 检查的警报状态会将所有更高级别的组件转换为警报,请参见下图。



问题2-任务停止工作(挂起)
监视系统如何了解任务已冻结?

检查的结果具有相关的时间,例如1小时。 如果一个小时过去了,并且没有新的验证结果,则监视系统将在验证中设置警报状态。



在上图中14:00的灯已关闭。 在15:00,监视系统将检测到测试结果(从14:00开始)腐烂,因为 相关时间已过期(一小时),但没有新结果,它将把检查转移到警报状态。

16:00再次打开灯,程序将完成任务并将结果发送到监视系统,验证状态将再次变为成功。

支票的有效时间是几点?

相关时间应大于任务执行时间。 我建议将相关时间设置为任务周期的2-3倍。 这是必要的,以便在例如任务花费的时间比平时长或有人重新加载程序时不接收错误的通知。

进度检查

ASMO系统的任务为“下载预测”,该任务每小时尝试从外部源下载一个新的预测。 不知道新预测出现在外部系统中的确切时间,但是已知每天发生两次。 事实证明,如果几个小时都没有新的预报,那是正常的,但是如果一天以上没有新的预报,那么某处发生了故障。 例如,在外部预测系统中,数据格式可能会更改,因此ASMO将看不到新的预测版本。
验证算法

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

审核应具有相关性间隔,以确保在此期间获得新的进度。


请注意,我们会延迟了解该问题,因为监控系统会一直等到最后一个测试结果的相关时间到期。 因此,检查的相关时间不需要太长。

数据库监控


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

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

验证备份
在大多数应用程序中,拥有最新的数据库备份很重要,这样在服务器发生故障的情况下,可以将程序部署到新服务器上。

ASMO每周创建一次备份副本,并将其发送到存储库。 成功完成此过程后,成功检查的结果将发送到监视系统。 检查结果的有效时间为9天。 即 为了控制备份的创建,我们使用了“检查进度”的机制,我们已在上面进行了检查。

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

使用度量检查数字参数很方便。
指标是一个数值变量,其值传递给监视系统。 监视系统检查阈值并计算度量标准的状态。
下面是监视系统中“数据库”组件的外观图:



服务器监控


要监视服务器,我们使用以下检查和指标:

1.可用磁盘空间
如果磁盘空间用完,则该应用程序将无法运行。 我们使用2个阈值:第一个级别为WARNING,第二个级别为ALARM。

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

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

4. ping检查
验证服务器是否在线。 监视系统能够执行此检查,而无需编写代码。

下面是监视系统中“服务器”组件的外观图:



设备监控


我将告诉您如何接收数据。 对于任务计划程序中的每个道路控制(MPC)点,都有一个任务,例如“ Polling MPC M2 km 200”。 30分钟一次的任务将从所有MPC设备接收数据。

沟通渠道问题
大部分设备都位于城市外部,GSM网络用于数据传输,但不稳定(即不存在)。

由于频繁的网络故障,第一次在监视中检查MPC调查看起来像这样:



显然,这不是可行的选择,因为收到了许多关于这些问题的错误警报。 然后确定每个设备使用“进度检查”,即 在对设备进行无错轮询时,只有成功信号才会发送到监视系统。 相关时间设置为5小时。



现在,仅当设备无法查询5小时以上时,监视才会发送问题通知。 这些很有可能不是误报,而是真正的问题。

下面是监视系统中设备的外观图:



重要!
GSM网络停止工作时,不会询问所有MPC设备。 为了减少来自监视系统的信件数量,我们的工程师订阅了有关“ MPC”类型而非“设备”类型组件的问题的通知。 这使您可以为每个MAC接收一个通知,而不是为每个设备接收单独的通知。

最终监测计划ASMO


让我们放在一起,看看我们有什么样的监视方案。



结论


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

1.减少故障排除时间
我们曾经从用户那里了解缺陷,但是并非所有用户都报告缺陷。 碰巧,我们在系统出现一周后就发现了该系统任何组件的故障。 现在,一旦发现问题,监控系统就会将问题通知我们。

2.增加系统稳定性
由于较早开始修复缺陷,因此整个系统开始更加稳定。

3.减少技术支持电话的数量
现在,在用户找到有关问题之前,已解决了许多问题。 用户较少的联系技术支持。 所有这些对我们的声誉都有很好的影响。

4.提高客户和用户忠诚度
客户注意到系统稳定性方面的积极变化。 用户不太可能遇到系统问题。

5.减少技术支持成本
我们已停止手动执行任何检查。 现在,所有检查都是自动化的。 我们曾经从用户那里学习问题,但通常很难理解用户在谈论什么问题。 现在,大多数问题都是由监视系统报告的,通知中包含技术数据,可以始终清楚地了解问题所在和发生位置。

重要!
您不能在运行应用程序的服务器上安装监视系统。 如果服务器崩溃,则应用程序将停止运行,并且将没有人发送有关它的通知。

监视系统应在另一个数据中心的单独服务器上工作。

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

建议:

  1. 以组件树的形式尽可能详细地破坏应用程序和系统,因此可以方便地了解发生故障的地方和发生的事情,并且控制将更加完整。
  2. 要检查组件的运行状况,请使用检查。 最好使用许多简单的检查,而不是使用一个复杂的检查。
  3. 阈值度量标准值是在监视系统的侧面配置的,不写在代码中。 这样可以避免您重新编译,重新配置或重新启动应用程序。
  4. , - , - , .
  5. , , . , , .

, ! , . , , .

祝你好运

Source: https://habr.com/ru/post/zh-CN463121/


All Articles