一、生产环境的数据库可不能裸奔啊!
通过数据库的压测,你应该心里非常有数,一台什么样配置的机器,部署了一个数据库后,利用sysbench构造了多少个表和数据量,然后模拟了多少个线程压测的时候,机器的各项硬件负载在可以接受的范围内时,数据库的QPS和TPS可压测到多高。
这时大致就明白数据库在高峰时期最多可让他承受多少QPS和TPS了。
需要对线上系统进行完善的监控,不光是对Java系统进行监控,还得对数据库进行监控,包括对CPU、内存、网络、磁盘IO、慢查询、QPS、TPS的监控。
因为如果不对数据库做监控,有可能数据库CPU负载已很高或磁盘IO已经达极限了都不知道,导致数据库突然挂了都没反应过来!
所以需要搭建生产环境数据库的可视化监控平台,基于Prometheus+Grafana来搭建。
二、简单介绍一下Prometheus和Grafana是什么
先给简单介绍一下Prometheus和Grafana分别是什么。
Prometheus就是个监控数据采集和存储系统,他可利用监控数据采集组件(如mysql_exporter)从指定MySQL数据库中采集需要的监控数据,然后他自己有个时序数据库,把采集到的监控数据放入自己的时序数据库中,其实本质就是存储在磁盘文件里。
采集到了MySQL的监控数据还不够,现在还要去看这些数据组成的一些报表,所以就要用Grafana,Grafana就是一个可视化的监控数据展示系统,他可把Prometheus采集到的大量的MySQL监控数据展示成各种精美的报表,可直观的看到MySQL的监控情况。
其实不光是对数据库监控可采用Prometheus+Grafana组合,对各种Java系统、中间件系统,都可用这套组合去可视化的监控,让Prometheus去采集你的监控数据,然后用Grafana展示成报表而已。
三、安装和启动Prometheus
首先需下载3个压缩包,在下面链接:http://cactifans.hi-www.com/prometheus/
大家可下载到下面两个压缩包,这里prometheus是用来部署监控系统自己的,然后node_exporter是用来采集MySQL数据库所在机器的CPU、内存、网络、磁盘之类的监控数据的:
prometheus-2.1.0.linux-amd64.tar.gz
node_exporter-0.15.2.linux-amd64.tar.gz
接着通过下面的链接下载第三个压缩包:mysqld_exporter-0.10.0.linux-amd64.tar.gz,这个mysqld_exporter就是用来采集MySQL数据库自己的一些监控数据的,如SQL性能、连接数量之类:
https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz
接着解压缩上面的几个包,参照如下的命令:
mkdir /data
mkdir /root
tar xvf prometheus-2.1.0.linux-amd64.tar -C /data
tar xf node_exporter-0.15.2.linux-amd64.tar -C /root
tar xf mysqld_exporter-0.10.0.linux-amd64.tar.gz -C /root
cd /data
mv prometheus-2.1.0.linux-amd64/ prometheus
cd /prometheus
vi prometheus.yml
,接下来修改prometheus配置文件,其实主要是在scrape_configs下加入一大段自定义配置,因为他要去采集MySQL数据库本身和MySQL所在机器的监控数据:
scrape_configs:
- file_sd_configs:
-files:
- host.yml
job_name: Host
metrics_path: /metrics
relabel_configs:
- source_labels: [__address__]
regex: (.*)
target_label: instance
replacement: $1
- source_labels: [__address__]
regex: (.*)
target_label: __address__
replacement: $1:9100
- file_sd_configs:
- files:
- mysql.yml
job_name: MySQL
metrics_path: /metrics
relabel_configs:
- source_labels: [__address__]
regex: (.*)
target_label: instance
replacement: $1
- source_labels: [__address__]
regex: (.*)
target_label: __address__
replacement: $1:9104
- job_name: prometheus
static_configs:
- targets:
- localhost: 9090
上面配置文件写好后,就可启动Prometheus,不过大家仔细看几遍上面的配置信息,因为在写文章时是直接手敲出来的,可能有少数配置错误
接着必须要在/data/prometheus目录中,去执行启动命令:
/data/prometheus/prometheus --storage.tsdb.retention=30d &
这里的30d是说监控数据保留30天。启动后,就可在浏览器中访问9090端口号去查看prometheus主页。
四、部署Grafana
首先要从下面的地址下载grafana-4.6.3.linux-x64.tar.gz,然后一步步执行下面命令,完成启动。
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.3.linux-x64.tar.gz
tar xf grafana-4.6.3.linux-x64.tar.gz -C /data/prometheus
cd /data/prometheus
mv grafana-4.6.3 grafana
cd /data/prometheus/grafana
./bin/grafana-server &
完成了grafana启动,然后可通过浏览器访问3000端口,默认用户名和密码是admin/admin。接着在Grafana左侧菜单栏里有个Data Sources,点击里面的一个按钮是Add data source,添加一个数据源。
然后在界面里输入数据源的名字是Prometheus,类型是Prometheus,HTTP URL地址是http://127.0.0.1:9090,其他的都用默认的配置就行了,接下来Grafana会自动从Prometheus里获取监控数据和展示了。
接着需安装Grafana的仪表盘组件,首先需下载 grafana-dashboards-1.6.1.tar.gz ,用如下的链接即可:https://github.com/percona/grafana-dashboards/archive/v1.6.1.tar.gz。
接着执行一系列的命令去安装grafana-dashboard组件。
tar xvf grafana-dashboards-1.6.1.tar.gz
cd grafana-dashboards-1.6.1
updatedb
locate json |grep dashboards/
这时会看到一大堆json文件,就是各种不同的仪表盘的json配置文件,可把这些json配置文件通过WinSCP之类的工具从linux机器上拖到 windows电脑,通过浏览器上传他们。
接着在grafana页面中,看到最上面有个Home按钮,点击进入一个界面,会看到个Import Dashboard按钮,就是可导入一些仪表盘,这时就是要导入刚才看到的一大堆的json文件。
点击Upload json file按钮,会出现一个界面上传一个个json文件,然后就依次上传,接着grafana会出现一大堆仪表盘,如机器的CPU使用率仪表盘,磁盘性能仪表盘,磁盘空间仪表盘,MySQL监控仪表盘等等。
2、添加MySQL机器的监控
首先如果想要让Prometheus采集MySQL机器监控数据(CPU、内存、磁盘、网络,等等),然后让Grafana可以展示出来,那就必须先添加Prometheus对MySQL机器的监控。
首先要在MySQL机器上解压缩和启动node_exporter,启动后是个linux进程,他会自动采集这台linux机器上的CPU、磁盘、内存、网络之类的各种监控数据。
tar xf node_exporter-0.15.2.linux-amd64.tar
mv node_exporter-0.15.2.linux-amd64 node_exporter
cd node_exporter
nohup ./node_exporter &
到这一步为止,在MySQL所在的机器上启动了一个node_exporter,他会自动采集这台机器的CPU、磁盘、内存、网络的监控数据,但此时还不够,因为Prometheus上还没加入对这台机器的监控。
之前在Prometheus的yml配置文件中,已定义了个host监控项,他就是用来监控机器的,他的配置文件是host.yml,此时可编辑下该 host.yml配置文件,加入mysql所在机器的地址就可以了
# vi host.yml
- labels:
service: test
targets:
- 127.0.0.1
接着Prometheus会跟MySQL机器上部署的node_exporter通信,获取到这台机器的监控数据,写入自己的时序数据库中存储。接着就可打开Grafana页面,此时就可以看到这台机器的相关性能监控了。
3、添加MySQL数据库的监控
接着同样需在MySQL所在机器上再启动个mysqld_exporter组件,他负责去采集MySQL数据库自己的一些监控数据,看下面的指令就可以了。
tar xf mysqld_exporter-0.10.0.linux-amd64.tar
mv mysqld_exporter-0.10.0.linux-amd64 mysqld_exporter
接着需配置些环境变量,去设置mysqld_exporter要监控的数据库的地址信息,看下面配置了账号、密码及地址和端口号
export DATA_SOURCE_NAME='root:root@(127.0.0.1:3306)/'
echo "export DATA_SOURCE_NAME='root:root@(127.0.0.1:3306)/'" >> /etc/profile
接着启动mysqld_exporter
cd mysqld_exporter
nohup ./mysqld_exporter --collect.info_schema.processlist --collect.info_schema.innodb_tablespaces --collect.info_schema.innodb_metrics --collect.perf_schema.tableiowaits --collect.perf_schema.indexiowaits --collect.perf_schema.tablelocks --collect.engine_innodb_status --collect.perf_schema.file_events --collect.info_schema.processlist --collect.binlog_size --collect.info_schema.clientstats --collect.perf_schema.eventswaits &
上面的启动命令指定了大量的选项去开启一些监控的采集,这些命令也都是手敲的,因为目前写作环境的一些不便利的因素,所以只能是如此。
接着mysqld_exporter进程会自动采集MySQL的监控数据,然后还需要在Prometheus里配置下他跟mysqld_exporter通信获取数据及存储,然后Grafana才能看到对应报表。
# vi /data/prometheus/mysql.yml
- labels:
service: mysql_test
targets:
- 127.0.0.1
接着在Grafana中就可以看到MySQL的各种监控数据了。