文档章节

RabbitMQ实战:界面管理和监控

情情说
 情情说
发布于 04/16 10:04
字数 1736
阅读 1469
收藏 22

本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。

上一篇总结了可能出现的异常场景,并对RabbitMQ提供的可用性保证进行了分析,在出现服务器宕机后,仍然可以正常服务。另外,需要尽快恢复异常的服务器,重新加入集群,推送未消费的消息,通过监控可第一时间接收到错误并进行处理。

另外,我们想主动了解消息堆积和消费的情况,以及服务器节点的压力,RabbitMQ提供了几种方式便捷、直观的了解,包括Web管理插件、REST API、rabbitmqadmin脚本。

通过介绍,你会了解到:

  • web管理插件
  • REST API
  • rabbitmqadmin脚本
  • Nagios和监控RabbitMQ

web管理插件

RabbitMQ的插件是由Erlang语言写的,并且和服务器一同运行在同一个Erlang VM中,通过下面的命令启用web管理插件:

sudo ./rabbitmq-plugins enable rabbitmq_management

启动之后,访问15672端口,可看到Web管理页面主页面:

RabbitMQ主页面

添加用户

默认会提供一个默认用户guest,密码也是guest,线上环境需要创建一个新用户,并把guest用户删除。

首先切换到Admin标签页,可以查看或添加用户,添加用户时,可指定Tags,相当于角色,会拥有对应的权限:

查看和添加用户

点击用户列表的用户名,可分配权限、编辑或删除用户,分配权限时,可细化到某个virtual下的某个topic,并按读、写、配置类别进行分开:

添加权限

管理队列、交换器、绑定

切换到“Exchanges”标签,可查看和管理交换器,单击交换器名称,可查看到更多详细信息,比如交换器绑定,还可以添加新的绑定:

交换器

交换器绑定

切换到“Queues”标签,可以查看队列信息,点击队列名称,可查看队列所有状态的消息数量和大小等统计信息:

队列列表

队列统计信息

还可以查看消费者和绑定,发布、获取消息:

查看消费者和绑定

REST API

有时需要初始化一些列队列和交换器,每次部署一套新环境后,都需要一步一步创建会有点麻烦,通过REST API可方便的实现自动化脚本。

当启用web管理插件后,不仅获得了WEB UI,也拥一个REST化的WEB管理API,任何语言或脚本只要有HTTP库,都能调用。

接口会返回json串,比如获取所有队列:

curl -i -u admin:admin http://localhost:15672/api/queues

会返回一个json数组,每个元素是一个队列,包含队列的各种属性:

REST API请求结果

rabbitmqadmin脚本

另外,还提供了rabbitmqadmin脚本的方式查看元数据信息和一些统计数据,它会包装REST API,使用干净的接口与其交互,而且输出内容也是格式化过的,方便我们查看。

比如查看所有队列,可以这样写:

./rabbitmqadmin list queues

会返回如下结果:

rabbitmqadmin返回结果

监控

监控RabbitMQ并不只是确保端口5672是开启的并能接收TCP连接而已,还要能够模拟AMQP客户端来确保连接之后获取信道,如果能使用REST API找出是否所有构成RabbitMQ部件都正常运行,并且之间能正常通信,就更好了。

书中介绍使用Nagios监控框架进行监控,我之前没有使用,这里搜集了一些资料,会做下简单介绍。

Nagios

Nagios是一款开源的监控工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

它本身不包括这部分功能,所有的监控、检测功能都是通过各种插件完成的,启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。

Nagios可以识别4种状态返回信息:

  • 0(OK)表示状态正常/绿色;
  • 1(WARNING)表示出现警告/黄色;
  • 2(CRITICAL)表示出现非常严重的错误/红色;
  • 3(UNKNOWN)表示未知错误/深黄色;

Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。

它是如何管理远端服务器对象的,使用NRPE插件,主要过程如下:

  • Nagios 执行安装在它里面的check_nrpe插件,并告诉check_nrpe去检测哪些服务;
  • 通过SSL,check_nrpe连接远端机子上的NRPE daemon;
  • NRPE 运行本地的各种插件去检测本地的服务和状态;
  • NRPE把检测的结果传给主机端的check_nrpe,check_nrpe再把结果送到Nagios状态队列中;
  • Nagios 依次读取队列中的信息,再把结果显示出来;
监控RabbitMQ

