DBLE是一款基於MyCAT改進的MySQL分庫分表中間件,但是並沒有一個配套的監控軟件。
這裏我分享下我們生產/測試環境在使用的監控方法
需要用到的軟件:
Prometheus、 pushgateway、grafana、【alertmanager可選】 (應該很多公司已經在用這套組件)
下面是我採集dble數據的腳本,主要是通過9066管理端口去抓取數據,然後打點到pushgateway:
#!/bin/bash # 說明: 通過dble管理地址,將dble的基礎數據採集到的,然後發送到 pushgateway 去存儲。然後可以配合grafana來做展示 # 如果系統上沒有nc命令,可以執行 yum install nmap-ncat 來安裝 # PUSHGATEWAY_HOST的地址 PUSHGATEWAY_HOST=' # DBLE管理端口的連接方式 DBLE_USER='man1' DBLE_PASS='123456' DBLE_HOST='127.0.0.1' DBLE_PORT='9066' # 標識DBLE集羣中的編號(相同DBLE_CLUSTER_NAME裏面的DBLE_ID要唯一。用來標識不同DBLE集羣內的dble節點,便於在 pushgateway 和 grafana 裏面識別出這個metrics對應的dble實例) DBLE_CLUSTER_NAME='usercenter' DBLE_ID=3 ############## 下面是具體的採集命令 ################# # 當前dble是否已down (1爲宕機 0爲正常): mysql -u${DBLE_USER} -p${DBLE_PASS} -h ${DBLE_HOST} --port ${DBLE_PORT} 2>/dev/null -BNe "show @@version " dble_down=$? # 當前dble前端的連接數: front_conn=$(mysql -u${DBLE_USER} -p${DBLE_PASS} -h ${DBLE_HOST} --port ${DBLE_PORT} 2>/dev/null -BNe "show @@connection " |grep 8066 | wc -l) # dble和後端的總連接數: backend_conn=$(mysql -u${DBLE_USER} -p${DBLE_PASS} -h ${DBLE_HOST} --port ${DBLE_PORT} 2>/dev/null -BNe "show @@backend " | wc -l) # server status狀態值 server_status=`mysql -u${DBLE_USER} -p${DBLE_PASS} -h ${DBLE_HOST} --port ${DBLE_PORT} 2>/dev/null -BNe "show @@server "` # 已使用堆內存 used_mem=`echo $server_status| awk '{print $4}'` # 總共的堆內存 total_mem=`echo $server_status| awk '{print $5}'` # 最大可用堆內存 max_mem=`echo $server_status| awk '{print $6}'` ## 輸出到 pushgateway cat <<EOF | curl --data-binary @- ${PUSHGATEWAY_HOST} # TYPE dble_down gauge dble_down{cluster="${DBLE_CLUSTER_NAME}", instance="dble${DBLE_ID}"} ${dble_down} # TYPE front_conn gauge dble_front_conn{cluster="${DBLE_CLUSTER_NAME}", instance="dble${DBLE_ID}"} ${front_conn} # TYPE backend_conn gauge dble_backend_conn{cluster="${DBLE_CLUSTER_NAME}", instance="dble${DBLE_ID}"} ${backend_conn} # TYPE used_mem gauge dble_used_mem{cluster="${DBLE_CLUSTER_NAME}", instance="dble${DBLE_ID}"} ${used_mem} # TYPE total_mem gauge dble_total_mem{cluster="${DBLE_CLUSTER_NAME}", instance="dble${DBLE_ID}"} ${total_mem} # TYPE max_mem gauge dble_max_mem{cluster="${DBLE_CLUSTER_NAME}", instance="dble${DBLE_ID}"} ${max_mem} EOF
然後,將上面這個腳本加到DBLE所在服務器的cronjob裏面,每分鐘採樣一次
/1 * * * sh /root/scripts/stats.sh >/dev/null 2>&1
下圖,是我在測試環境截的圖
抓取到數據後,我們就可以在Prometheus的web界面裏面寫表達式計算metrics了
下圖是我直接在grafana裏面畫的圖
涉及到的表達式如下:
dble_down{cluster='usercenter',instance='dble3'} dble_front_conn{cluster='usercenter',instance='dble3'} dble_backend_conn{cluster='usercenter',instance='dble3'} dble_max_mem{cluster='usercenter',instance='dble3'} dble_used_mem{cluster='usercenter',instance='dble3'} dble_total_mem{cluster='usercenter',instance='dble3'}
另外, 我們有多個dble實例的話,建議grafana面板上通過動態獲取的方法,這樣就不用畫多個dashboard了。具體操作方法,可以參考我之前寫的https://blog.51cto.com/lee90/2071711
除此之外, DBLE所在主機的CPU 內存 磁盤之類的基礎監控,我們可以使用node_exporter來採集,也是必須採集的指標。