使用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来采集,也是必须采集的指标。