为 Elasticsearch 设置单独的监控集群

Setting up a Separate Monitoring Cluster for Elasticsearch

我正在尝试设置一个单独的集群 (kibanacluster) 来监控我的主要 elasticsearch 集群 (marveltest)。下面是我使用的 ES、Marvel 和 Kibana 版本。 ES版本暂时固定。如果需要,我可以更新或降级其他组件。

监控集群和Kibana都在主机192.168.2.124中运行,主集群在单独的主机192.168.2.116中运行。

192.168.2.116: elasticsearch.yml

marvel.agent.exporter.es.hosts: ["192.168.2.124"]
marvel.enabled: true
marvel.agent.exporters:

id1:
    type: http
    host: ["http://192.168.2.124:9200"]

查看监控集群中的 DEBUG 日志,我可以看到数据来自主集群,但正在获取 "filtered",因为集群名称不同。

[2016-07-04 16:33:25,144][DEBUG][transport.netty ] [nodek] connected to node [{#zen_unicast_2#}{192.168.2.124}{192.168.2.124:9300}]

[2016-07-04 16:33:25,144][DEBUG][transport.netty ] [nodek] connected to node [{#zen_unicast_1#}{192.168.2.116}{192.168.2.116:9300}]

[2016-07-04 16:33:25,183][DEBUG][discovery.zen.ping.unicast] [nodek] [1] filtering out response from {node1}{Rmgg0Mw1TSmIpytqfnFgFQ}{192.168.2.116}{192.168.2.116:9300}, not same cluster_name [marveltest]

[2016-07-04 16:33:26,533][DEBUG][discovery.zen.ping.unicast] [nodek] [1] filtering out response from {node1}{Rmgg0Mw1TSmIpytqfnFgFQ}{192.168.2.116}{192.168.2.116:9300}, not same cluster_name [marveltest]

[2016-07-04 16:33:28,039][DEBUG][discovery.zen.ping.unicast] [nodek] [1] filtering out response from {node1}{Rmgg0Mw1TSmIpytqfnFgFQ}{192.168.2.116}{192.168.2.116:9300}, not same cluster_name [marveltest]

[2016-07-04 16:33:28,040][DEBUG][transport.netty ] [nodek] disconnecting from [{#zen_unicast_2#}{192.168.2.124}{192.168.2.124:9300}] due to explicit disconnect call [2016-07-04 16:33:28,040][DEBUG][discovery.zen ] [nodek] filtered ping responses: (filter_client[true], filter_data[false]) --> ping_response{node [{nodek}{vQ-Iq8dKSz26AJUX77Ncfw}{192.168.2.124}{192.168.2.124:9300}], id[42], master [{nodek}{vQ-Iq8dKSz26AJUX77Ncfw}{192.168.2.124}{192.168.2.124:9300}], hasJoinedOnce [true], cluster_name[kibanacluster]}

[2016-07-04 16:33:28,053][DEBUG][transport.netty ] [nodek] disconnecting from [{#zen_unicast_1#}{192.168.2.116}{192.168.2.116:9300}] due to explicit disconnect call [2016-07-04 16:33:28,057][DEBUG][transport.netty ] [nodek] connected to node [{nodek}{vQ-Iq8dKSz26AJUX77Ncfw}{192.168.2.124}{192.168.2.124:9300}]

[2016-07-04 16:33:28,117][DEBUG][discovery.zen.publish ] [nodek] received full cluster state version 32 with size 5589

问题是您在混合使用 Marvel 1.x settings with Marvel 2.2 settings,而且您的其他配置似乎已关闭,正如 Andrei 在评论中指出的那样。

marvel.agent.exporter.es.hosts: ["192.168.2.124"]

这不是 Marvel 已知的设置 2.x。根据您的 copy/paste,YAML 也可能由于空格而出现格式错误:

marvel.agent.exporters:

id1:
    type: http
    host: ["http://192.168.2.124:9200"]

这应该是:

marvel.agent.exporters:
  id1:
    type: http
    host: ["http://192.168.2.124:9200"]

正如 Andrei 暗示的那样,您可能已将生产节点添加到您的 discovery.zen.ping.unicast.hosts,它试图将其加入他们的集群。我怀疑您可以在 monitoring 集群中完全删除该设置。

[2016-07-04 16:33:26,533][DEBUG][discovery.zen.ping.unicast] [nodek] [1] filtering out response from {node1}{Rmgg0Mw1TSmIpytqfnFgFQ}{192.168.2.116}{192.168.2.116:9300}, not same cluster_name [marveltest]

这表明它忽略了它正在连接的节点,因为 other 节点 (node1) 不在同一个集群中。


要设置单独的监控集群,非常简单,但需要先了解活动部分。

  1. 您需要一个单独的集群,其中 至少 一个节点(大多数人只需要一个节点)。
    • 这个独立的集群实际上不知道它监控的集群。它只接收数据。
  2. 您需要将数据从 production 集群发送到那个单独的集群。
  3. 监控集群解读数据使用Kibana+MarvelUI插件展示图表

所以,你需要什么:

  • 您的生产集群需要在每个节点上安装 marvel-agent
  • 每个节点需要配置导出器:

这和你以前的一样:

marvel.agent.exporters:
  id1:
    type: http
    host: ["http://192.168.2.124:9200"]
  • Kibana 应该与监控集群通信(在本例中为 192.168.2.124)并且 Kibana 需要相同版本的 Marvel UI 插件。