介紹
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).'
統計數據庫可以重新啟動(見上),從而強制釋放所有內存。