使用Prometheus監控DBLE

  • 2019 年 10 月 4 日
  • 筆記

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來採集,也是必須採集的指標。