更新時間:2021-09-15 10:58:45 來源:動力節點 瀏覽1812次
Rabbitmq監控是Rabbitmq教程中需要學習的重要的部分,下面小編就來給大家進行詳細介紹。
通過ELK搜集集群節點中的日志信息,對于ERROR信息,進行郵件告知相關的維護人員及時進行處理。
公司已經有監控系統,直接將如下磁盤、內存及端口、URL信息在監控中進行配置即可。
磁盤
監控每臺服務器的磁盤空間,重點監控如下兩個目錄:
log目錄
即/app/log 目錄。日志文件可以通過定期壓縮清理,保證控制在一定的大小內。
data目錄
即/app/data 目錄,這個目錄主要堆積的數據還是未消費的已經持久化到磁盤上的消息。這個需要及時對消息進行監控。
內存
監控服務器的內存使用情況,當達到閥值的情況下,進行提前告警。
監控進程
主要是監控5672端口,及http://xxxx:15672訪問地址
依托于rabbitmq提供的強大的rest api,我們可以很方便的獲取到集群中的各個節點信息,從而根據具體的需求,進行全方位的監控。
在公司已經采購的監控系統和自行搭建的zabbix監控中,都能夠很好的支持rest api。可以通過監控系統對json結果的解析,達到告警的目的。
消息監控
消息監控可以通過定時調用rest接口,獲取隊列的未消費數量,對超過一定數量的mq消息,提供短信郵件告警;
獲取消息的rest接口地址為:
http://xxx:15672/api/queues
消息內容示例(只截取部分內容):
[{
"memory": 55568,
...
"messages": 21, #消息總數量
...
"messages_ready": 21, #待處理消息數量
...
"messages_unacknowledged": 0, #未確認消息數量
...
"idle_since": "2018-07-02 14:02:04",
"consumer_utilisation": null,
"policy": "hao123",
"exclusive_consumer_tag": null,
"consumers": 0,
"slave_nodes": ["rabbit@rabbitmqstg03", "rabbit@rabbitmqstg04"],
"synchronised_slave_nodes": ["rabbit@rabbitmqstg03", "rabbit@rabbitmqstg04"],
"recoverable_slaves": ["rabbit@rabbitmqstg03", "rabbit@rabbitmqstg04"],
"state": "running",
...
"message_bytes_ram": 13086, #消息占用的內存大小
"message_bytes_persistent": 2816, #消息占用的磁盤大小
...
"name": "ha.queue_123",
"vhost": "/123",
"durable": true,
"auto_delete": false,
"exclusive": false,
"arguments": {},
"node": "rabbit@rabbitmqstg02"
}]
文件描述符、socket文件描述符、erlang進程監控
通過rest接口獲取到每個集群中的節點信息,通過實際值和閥值的大小,及時的進行告警,這一步告警方式,可以根據嚴重程度,依次郵件、微信、短信通知到相關的人員。
獲取節點的rest接口地址為:
http://xxx:15672/api/nodes
集群節點內容示例(只截取部分內容):
[{
"cluster_links": [{
"peer_addr": "10.1.110.39",
"peer_port": 51715,
"sock_addr": "10.1.110.37",
"sock_port": 25672,
"stats": {...},
"name": "rabbit@rabbitmqstg04"
}, ...],
"disk_free": 28271468544, # 磁盤使用量
"fd_used": 58, # 文件描述符使用數
...
"mem_used": 58362720, # 內存使用量
"mnesia_disk_tx_count": 7,
"mnesia_ram_tx_count": 13108,
"proc_used": 225, # erlang進程使用數
"sockets_used": 0, # socket描述符已經使用數
"fd_total": 65536, # 文件描述符總數
"sockets_total": 58890, # socket描述符總數
"mem_limit": 1607527628, # 內存閥值
"disk_free_limit": 10000000000, # 磁盤閥值
"proc_total": 1048576, # erlang進程總數
...
"log_file": "/app/rabbitmq/rabbitmq_server-3.6.1/log/rabbitmq/[email protected]",
"sasl_log_file": "/app/rabbitmq/rabbitmq_server-3.6.1/log/rabbitmq/[email protected]",
"db_dir": "/app/rabbitmq/rabbitmq_server-3.6.1/data/rabbit@rabbitmqstg02",
"config_files": ["/app/rabbitmq/rabbitmq_server-3.6.1/etc/rabbitmq/rabbitmq.config"],
...
"name": "rabbit@rabbitmqstg02",
"type": "disc",
"running": true
}]
可以在MQ中專門創建一個監控的隊列,定時的發送和消費隊列中的消息,并且通過的如下的代碼去監控隊列是否已經堵塞,如果監聽到隊列已經堵塞,就立即發送告警的短信和郵件。
關于是否需要手動將故障機器剔除集群,這個有待商榷,但是如果要做的話,是可以在這里做到的。
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection();
connection.addBlockedListener(new BlockedListener() {
public void handleBlocked(String reason) throws IOException {
// Connection is now blocked
}
public void handleUnblocked() throws IOException {
// Connection is now unblocked
}
});
以上就是關于“Rabbitmq監控詳解”的介紹,對Java感興趣的朋友可以關注動力節點Java在線學習,里面有很多相關資料文檔可以學習,在Java視頻教程頁面中有入門到精通全套教程能夠免費下載學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習