目录

用户权限:

服务器的配置:

RabbitMQ服务的监控:

消息的追踪:


在学习了一下RabbitMQ的概念、java应用、整合Spring之后,我们开始针对rabbitMQ服务器的知识进行一些介绍,在实际应用过程中,我们需要对RabbitMQ进行集群的配置,MQ服务监控、队列、消息堆积等信息进行监控,针对监控信息进行预警。

用户权限:

  1. 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的读权限

服务器的配置:

  1. 读取环境变量中配置,这包括shell中环境变量和rabbitmq-env.conf/rabbitmq-env-conf.bat文件中配置的环境变量。可配置如端口、配置文件指定自定义位置、节点名字等信息
  2. 读取配置文件rabbitmq.config。可配置权限、集群、插件设置等高级信息, 当然也可配置端口等简单信息
  3. 通过运行命令时指定参数。通常用来配置集群范围信息, 用来运行时动态传入
  4. 优先级:shell中环境变量 > rabbitmq-env.conf/rabbitmq-env-conf.ba  >  
  5. 默认的相关目录

环境配置文件: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文件上

               

rabbitmq 配置prometheus rabbit mq 配置_管理控制