想要用于存储和跟踪应用程序指标的体系结构

时间:2019-07-19 21:25:35

标签: monitoring metrics performance-measuring application-monitoring

像许多现代应用程序一样,作为当前应用程序的一部分,我有几个动人之处:

  • 网络服务
  • 各种队列
  • 各种工人流程

要正确管理我的应用程序,我想跟踪各种与应用程序相关的任意指标,例如:

  • 一段时间内的平均队列长度
  • 平均队列处理时间和/或最大处理时间
  • 每单位时间处理的项目数,或每单位时间处理的X类型的项目数,例如最后一分钟,一小时,一天有多少
  • 依此类推

我很难为此提出一个逻辑模型,然后再提出一个实际的实现。我正在努力的一些事情:

  • 如何进行这些计算?通过与我正在执行的操作相同的过程?通过单独的过程?
  • 何时进行这些计算?当然,例如,计算不应与应用程序流程同步。
  • 如何存储这些计算的结果?是否有一个数据库架构可以存储这样的指标?

我的一部分感觉这是一个已解决的问题,应该采用或重用某种体系结构或模式。

我故意问这个问题,而没有提及我的应用程序正在使用的特定技术,因为我的直觉告诉我这对模式并不重要。

有想法吗?

1 个答案:

答案 0 :(得分:1)

以下是每个问题的指针

  

这些计算如何进行?通过相同的过程   我正在测量的东西?通过单独的过程?

绝对不是通过相同的过程。原因是,如果将这些计算绑定到不完全用于此目的的任何进程,则会导致整个服务的逻辑分散,最终将变得难以维护。有一个集中的地方可以执行所有计算。让您的每个架构通过某种不可知的传输(例如REST)(或者,如果您每秒有数百个,例如您提到的消息队列,则更快)来发送其有效负载。

  

这些计算何时进行?当然,计算不应该   与应用程序流程保持同步。

这取决于您的用例。如果您不需要实时执行所有计算,则可以有一个静态组件来接收来自其他参与者的所有传入数据流,然后将其临时存储(稍后再介绍),以及另一个遍历所有组件的组件。新获取的数据(或全部数据)以进行计算。后者可以由诸如Celery之类的库调度,也可以使用标准的cron作业。

  

如何存储这些计算的结果?有没有   数据库架构可以存储这样的指标吗?

标准SQL几乎可以用于任何实现。现在,如果您的指标主要是带有时间戳或时序数据,则可以看看Time Series Databases (TSDB)