1.蒐集日誌資訊
透過ELK蒐集叢集節點中的日誌資訊,對於ERROR資訊,進行郵件告知相關的維護人員及時進行處理。
2.監控硬體資源及程序
公司已經有監控系統,直接將如下磁碟、記憶體及埠、URL資訊在監控中進行配置即可。
磁碟
監控每臺伺服器的磁碟空間,重點監控如下兩個目錄:
log目錄
即/app/log 目錄。日誌檔案可以透過定期壓縮清理,保證控制在一定的大小內。
data目錄
即/app/data 目錄,這個目錄主要堆積的資料還是未消費的已經持久化到磁碟上的訊息。這個需要及時對訊息進行監控。
記憶體
監控伺服器的記憶體使用情況,當達到閥值的情況下,進行提前告警。
監控程序
主要是監控5672埠,及http://xxxx:15672訪問地址
3.透過rest介面進行監控
依託於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介面地址為:
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}]
4.監聽堵塞訊息
可以在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監控詳解”的介紹
最新評論