首頁>技術>

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監控詳解”的介紹

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • golang2021資料格式(85)指標的指標