RabbitMQ学习 (管理插件)
介绍
rabbitmq-management插件提供了一个基于HTTP的API,用于管理和监控您的RabbitMQ服务器,以及基于浏览器的UI和命令行工具rabbitmqadmin。功能包括:
- 声明,列出和删除交换,队列,绑定,用户,虚拟主机和权限。
- 监视队列长度,全局和每个通道的消息速率,每个连接的数据速率等
- 监视资源使用情况,例如文件描述符,内存使用情况,可用磁盘空间。
- 管理用户(提供当前用户的管理权限)。
- 导出和导入对象定义(虚拟主机,用户,权限,队列,交换,绑定,参数,策略)到JSON。
- 强制关闭连接,清除队列。
- 发送和接收消息(在开发环境中使用并用于故障排除)。
入门
管理插件包含在RabbitMQ发行版中。要启用它,请使用rabbitmq-plugins:
rabbitmq-plugins enable rabbitmq_management
- Web UI位于:http:// server-name:15672 /
- Web UI使用同一个插件提供的HTTP API。所述API的文档可以在http:// server-host:15672 / api /或我们 最新的HTTP API文档中访问)。
- 下载rabbitmqadmin :http:// server-name:15672 / cli /
注意:3.0之前的RabbitMQ版本的端口是55672。
要使用Web UI,您需要以RabbitMQ用户身份进行身份验证(全新安装时,用户“guest”用密码“guest”创建)。从这里你可以管理交换,队列,绑定,虚拟主机,用户和权限。希望UI是相当不言自明的。
管理UI是作为一个静态的HTML页面实现的,后者对HTTP API进行后台查询。因此,它会大量使用Javascript。已经使用最新版本的Firefox,Chromium和Safari以及Microsoft Internet Explorer版本回到6.0。
权限
管理插件在一定程度上扩展了现有的权限模式。用户可以在RabbitMQ中获得任意的标签。管理插件使用名为“管理”,“决策者”,“监测”和“管理员”的标签。下表显示了不同类型的用户可以执行的操作:
标签 | 功能 |
---|---|
(没有) | 没有访问管理插件 |
管理 | 用户可以通过AMQP加上:
|
政策制定者 | 一切“管理”可以加上:
|
监控 | 一切“管理”可以加上:
|
管理员 | 一切“决策者”和“监督”可以加上:
|
请注意,由于“管理员”完成“监视”所做的一切,“监视”完成“管理”所做的一切,所以您经常只需要为每个用户最多指定一个标记。
普通的RabbitMQ权限仍然适用于监视器和管理员; 仅仅是因为用户是监视器或管理员并没有给他们通过AMQP或管理插件完全访问交换,队列和绑定。
所有用户只能列出特定虚拟主机中的对象,如果他们具有该虚拟主机的任何权限。
如果由于只有非管理员用户或根本没有用户而被锁定,则可以使用rabbitmqctl add_user 创建非管理员用户,并使用rabbitmqctl set_user_tags将用户升级为管理员。
HTTP API
管理插件将在http:// server-name:15672 / api /上创建一个基于HTTP的API 。浏览到该位置以获取更多关于API的信息。为了方便起见,您可以阅读 GitHub上 最新的HTTP API文档。
API旨在用于监视和警报目的。它提供了有关节点,连接,通道,队列,消费者等状态的详细信息。
可以在任何启用了rabbitmq-management插件的节点上使用HTTP API 。然后,它将能够在任何(或全部)群集节点上提供度量标准。在监视节点集群时,不需要单独通过HTTP API联系每个节点。相反,请联系位于群集前的随机节点或负载均衡器。
对于多种语言的HTTP API客户端,请参阅开发人员工具。
一些API端点返回了很多信息。通过过滤“HTTP GET”请求返回的列可以减少音量。详细信息请参阅 最新的HTTP API文档。
rabbitmqadmin是一个与HTTP API交互的Python命令行工具。它可以从启用了管理插件的任何RabbitMQ节点下载,请参阅http:// server-name:15672 / cli /
组态
有几个配置选项会影响管理插件。这些通过主要的RabbitMQ 配置文件进行管理 。
HTTP请求记录
要为HTTP API创建简单的请求访问日志,请将rabbitmq_management应用程序中的http_log_dir变量的值设置为可以创建日志的目录的名称,然后重新启动RabbitMQ。请注意,只有在/ api处的API请求被记录,而不是对组成基于浏览器的GUI的静态文件的请求。
统计间隔
默认情况下,服务器每隔5000ms发出一次统计事件。管理插件中显示的消息速率值是在此期间计算的。因此,您可能希望增加此值以便更长时间地采样速率,或者减少具有大量队列或通道的服务器上的统计负载。
为此,请将rabbit应用程序的collect_statistics_interval变量的值设置为所需的时间间隔(以毫秒为单位),然后重新启动RabbitMQ。
消息率
默认情况下,管理插件显示全局消息速率,以及每个队列,通道,交换和虚拟主机。这些被称为基本消息速率。
它还可以显示所有交换信道组合的信息速率,交换到队列和排队到信道。这些被称为详细的消息速率。详细的消息速率在默认情况下是禁用的,因为当有大量的通道,队列和交换的组合时,它们可能具有大的内存占用。
或者,消息速率可以完全禁用。这可以帮助从CPU绑定的服务器获得最佳性能。
消息速率模式由 rabbitmq_management中的rates_mode配置变量 控制。这可以是 基本的(默认),详细或没有。
在启动时加载定义
管理插件允许您导出包含所有代理对象(队列,交换,绑定,用户,虚拟主机,权限和参数)定义的JSON文件。在某些情况下,确保每次启动时都存在这些对象可能很有用。
为此,请将management.load_definitions( 经典配置格式中的rabbitmq_management.load_definitions)配置项设置为先前导出的包含所需定义的JSON文件的路径:
management.load_definitions = /path/to/definitions/file.json
使用经典的配置格式:
[ {rabbitmq_management, [ {load_definitions, "/path/to/definitions/file.json"} ]} ].
请注意,文件中的定义将覆盖代理中的任何内容。使用此选项不会删除已经存在的任何内容。但是,如果从完全重置代理程序开始,则使用此选项将会阻止创建通常的默认用户/虚拟主机/权限。
事件积压
在负载较重的情况下,统计事件的处理会增加内存消耗。为了减少这种情况,可以调整通道和队列统计收集器的最大积压大小。rabbitmq_management应用程序中stats_event_max_backlog变量的值 设置了两个积压的最大大小。默认为250。
配置HTTP侦听器
可以通过配置rabbitmq-web-dispatch在不同的端口或网络接口上使用SSL等服务管理插件。为此,应该配置 监听器配置项; 例如更改端口:
management.listener.port = 12345
或者,使用经典配置格式:
[ {rabbitmq_management, [{listener, [{port, 12345}]}]}, ]
或者使管理插件使用HTTPS:
management.listener.port = 15671 management.listener.ssl = true management.listener.ssl_opts.cacertfile = /path/to/cacert.pem management.listener.ssl_opts.certfile = /path/to/cert.pem management.listener.ssl_opts.keyfile = /path/to/key.pem
或者,使用经典配置格式
[{rabbitmq_management, [{listener, [{port, 15671}, {ssl, true}, {ssl_opts, [{cacertfile, "/path/to/cacert.pem"}, {certfile, "/path/to/cert.pem"}, {keyfile, "/path/to/key.pem"}]} ]} ]} ]
有关 更多详细信息,请参阅rabbitmq-web-dispatch指南。
示例保留策略
管理插件将保留一些数据的样本,如消息速率和队列长度。您可以配置保留这些数据的时间。
management.sample_retention_policies.global.minute = 5 management.sample_retention_policies.global.hour = 60 management.sample_retention_policies.global.day = 1200 management.sample_retention_policies.basic.minute = 5 management.sample_retention_policies.basic.hour = 60 management.sample_retention_policies.detailed.10 = 5
有三个政策:
- global - 保留概览和虚拟主机页面的数据需要多长时间
- basic - 保留个人连接,渠道,交换和队列的数据需要多长时间
- detailed - 在连接,通道,交换和队列对之间保留消息速率的数据需要多长时间(如“消息速率细分”所示)
跨源资源共享(CORS)
管理API默认不允许访问不同来源的网站。允许的来源必须在配置中明确列出。
[ {rabbitmq_management, [{cors_allow_origins, ["http://rabbitmq.com", "http://example.org"]}]}, ]
CORS预发送请求由浏览器缓存。管理插件默认定义了30分钟的超时时间。您可以在配置中修改此值。它是在几秒钟内定义的
[ {rabbitmq_management, [{cors_allow_origins, ["*"]}]}, ]
CORS预发送请求由浏览器缓存。管理插件默认定义了30分钟的超时时间。您可以在配置中修改此值。它是在几秒钟内定义的
[ {rabbitmq_management, [{cors_allow_origins, ["http://rabbitmq.com", "http://example.org"]}, {cors_max_age, 3600}]}, ]
路径前缀
某些环境要求对管理插件的所有HTTP请求使用自定义前缀。该 串流中设置允许的任意的前缀来在管理插件的所有HTTP请求处理程序来设定。
将path_prefix设置为/ my-prefix 指定使用URI 主机的所有API请求 :port / my-prefix / api / [...]
管理用户界面登录页面将具有URI host:port / my-prefix / - 注意,在这种情况下,需要使用尾部斜线。
[ ... {rabbitmq_management, [{path_prefix, "/my-prefix"}]}, ... ]
例
RabbitMQ的一个示例配置文件,打开请求日志记录,将统计间隔增加到10000毫秒,并将一些其他相关参数显式设置为默认值,如下所示:
listeners.tcp.default = 5672 collect_statistics_interval = 10000 # management.load_definitions = /path/to/exported/definitions.json management.listener.port = 15672 management.listener.ip = 0.0.0.0 management.listener.ssl = true management.listener.ssl_opts.cacertfile = /path/to/cacert.pem management.listener.ssl_opts.certfile = /path/to/cert.pem management.listener.ssl_opts.keyfile = /path/to/key.pem management.http_log_dir = /path/to/rabbit/logs/http management.rates_mode = basic # Configure how long aggregated data (such as message rates and queue # lengths) is retained. # Your can use 'minute', 'hour' and 'day' keys or integer key (in seconds) management.sample_retention_policies.global.minute = 5 management.sample_retention_policies.global.hour = 60 management.sample_retention_policies.global.day = 1200 management.sample_retention_policies.basic.minute = 5 management.sample_retention_policies.basic.hour = 60 management.sample_retention_policies.detailed.10 = 5
或者,使用经典配置格式
[ {rabbit, [{tcp_listeners, [5672]}, {collect_statistics_interval, 10000}]}, {rabbitmq_management, [ %% Pre-Load schema definitions from the following JSON file. %% %% {load_definitions, "/path/to/definitions.json"}, %% Log all requests to the management HTTP API to a directory. %% {http_log_dir, "/path/to/rabbit/logs/http"}, %% Change the port on which the HTTP listener listens, %% specifying an interface for the HTTP server to bind to. %% Also set the listener to use TLS and provide TLS options. %% %% {listener, [{port, 15672}, %% {ip, "0.0.0.0"}, %% {ssl, true}, %% {ssl_opts, [{cacertfile, "/path/to/cacert.pem"}, %% {certfile, "/path/to/cert.pem"}, %% {keyfile, "/path/to/key.pem"}]}]}, %% One of 'basic', 'detailed' or 'none'. {rates_mode, basic}, %% increasing this parameter will make HTTP API cache data retrieved %% from other cluster peers more aggressively %% {management_db_cache_multiplier, 5}, %% If event collection falls back behind stats emission, %% up to this many events will be kept in the backlog, the rest %% will be dropped to avoid runaway memory consumption growth. %% This setting is per-node. Unless there is evidence of %% a stats collector backlog, you don't need to change this value. %% {stats_event_max_backlog, 250}, %% CORS settings for HTTP API %% {cors_allow_origins, ["https://rabbitmq.eng.megacorp.local", "https://monitoring.eng.megacorp.local"]}, %% {cors_max_age, 1800}, %% Configure how long aggregated data (such as message rates and queue %% lengths) is retained. %% %% {sample_retention_policies, %% [{global, [{60, 5}, {3600, 60}, {86400, 1200}]}, %% {basic, [{60, 5}, {3600, 60}]}, %% {detailed, [{10, 5}]}]} ]} ]
内存使用分析
管理UI可用于检查节点的内存使用情况,包括显示每个类别的故障。有关详细信息,请参阅内存使用分析指南
关于聚类的注意事项
管理插件了解集群。您可以在集群中的一个或多个节点上启用它,并查看有关整个集群的信息,而不管连接到哪个节点。
如果要部署没有启用完整管理插件的群集节点,则仍然需要在每个节点上启用rabbitmq-management-agent插件。
群集时,管理插件执行群集范围的查询,这意味着它可能会受到各种网络事件(如 分区)的影响。
(反向HTTP)代理设置
可以通过任何符合RFC 1738的代理使Web UI可用。下面的Apache配置示例说明了使Apache符合要求的最低必要指令。它在默认端口15672上假设一个管理Web UI:
AllowEncodedSlashes On ProxyPass /api http://localhost:15672/api nocanon ProxyPass / http://localhost:15672/ ProxyPassReverse / http://localhost:15672/
重新启动统计数据库
统计数据库完全存储在内存中。所有内容都是短暂的,应该这样对待。在版本3.6.7之前,stats数据库存储在单个节点上。从版本3.6.7开始,每个节点都有自己的统计数据库,其中包含记录在该节点上的一小部分统计数据。可以重新启动统计数据库。
统计数据库存储在之前的RabbitMQ 3.6.2的统计过程的内存中,并存储在RabbitMQ 3.6.2的ETS表中。要使用早于3.6.2的版本重新启动数据库,请使用
rabbitmqctl eval 'exit(erlang:whereis(rabbit_mgmt_db), please_terminate)
从RabbitMQ 3.6.2开始,最高可以使用3.6.5
rabbitmqctl eval 'supervisor2:terminate_child(rabbit_mgmt_sup_sup, rabbit_mgmt_sup), rabbit_mgmt_sup_sup:start_child().
这些命令必须在托管数据库的节点上执行。从RabbitMQ 3.6.7开始,可以使用每个节点重置数据库
rabbitmqctl eval 'rabbit_mgmt_storage:reset().'
重置所有节点上的整个管理数据库
rabbitmqctl eval 'rabbit_mgmt_storage:reset_all().'
还有HTTP API端点来重置数据库整个数据库
DELETE /api/reset
对于单个节点
DELETE /api/reset/:node
内存管理
rabbitmqctl status
或通过 HTTP API向/ api / nodes / name发送GET请求。
统计信息是周期性地发送的,由上述统计时间间隔来调节,或者当某些组件被创建/声明时(例如,新的连接或通道被打开,或者被声明的队列)或被关闭/删除。消息速率不会直接影响管理数据库内存使用情况。
统计数据库消耗的内存总量取决于事件发射间隔,有效费率模式和保留策略。
将rabbit.collect_statistics_interval值增加到30-60s(注意:值应以毫秒为单位设置,例如30000)将减少具有大量队列/通道/连接的系统的内存消耗。调整保留策略以保留较少的数据也将有所帮助。
可以通过使用参数stats_event_max_backlog设置最大积压队列大小来限制通道和统计信息收集器进程的内存使用情况 。如果积压队列已满,则将删除新的通道和队列统计信息,直到处理完先前的队列统计信息。
统计间隔也可以在运行时更改。这样做不会影响现有的连接,通道或队列。只有新的统计排放实体受到影响。
rabbitmqctl eval 'application:set_env(rabbit, collect_statistics_interval, 60000).'
统计数据库可以重新启动(见上),从而强制释放所有内存。