RabbitMQ 集群状态:如何从 shell 中解析 Erlang 的光束?

Posted

技术标签:

【中文标题】RabbitMQ 集群状态:如何从 shell 中解析 Erlang 的光束?【英文标题】:RabbitMQ cluster status: how to parse Erlang's beam from a shell? 【发布时间】:2017-07-30 17:27:12 【问题描述】:

我需要监控rabbitmq集群状态。

REST API 不提供有关 partitions 的信息。所以我需要使用apprabbitmqctl

# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbit-1' ...
[nodes,[disc,['rabbit@rabbit-1','rabbit@rabbit-2',
                'rabbit@rabbit-3']],
 running_nodes,['rabbit@rabbit-3','rabbit@rabbit-2',
                 'rabbit@rabbit-1'],
 cluster_name,<<"rabbit@rabbit-1">>,
 partitions,[],
 alarms,['rabbit@rabbit-3',[],
          'rabbit@rabbit-2',[nodedown],
          'rabbit@rabbit-1',[]]]

我需要检查partitions,[],。如果有空的[] 它是is ok。否则我有问题。

我从 bash 中找到了使用 erlang 的示例:

erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().'  -noshell

是否可以使用erl(或其他工具)解析rabbitmqctl stdout 并返回信息“空/非空”或返回代码?

我绝对不知道 Erlang。

如果有人帮助我,我会很高兴:-)

【问题讨论】:

您需要删除第一行输入,因为它不是 Erlang 术语的一部分,在列表末尾添加一个点 .,将其存储到文件中,然后您可以阅读它与file:consult/1。剩下的就是数据操作了。 【参考方案1】:

你可以使用这个API

http://your_ip:15672/api/nodes

你可以在哪里检查一个节点是向上还是向下

name: "rabbit@t-srv-rabbit-cent04",
type: "disc",
running: false,
+cluster_links: (0)[...],

或分区

,
-
-partitions: (0)[
],
os_pid: "8070",
fd_total: 300000,
sockets_total: 269908,
mem_limit: 1590196633,

你不需要 erlang shell

【讨论】:

另外,您可以选择使用以下格式仅显示特定信息:http://your_ip:15672/api/nodes?columns=name,running,cluster_links

以上是关于RabbitMQ 集群状态:如何从 shell 中解析 Erlang 的光束?的主要内容,如果未能解决你的问题,请参考以下文章

如何从rabbitmq集群中剔除某个节点以及如何将该节点加回集群

如何在 kubernetes 上设置基本的 rabbitmq

在K8S上部署rabbitmq集群-有状态服务

RabbitMQ教程_6 搭建集群

【rabbitMQ】rabbitMQ集群节点重新加入集群相关操作

RabbitMQ集群