天天看点

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

prometheus 是一套开源的系统监控、报警、时间序列数据库的组合,最初有 soundcloud 开发的,后来随着越来越多公司使用,于是便独立成开源项目。我们常用的 kubernetes 容器集群管理中,通常会搭配 prometheus 一起来进行监控。prometheus 基本原理是通过 http 协议周期性抓取被监控组件的状态,而输出这些被监控的组件的 http 接口为 exporter,现在各个公司常用的 exporter 都已经提供了,可以直接安装使用,如 haproxy_exporter、blockbox_exporter、mysqld_exporter、node_exporter 等等,更多支持的组件可查看 这里。

prometheus 官网架构图如下:

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

prometheus 具有以下特点:

是一个时间序列由指标名称和键值对定义的多维数据模型

支持灵活的查询语言

不依赖分布式存储,单个服务器节点就可以

时间序列集合通过 http 上的 pull 模型来进行

支持通过中间网关推送时间

通过服务发现或静态配置来发现目标

支持多种模式的图形和仪表盘

grafana 是一个可视化仪表盘,它拥有美观的图标和布局展示,功能齐全的仪表盘和图形编辑器,默认支持 cloudwatch、graphite、elasticsearch、influxdb、mysql、postgresql、prometheus、opentsdb 等作为数据源。我们可以将 prometheus 抓取的数据,通过 grafana 优美的展示出来,非常直观。

本次演示环境,我是在本机 mac os 上操作,以下是安装的软件及版本:

go: go1.10.3 darwin/amd64

prometheus: 2.3.2.darwin-amd64

node_exporter: 0.16.0.darwin-amd64

mysqld_exporter: 0.11.0.darwin-amd64

grafana: 5.2.2.darwin-amd64

注意:这里 prometheus、node_exporter 和 mysqld_exporter 都是 go 语言开发,其运行环境依赖 go,所以本机需要安装好 go 环境,这里忽略 go 的安装过程,着重介绍下其他几个的安装配置过程。实际应用中,如果运行在 linux 环境下,以上各个软件也要安装系统对应版本。

prometheus 安装方式有多种,可以二进制源码安装、docker 启动安装或源码编译安装。

首先,下载 prometheus 二进制源码安装包,可以访问 prometheus download 页面下载指定版本。

启动 prometheus,使用默认配置文件 prometheus.yml 启动。

此时,prometheus 服务就在本地启动起来了,浏览器访问 http://localhost:9090 访问 web 页面。

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

prometheus 默认提供一些 metric 指标来供我们选择监控,通过地址 http://localhost:9090/metric 可以看到所有指标列表。

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

例如,我们选择了 go_gc_duration_seconds_count 这个监控 go 执行 gc 持续时间秒数指标,点击 “execute” 后,使用默认的 promdash 页面展示,一段时间后,监控结果如下:

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

docker 镜像启动很简单,只需要一条命令即可,使用默认配置的话,可以直接使用如下命令启动。

我们也可以使用自己的 prometheus.yml 配置文件,并且挂载数据目录到主机,来启动镜像。

源码编译安装,我们需要本地有一个运行的 go 环境,而且版本不低于 1.10.x。

现在,prometheus 服务本地已经启动了,接下来,我们需要安装并运行 exporter,它的主要作用是持续输出监控的组件信息并格式化,同时提供 http 接口供 prometheus 服务来抓取。exporter 也是通过 go 语言编写的,prometheus github 已经为我们提供了很多实用的 exporter,直接拿来使用即可。

首先,下载 mysql_exporter 二进制文件到本地。

接着,需要配置要监控的数据库,为 mysql_exporter 创建一个指定账户用来连接数据库(当然,也可以直接用 root 或者其他有权限的账户,不过建议创建一个专有账户)。

然后,需要配置一下数据库连接认证信息并启动 exporter,有两种方式配置:

使用环境变量方式 $ export data_source_name='exporter:password@(localhost:3306)/' $ ./mysqld_exporter

使用配置文件方式

