公司目前也有一套监控系统,但由于监控系统的性能问题及功能扩展性问题等等导致监控系统后端急需进行一次大的重构;采用的是C++写成的探针用来采集各个主机硬件信息和组件的业务信息。前端采用的是基于electron和vue搭建的跨平台PC客户端监控系统,其实际是由js实现的前端项目,因为我们业务数据过大,对后端和前端都造成的很大的困扰,因此准备着手开发一套新的监控系统。
新的监控系统我们选择了Prometheus+Grafana这样的组合方式,后端部分一部分是go语言写的探针采集主机信息的功能,另一部分是原来的C++写的探针采集的业务信息。go探针采集的信息通过Prometheus将数据发送给一个中间件websever,业务信息也是发送到中间件websever中。再通过websever与前端进行交互,Grafana将嵌入到前端客户端当中。
进行一段时间研究后,发现Prometheus+Grafana还是可以的。这里就主要记录一下搭建的过程。
概述
Prometheus是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。
- 多维数据模型(时序列数据由metric名和一组key/value组成)
- 在多维度上灵活的查询语言(PromQl)
- 不依赖分布式存储,单主节点工作.
- 通过基于HTTP的pull方式采集时序数据
- 可以通过push gateway进行时序列数据推送(pushing)
- 可以通过服务发现或者静态配置去获取要采集的目标服务器
- 多种可视化图表及仪表盘支持
Prometheus通过安装在远程机器上的exporter来收集监控数据,后面我们将使用到node_exporter收集系统数据。
架构
Grafana 是一个开箱即用的可视化工具,具有功能齐全的度量仪表盘和图形编辑器,有灵活丰富的图形化选项,可以混合多种风格,支持多个数据源特点。
架构
软件安装
Prometheus
官网下载(https://prometheus.io/),支持Linux、Mac、Windows系统,很好很强大。我这里安装过Centos和Mac,这里的实例以Mac为准。
Mac下载的发行版为darwin版;
-
下载下来解压缩就好,我得到的版本(2.0.0)内容如下:
-
目录下的prometheus可以直接启动
-
启动成功以后我们可以通过Prometheus内置了web界面访问,http://ip:9090 ,如果出现以下界面,说明配置成功
安装exporter
(一)下载并解压node_exporter:
#下载
wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.15.0.linux-amd64.tar.gz -O node_exporter-0.15.0.linux-amd64.tar.gz
# 可自定义解压目录
tar -xvf node_exporter-0.15.0.linux-amd64.tar.gz
运行node_exporter:
## 后台运行
./node_exporter &
(二)prometheus可以理解为一个数据库+数据抓取工具,工具从各处抓来统一的数据,放入prometheus这一个时间序列数据库中。那如何保证各处的数据格式是统一的呢?就是通过这个exporter。exporter也是用GO写的程序,它开放一个http接口,对外提供格式化的数据。所以在不同的环境下,需要编写不同的exporter。好在已经有很多写好的exporter,我们可以直接使用,(本句是一句废话为了更好的排版显示)(https://github.com/prometheus这里可以找到很多exporter)我们这里直接使用mysqld_exporter(prometheus.io/download/#mysqld_exporter)。当然也要下载对应系统的版本。解压后的内容如下:
这里的mysqld_exporter是启动文件,.my.cnf是配置文件。想要正确的导出mysql的状态数据,必须在配置文件中正确的配置mysql的连接信息。我的配置如下:
配置好了,就可以启动了。成功如下所示:
通过localhost:9104,就可以看到exporter导出的数据了:
在Prometheus中配置mysqld_exporter
exporter启动了,需要在Prometheus中正确的配置。修改prometheus目录中的prometheus.yml,增加配置如下:
global:
scrape_interval: 15s
evaluation_interval: 15s
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux1
static_configs:
- targets: ['192.168.1.120:9100']
labels:
instance: sys1
- job_name: linux2
static_configs:
- targets: ['192.168.1.130:9100']
labels:
instance: sys2
重启prometheus,点击导航栏中的status->targets可以看到,mysql的exporter已经集成进来了。
至此,prometheus这边的搭建基本完成了。
安装Grafana
Grafana官网(https://grafana.com/),上面有各个系统安装的步骤,我的mac是直接通过brew安装的(如果你的brew太慢,可以换成国内的源试一下)。安装后用brew services start grafana启动即可。启动后,即可通过http://127.0.0.1:3000/来访问了(默认账号密码是admin/admin)。进来之后应该看到这个页面:
首先,你要添加一个数据源,将Grafana和Prometheus关联起来。点击Add data source,如下填写数据保存即可:
看到如下的提示,说明你的prometheus工作是正常的:
接着回到首页,你需要添加一个dashboard,如下图进入dashboard导入页面:
这里你需要从https://github.com/percona/grafana-dashboards项目中的dashboards下载MySQL_Overview.json,然后通过上面页面的Upload .json File按钮上传上去,导入即可。
导入成功后,你将看到监控页面,大功告成!!!