0. 简介
通常来说,对于一个运行时的复杂系统,如果系统出了问题是很难排查的,为此,我们需要再各种关键点上加上监控,通过监控获取的数据,解决问题。
Prometheus就是这么一款监控系统,其本质上是一个时序数据库
,存储了监控目标系统在各个时间点上的监控数据。其不仅可以用于对于基础设施,如服务器,数据库等,还可以利用其SDK,用于各种自定义的服务的监控。
Grafana是一个监控仪表系统,帮助用户简化监控的复杂度,用户只需要提供监控的数据,其就可生成各种可视化的仪表,其支持多种数据库作为查询数据库,不过使用最多的还是Prometheus。
1. 监控系统组成
Prometheus生态系统包含多个组件,其中许多是可选的:
- 用于采集和存取时间序列数据的 Prometheus server
- 用于监测应用的客户端库
- 用于支持短期的作业的 push gateway
Exporter
,不同的监控需求由不同的exporter
处理,如node-exporter
、mysql-exporter
等- 用于处理告警的 alertmanager
- 多种工具支持
Prometheus大多数组件使用 Go 语言编写,易于构建和部署为二进制可执行文件。
Prometheus开源社区提供了很多的工具,包括各种exporter
以及不同语言的client
,在链接。
总结起来,我们需要搭建的Prometheus+Grafana监控系统,其基本的架构图如下所示:Exporter监控工具负责获取数据;Prometheus收集存储数据,提供对外的查询接口;Grafana作为仪表盘,负责更友好地展示监控数据。
下面,我们以监控一台Linux服务器为例子,搭建一个系统节点的各项指标的监控系统。
2. Prometheus搭建
2.1 Prometheus安装部署
Prometheus支持多种操作系统,在产品官网上提供了各个系统的二进制文件进行下载,可以下载tar
包进行安装部署。
当然,其也可以通过docker等容器进行部署,下面介绍其作为docker容器的部署。
首先我们可以将其配置文件prometheus.yml
文件保存在本地目录,启动时通过-v
参数进行挂载。
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
然后通过docker run
命令运行:
$ sudo docker run --name prometheus -d -p 9090:9090 -v /data/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
运行成功后,通过浏览器,访问http://$IP:9090
可看到系统界面。
2.2 配置介绍
Prometheus有很多的配置,下面我们介绍这里用得上的两种,其余的可以在网上资料中学习。
global
用于定义prometheus的全局配置。
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_timeout: 10s
scrape_interval
:指定从监控端抓取数据的时间间隔(默认为15s),如果在特定的job中指定了时间间隔指标,则该job中以特定的时间间隔为准;
evaluation_interval
:用于指定检测告警规则的时间间隔,每15s重新检测告警规则,并对变更进行更新;
scrape_timeout
:定义拉取实例指标的超时时间。
scrape_configs
用于指定Prometheus抓取的目标信息。
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
Prometheus对于监控数据的抓取,通过配置job的方式进行操作。在job里面指定了一组目标抓取所必须的信息,例如目标地址、端口、标签和验证信息等。抓取的时间间隔使用上面global模块配置的时间,也可在该job中单独指定。 在实际环境中,通常会根据抓取目标的类型不同,如Mysql、mongodb、kafka等,分成多个job来进行。
默认配置只有一个监控目标,即prometheus server
本身,端口为9090
,如果不指定路径,默认会从/metrics
路径抓取。
2.3 node-exporter
node-exporter
使用Go语言编写,它主要用来监控主机系统的各项性能参数,可收集各种主机指标的库,还提供了textfile
功能,用于自定义指标。
官方并不建议通过Docker的方式部署node-exporter
,因为它需要访问主机系统,通过docker部署的方式,需要把任何非根安装点都绑定到容器中,并通过--path.rootfs
参数指定。所以我们采用二进制安装的方式。
下载地址是下载。
$ wget --no-check-certificate https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz # 下载
$ tar -xvf node_exporter-1.6.0.linux-amd64.tar.gz # 解压
$ cd node_exporter-1.6.0.linux-amd64/
$ ./node_exporter & # 后台运行
通过以上操作,然后在http://ip:9100/metrics
就可以看到node-exporter
获取到的指标。
如果想让Prometheus抓取到节点的指标,还需要在上一节提到的配置中加入节点的配置:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'xxx'
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
follow_redirects: true
static_configs:
- targets:
- x.x.x.x:9100
这样,就可以收集到x.x.x.x
这个主机的节点信息,在Prometheus的页面也可以查到:
3. Grafana可视化
3.1 Grafana安装
和Prometheus一样,Grafana也可以采用Docker安装,其安装指令如下:
sudo docker run --name=grafana -d -p 3000:3000 grafana/grafana
然后在http://ip:3000
就可以访问,默认账密都是admin
。
3.2 添加数据源
选择Administration -> Data Sources -> Add data source
,选择Prometheus作为数据源。
填写数据源名称与URL,完成后点击“save&test”按键,如果正常会收到Success提示。
3.3 下载Dashboard配置
虽然可以自定义面板,但是对于一些常见数据的监控,开源社区都有着较为完善的Dashboard模板可以下载即用,极大提升。官方搜索链接,当我们在搜索栏搜索node
时,会出现很多Dashboard,选择自己想要的仪表盘。
这时候选择Copy ID to clipboard
:
然后去Grafana服务上选择Dashboards -> Import dashboard
,粘贴ID,点击load,就可以得到想要的仪表盘了。
如下:
当然,也可以选择下载json配置然后上传。
4. 小结
以上,一个监控系统就大致搭建完成了,有关Prometheus的一些详细的配置以及细节,我们留待后面详细介绍。
5. 参考文档
Prometheus 中文文档
Prometheus 主机监控
一文搞懂Prometheus、Grafana(含腾讯云上实战)