注意:mysqld_exporter 默认使用 ~/.my.cnf 作为数据库认证文件,如果我们指定其他路径文件,需要启动时指定路径,例如:./mysqld_exporter --config.my-cnf="<file_path>/.my.cnf"。

查看日志输出,exporter 启动成功。

此时,本地浏览器访问 http://localhost:9104/metrics 可以看到 mysql 相关的所有监控指标列表。

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

现在,prometheus 和 mysqld_exporter 服务都已经启动起来了,那么接下来就需要将二者关联起来,让 prometheus 来定时抓取 exporter 提供的数据。我们需要修改 prometheus 的配置文件 prometheus.yml 增加 mysql 相关 exporter job。

说明一下:增加了一个 job_name 为 mysql 的任务,targets 为指向 mysqld_exporter 提供的 http 接口服务,labels 为该 job 配置一个标签,方便下边 grafana 页面显示,下边会讲到。

修改完成后,重启 prometheus 服务。此时,我们再次访问 http://localhost:9090/,点击 “status” 下 “targets” 可以查看所有的 targets 了,这里就有默认的 prometheus 和新配置的 mysql 啦!

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

此时,我们就可以在下拉列表中选择 mysql 相关的指标监控了,例如选择 mysql_global_status_uptime 指标,一段时间后,监控页面如下:

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

不过,大家有没有觉得 prometheus 自带的图形并不美观,而且功能单一,此时,grafana 该上台了,我们要使用 grafana 作为 prometheus 的展示仪表盘,功能强大而且界面美观。

grafana 安装也很方便,根据官网文档 grafana install,里面有针对各个系统提供的安装方法。参照 mac 上安装方案,可以采用 homebrew 安装或者二进制源码安装方式。

启动完成后,本地浏览器访问 http://localhost:3000 即可打开 grafana web 页面,使用默认管理员账户: admin 密码:admin 登录并修改初始密码后,即可开始体验 grafana,页面是不是很美观。

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

接下来,我们需要添加一个 prometheus 类型的数据源,将二者关联起来,点击 “add data source” 按钮,填写 prometheus 相关信息,如下:

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

type 处选择 prometheus,url 处填写 prometheus 连接地址,因为我们上边服务安装在本地,所以这里填写 http://localhost:9090,其他默认即可,填写完毕,点击下方 “save & test” 按钮,如果配置成功,会提示 data source is working 消息。

此时,已经添加好了 prometheus 数据源,grafana 默认给该类型监控提供了三个 dashboard,我们可以直接在页面上点击 “import” 即可,此时在 dashboard 页面选择其中的一个类型,就可以看到监控数据图形啦!例如,这里我们选择 prometheus 2.0 stats 类型 dashboard,一段时间后,看到的监控页面如下:

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql
初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

最后,我们需要在 grafana 上添加 mysql prometheus 类型的 dashboard,当然对应的 dashboard json 文件,可以直接拿现成的来用,别人写的比较全面,也比较好。这些 dashboard json 文件可以从 这里 找到,我们可以 clone 到本地,导入到 grafana 里面即可。

这里就是我们需要的 dashboard json 文件,包含 mysql、mongodb、system、pmm 等,可以直接拿来使用。点击 “import” 进入页面后,点击 “upload .json file” 按钮,选择本地 mysql_overview.json 文件,点击 “import” 即可完成导入,

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

此时,我们就可以从页面上直观的看到 prometheus 收集到的 mysql 相关的各个指标监控的,例如:mysql connection、mysql questions、mysql thread cache、mysql network traffic 等等一系列指标。同时,还可以调整查询区间范围,编译每一个指标信息,查看每个指标信息详情,自定义拖拽排版面板等功能,功能很强大。

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql
初试 Prometheus + Grafana 监控系统搭建并监控 Mysql

还记得上边 prometheus 配置文件中的 labels 么,我们配置为 mysql,在这里 grafana 页面上边 host 就自动关联了 mysql,如果没填 labels,这里会显示 localhost:9104,不是很直观的哈!

参考资料

prometheus overview

github mysql exporter

github node exporter

grafana docs

github grafana

grafana dashboards for mysql monitoring using prometheus