使用Prometheus監控DBLE

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

下圖,是我在測試環境截的圖

image.png

抓取到數據後,我們就可以在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來採集,也是必須採集的指標。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章