-1

我一直在开发一个单一的盒子应用程序,它大量使用 codehale 指标进行检测。现在我们正在迁移到云,我有以下关于在应用程序分发时如何监控指标的问题。

  • 是否有可以将指标数据写入 Cassandra 的指标报告器?
  • 如果数据库中每个服务器都有记录,那么聚合何时以及如何发生?
  • 我可以定义度量数据保存到数据库中的时间间隔吗?
  • 是否有任何内置框架可用于实现这一目标?

非常感谢,感谢您的所有帮助。

4

1 回答 1

1

我先回答你的问题,但我认为你误解了如何使用 Metrics。

  1. 你可以很容易地用谷歌搜索这个。我不知道(我也不明白你会在 cassandra 中用它做什么?)。你通常会使用石墨之类的东西。在任何情况下,reporter 的实现都非常简单直接。

  2. 这个问题没有太大意义。为什么要聚合超过 2 个不同的服务器 - 它们是独立的。每个受监控的实例都应该是独立的。聚合发生在接收端(例如石墨)

  3. 您可以 - 请参阅 1. 编写报告器,并进行相应配置。

  4. 从来没听说过。

现在到一般的指标:

我认为你的想法是错误的。您可以监视 X 服务器,这根本不是问题,但您不应该在客户端(或数据库端)聚合它。那怎么行?将客户端重新启动为零,本质上这意味着您需要跟踪每个服务器的状态,以便您的聚合确实有效。您如何管理中断?

应该使用指标监控服务器的方式:

  1. 创建命名空间

io.my.server.{主机名}.my.metric

现在你有 X 个不同的命名空间,但它们都有一个共同的前缀。这意味着,您已将它们分组。

  1. 将它们发送到您喜欢的监控解决方案。

那里有一堆。我不明白您为什么希望这是 cassandra - 您从中获得了什么样的优势?例如http://graphite.wikidot.com/是一个图形解决方案。您的应用程序可以在那里自动提交数据(graphite 带有一个您可以使用的 java 报告器)。请参阅http://graphite.wikidot.com/screen-shots了解它的外观。

要点是石墨(以及所有或大多数提供者)知道如何处理您的命名空间。例如,还可以看看 Zabix,它可以做同样的事情。

  1. 聚合

现在聚合发生在接收端。您的提供商知道如何做到这一点,您可以定义规则。

例如,您可以使用通配符警报,例如:

io.my.server.{hostname}.my.metric.count > X 

Graphite(我相信)甚至支持操作,例如:

sum(io.my.server.{hostname}.my.metric.request) - which would sum up ALL your hosts's requests

这就是聚合发生的地方。那时,您的服务器再次成为独立的(应该如此),并且彼此不依赖或任何监控数据库等。它们只是报告自己的指标(这是他们应该做的),而您 - 作为消费者这些指标 - 负责在接收端制作正确的警报/聚合/公式。

在服务器端进行聚合将涉及:

  • 发现所有其他服务器
  • 监控他们的状态
  • 来回接收/发送指标
  • 同步他们报告的内容等

这听起来像是维护的噩梦:)我希望能给你一些内部/想法。

(免责声明:无论是度量开发还是石墨开发——这就是我过去的做法/以及我仍然使用的方法)

编辑:

考虑到您的评论,以下是我对您想要实现的目标的两个最喜欢的解决方案:

  1. D B

您可以使用数据库并存储日期,例如开始消息和结束消息。这不是真正的度量标准,因此可能不是首选。根据您的问题,您可以就此撰写自己的记者,但在更新/更新等方面会变得复杂。我认为选项 2 更容易并且具有更大的潜力。

  1. 日志

这是我认为你需要的。您的服务器独立登录开始/停止/暂停等 - 无论您要报告什么。然后设置 logstash 并收集这些日志。Logstash 允许您随时间跟踪这些事件并在其上创建指标,请参阅:

https://www.elastic.co/guide/en/logstash/current/plugins-filters-metrics.html

或者:

https://github.com/logstash-plugins/logstash-filter-elapsed

第一个使用实际指标。第二个是一个不同的插件,它只测量开始/停止事件之间的时间。

这是最具潜力的选项,因为它不依赖于任何格式/任何数据存储或任何其他内容。如果您使用整个 ELK 堆栈,您甚至可以获得 Kibana 开箱即用的绘图功能。

假设您想衡量您的消息。您可以只查找日志,不涉及应用程序更改。该解决方案甚至不涉及您的应用程序(例如,手动存储您的报告数据确实占用了应用程序中的线程和处理,因此如果您需要实时兼容,这将降低您的整体性能),它是一个完全独立的解决方案。稍后,当想要测量其他指标时,您可以轻松地添加到您的 logstash 配置并开始执行其他指标。

我希望这有帮助

于 2016-06-24T08:59:17.833 回答