在对数据库做完压测之后,接下来就要针对数据库搭建一个统一的可视化监控平台,这个活儿往往是DBA团队负责的,但是不管如何,我们这里也要对这个数据库可视化监控的技术有一定的了解。一般用Prometheus+Grafana来搭建
Prometheus和Grafana是什么
Prometheus其实就是一个监控数据采集和存储系统。它可以利用监控采集组件(比如mysql_exporter)从你指定的MySQL数据库中采集它需要的监控系统,然后它自己有一个时序数据库,它会把采集到的监控数据放入自己的时序数据库中,其实本质就是存储在磁盘文件里。
我们采集到了MySQL的监控数据还不够,还必须展示出来,这时就需要Grafana了。Grafana就是一个可视化的监控数据展示系统,它可以把Prometheus采集到的大量的MySQL监控数据展示成各种报表,让我们可以直观看到MySQL的监控情况。
其实不光是对数据库监控可以采用Prometheus+Grafana的组合,对你开发出来的各种Java系统、中间件系统,都可以使用这套组合去进行可视化的监控,无非就是让Prometheus去采集你的监控数据,然后用Grafana展示成报表而已。
安装和启动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性能、连接数量等。
解压:
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
然后修改prometheus的配置文件,其实主要是在scrape_configs下面加入一大段自定义的配置,因为他需要去采集MySQL数据库本身和MySQL所在机器的监控数据:
$ vi prometheus.yml
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
先下载,接着执行命令:
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 &
之后就可以通过浏览器访问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
接着执行一系列的命令去安装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监控仪表盘,等等。
添加监控
添加MySQL机器的监控
如果想要让Prometheus去采集MySQL机器的监控数据(CPU、内存、磁盘、网络,等等),然后让Grafana可以展示出来,那么就必须先添加Prometheus对MySQL机器的监控。
首先必须要在MySQL机器上解压缩和启动node_exporter,启动之后它会自动采集这台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的页面,此时你就可以看到这台机器的相关性能监控了。
添加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的各种监控数据了。