2016-06-21 62 views
-1

我一直在研究一个单独的盒子应用程序,该应用程序大量使用代码关键指标进行检测。现在我们正在转向云计算,并且我有如下问题可以在应用程序分发时监控指标。分布式度量

  • 是否有指标记者可以将指标数据写入Cassandra?
  • 如果数据库中每台服务器都有记录,何时以及如何进行聚合?
  • 我可以定义指标数据保存到数据库的时间间隔吗?
  • 是否有任何内置的框架可以实现这一目标?

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

回答

0

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

  1. 你可以很容易地谷歌。我不知道任何(我也不明白你会用卡桑德拉做什么?)。你通常会使用像石墨那样的东西。无论如何,记者的实施非常简单直接。

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

  3. 您可以 - 请参阅1.编写记者并进行相应配置。

  4. 不是我所知道的。

我们的指标一般:

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

的方式,你应该监视服务器与指标:

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

现在创建一个命名空间中有X个不同的名称空间,但它们都有一个共同的前缀。这意味着,你已经分组了他们。

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

有堆在那里。我不明白你为什么希望这成为卡桑德拉 - 你从中获得什么样的优势?例如http://graphite.wikidot.com/是一个图解解决方案。您的应用程序可以自动提交数据(石墨带有一个可以使用的java记者)。有关它的外观,请参阅http://graphite.wikidot.com/screen-shots

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

  • 聚合
  • 现在聚集发生在接收侧。您的提供者知道如何做到这一点,并且您可以定义规则。

    例如,你可以通配符提醒,如:

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

    石墨(我相信)甚至支持运营,e.g:

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

    这就是聚集发生。在这一点上,你的服务器再次是独立的(它们应该),并且不依赖于彼此或任何监控数据库等。它们只是报告他们自己的指标(这是他们应该做的)和你 - 作为这些指标 - 负责在接收端制作正确的警报/聚合/编制者。

    在服务器端汇总这将涉及:

    • 发现所有其他服务器
    • 监视其状态
    • 接收/发送指标来回
    • 同步他们报什么等

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

    (免责声明:无论是一个指标开发淖尔石墨开发 - 这是我多么过去这样做/我仍然使用的方法)

    编辑:

    考虑到您的意见,这里是你想达到什么我的两个最喜欢的解决方案:

    1. DB

    您可以使用DB和存储日期如用于开始消息和结束消息。 这不是一个公制的东西,所以可能不是首选。根据你的问题,你可以写你自己的记者,但是对于upserts/updates等,它会变得复杂。我认为选项2更容易,而且更有潜力。

  • 日志
  • 这是我想你需要什么。您的服务器独立登录开始/停止/暂停等 - 无论您想要报告。然后,您设置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配置并开始执行其他指标。

    我希望这可以帮助

    +0

    感谢您的回复。我正在研究应用程序级别的工具,而不是系统级别的指标。比方说,我想知道系统处理单个传入消息需要多长时间,并且如果有一个服务器群集,我将无法找出哪个服务器处理了哪条消息以及处理了多长时间。作为一个整体,每个客户我都应该能够说系统每秒钟处理了很多消息。对不起,如果我最初的问题没有传达相同的。谢谢你的帮助。 – Neoster

    +0

    @Neoster我用更多的信息更新了我的答案 – pandaadb