书中提到监控RabbitMQ的各个方面,比如:监控Rabbit内部状态、确认RabbitMQ可用并且能够响应、观察队列状态检测消费者异常、检测消息通信结构中不合需求的配置更改等。

基本思路都是通过编写Nagios需要的检测脚本,使用AMQP客户端或REST API的方式,获取关心的监控信息,根据情况返回不同的状态码。

具体的脚本脚本就不一一介绍了,这里举个例子,监控队列的持久化配置是否正确,通过api/queues/<vhost>/<queueName>获取队列信息,判断它的durable属性是否为true,脚本如下:

import sys, json, httplib, urllib, base64, socket

# 1.定义状态码
EXIT_OK = 0
EXIT_WARNING = 1
EXIT_CRITICAL = 2
EXIT_UNKNOWN = 3

# 2.解析参数
server, port = sys.argv[1].split(":")
vhost = sys.argv[2]
username = sys.argv[3]
password = sys.argv[4]
queue_name = sys.argv[5]
auto_delete = json.loads(sys.argv[6].lower())
durable = json.loads(sys.argv[7].lower())

# 3.连接服务器
conn = httplib.HTTPConnection(server, port)

# 4.构建api路径
path = "/api/queues/%s/%s" % (urllib.quote(vhost, safe=""),
                              urllib.quote(queue_name))
method = "GET"

# 5.执行http请求
credentials = base64.b64encode("%s:%s" % (username, password))
try:
    conn.request(method, path, "",
                 {"Content-Type" : "application/json",
                  "Authorization" : "Basic " + credentials})

# 6.连接异常,退出
except socket.error:
    print "UNKNOWN: Could not connect to %s:%s" % (server, port)
    exit(EXIT_UNKNOWN)

response = conn.getresponse()

# 7.状态码为404,说明队列不存在,退出
if response.status == 404:
    print "CRITICAL: Queue %s does not exist." % queue_name
    exit(EXIT_CRITICAL)

# 8.durable属性是否正确
if response["durable"] != durable:
    print "WARN: Queue '%s' - durable flag is NOT %s." % \
          (queue_name, durable)
    exit(EXIT_WARNING)

# 9.返回正常
print "OK: Queue %s configured correctly." % queue_name
exit(EXIT_OK)

下一篇将介绍RabbitMQ安全和性能方面的考虑。

<font color='green'>欢迎扫描下方二维码,关注我的个人微信公众号</font> ~

情情说

© 著作权归作者所有

共有 人打赏支持
情情说

情情说

粉丝 68
博文 41
码字总数 77690
作品 0
海淀
程序员
在CentOS上安装rabbitmq

转自:http://flyingdutchman.iteye.com/blog/1887283 这文章写得很好,除了安装软件编译时间比较长之外,安装这个几乎没出现什么错误。现在去配置下rabbitmq,马上就可以使用了。 在本节中我...

mac_zhao
2014/09/28
0
0
openstack 最简单的 RabbitMQ 监控方法

先来看张图: 这是 Nova 的架构图,我们可以看到有两个组件处于架构的中心位置:数据库和Queue。数据库保存状态信息,而几乎所有的 nova-* 服务都直接依赖于 Queue 实现服务之间的通信和调用...

zhongbeida_xue
05/09
0
0
消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证 一、为何要对消息中间件进行监控? 上线的业务系统需要监控,然而诸如消息队列、数据库、...

癫狂侠
05/28
0
0
MQ-RabbitMq部署安装配置

环境准备 本次实验使用的是VMvare虚拟机。详情如下 hostname: node1.server ip地址:192.168.0.150 网卡:eth0,eth1 系统及硬件:CentOS 7.2 内存2G,硬盘50G 一、 什么是RabbitMq 消息队列又...

linuxzkq
06/26
0
0
RabbitMQ的安装,配置,监控

安装erlang RabbitMQ是基于Erlang的,所以首先必须配置Erlang环境。 从Erlang的官网 http://www.erlang.org/download.html 下载最新的erlang安装包,我下载的版本是 otpsrc_18.2.1.tar.gz 。...

swzxgege
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Univalsal_ImageLoader源码结构与创建者模式 初步小结

最近在回归看Univalsal_ImageLoader源码,本想自己也实现试试写一个,看源码是为了学习看能否使用,助于自己可以写出有自己逻辑结构的代码。 首先我们初始化ImageLoader的配置初始化的时候,...

DannyCoder
29分钟前
0
0
计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
3
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
1
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
3
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部