分布式度量标准

时间:2016-06-21 21:50:53

标签: java dropwizard metrics codahale-metrics

我一直在开发一个单一的盒子应用程序,它大量使用代码表指标进行检测。现在我们正在转向云计算,我对如何在分发应用程序时监控指标提出了以下问题。

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 你可以相当轻松地谷歌这一点。我不知道任何(我也不明白你在cassandra中用它做什么?)。你通常会使用类似石墨的东西。无论如何,记者的实施非常简单直接。

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

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

  4. 不是我知道的。

  5. 现在一般来说是指标:

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

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

    1. 创建命名空间
    2. io.my.server。{hostname} .my.metric

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

      1. 将它们发送到您的首选监控解决方案。
      2. 那里有堆。我不明白为什么你想要这个是cassandra - 你从中获得了什么样的优势? http://graphite.wikidot.com/例如是图表解决方案。您的应用程序可以在那里自动提交数据(石墨附带java中的报告器,您可以使用)。请参阅http://graphite.wikidot.com/screen-shots了解它的样子。

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

        1. 聚合
        2. 现在聚合发生在接收方。您的提供商知道如何执行此操作,您可以定义规则。

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

          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. DB
          2. 您可以使用数据库和存储日期,例如用于开始消息和结束消息。 这不是一个真正的度量标准,所以可能不是首选。根据你的问题,你可以编写自己的记者,但是对于upserts / updates等问题会很复杂。我认为选项2更容易,更有潜力。

            1. 记录
            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配置并开始执行其他指标。

              我希望这会有所帮助

相关问题