目录
用户权限:
服务器的配置:
RabbitMQ服务的监控:
消息的追踪:
在学习了一下RabbitMQ的概念、java应用、整合Spring之后,我们开始针对rabbitMQ服务器的知识进行一些介绍,在实际应用过程中,我们需要对RabbitMQ进行集群的配置,MQ服务监控、队列、消息堆积等信息进行监控,针对监控信息进行预警。
用户权限:
- RabbitMQ服务器上的队列、交换器等是基础数据,不能随便删除。如果删除一个队列,那么队列上的消息就会同时被删除而丢失。队列或者交换器被删除之后,生产者或者消息者都不能正常工作。RabbitMQ支持我们按需要针对配置用户的相应权限,防止用户误删除队列、交换器等。需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。RabbitMQ支持配置的用户权限:
- 用户角色分类:用户可以设置一个或者多个角色
none其他 | 无法登陆管理控制台,通常就是普通的生产者和消费者 |
management普通管理员 | 仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理 |
policymaker策略制定者 | 可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。 |
monitoring监控者 | 可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) |
administrator超级管理员 | 可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作 |
- 用户权限:针对用户配置权限、读权限、写权限下的资源(queue、exchange)。
queue\exchange的declare或者delete | Queue、exchange配置权限 |
Exchange的bind与unbind | Exchange的读写权限 |
queue的bind与unbind | Exchange的写权限、queue的读权限 |
发布消息 | Exchange的写权限 |
消费消息 | Queue的读权限 |
服务器的配置:
- 读取环境变量中配置,这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量。可配置如端口、配置文件指定自定义位置、节点名字等信息
- 读取配置文件rabbitmq.config。可配置权限、集群、插件设置等高级信息, 当然也可配置端口等简单信息
- 通过运行命令时指定参数。通常用来配置集群范围信息, 用来运行时动态传入
- 优先级:shell中环境变量 > rabbitmq-env.conf/rabbitmq-env-conf.ba >
- 默认的相关目录
环境配置文件:CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
配置文件:CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq
日志文件:LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
数据:MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia
以下简单介绍rabbitmq.config上的重要配置:
内存阀值:vm_memory_high_watermark 默认值0.4 :内存超过40%时告警并阻塞所有生产者。
内存换页: vm_memory_high_watermark_paging_ratio,0.5联系上面阈值为0.4的情况下,当内存超过04.*0.5=0.2的时候,rabbitmq会进行换页操作,把内存上的消息持久化到磁盘中以释放内存。
磁盘告警:disk_free_limit , “50MB” .当rabbitmq每隔一段时间检测磁盘空间,小于50MB时阻塞生产者。
RabbitMQ服务的监控:
RabbitMQ支持多种方式对服务器进行数据采集以及监控。监控服务的可用性、交换器、队列、消息堆积情况。
- web管理插件
在服务器端可以启动管理插件:rabbitmq-plugins enable rabbitmq_management启动后可以通过http://服务端:15672/ 监控管理RabbitMQ服务器。端口可在配置修改management.tcp.port。
- 通过REST API:参考管理页面下的httpAPI
查看所有队列 | curl -i -u root:root http://10..217.132:15672/api/queues |
查看消费者 | curl -i -u root:root http://10..217.132:15672/api/consumers |
查看交换器 | curl -i -u root:root http://10..217.132:15672/api/exchanges |
|
|
- rabbitmqadmin脚本命令:rabbitmqadmin 可以完成和 Web UI 一样的工作,它其实是使用Python写的一个脚本,实现了一个http client。可以通过wget http://localhost:15672/cli/rabbitmqadmin 获取脚本。
查看用户 | rabbitmqadmin list users |
查看队列 | list queues |
查看交换器 | list exchanges |
查看消费者 | list consumers |
查看连接 | list channels |
- java客户端:
channel.messageCount("queueName"):消息堆积的监控
channel.consumerCount("queueName"):消费者数量的监控
消息的追踪:
RabbitMQ提供针对每一个消息进行追踪功能。都是通过内部交换器、内部队列进行处理,打开消息追踪功能会影响rabbitMQ性能
- 使用firehose功能实现消息追踪:可以记录每一次发送或者消费消息的记录。默认为关闭.开启:Rabbitmqctl trace_on:关闭:Rabbitmqctl trace_off
开启后
每次发布消息时, amq.rabbitmq.trace 交换器会接收到routing-key为publish.交换器名字的消息。
每次消费消息时, amq.rabbitmq.trace 交换器会接收到routing-key为deliver.队列名的消息。
我们可以通过绑定 amq.rabbitmq.trace 交换器的消息到自定义队列以追踪消息。譬如:#每一次生产、消费会产生一个消息。我们可以通过exchange绑定到不同的队列可以追踪消息。
经测试:消费消息为日志的记录的消息不会再记录。
- 使用rabbitmq_tracing插件:把流入流出的消息打印到日志中。
打开/关闭 rabbitmq_tracing插件命令:
rabbitmq-plugins enable rabbitmq_tracing
rabbitmq-plugins disable rabbitmq_tracing
在管理页面上添加trace(存储文件名、存储发布还是消息记录),匹配的消息数据默认保存在服务器上的 /var/tmp/rabbitmq-tracing/mytrace.log文件上