今天介绍Prometheus+Grafana打造高逼格监控平台。看看如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控。

其实很早的时候我自己就写过一套这样的系统:n-sentinel 。主要是用Node.js实现的。思路都差不多,总结一下就是下面三点:

  1. 需要在每台需要监控的服务器上启动一个采集状态的程序,对外暴露API接口提供状态数据。
  2. 有一个中央服务,负责收集所有被监控服务器的状态数据,记录并做处理。
  3. 配备一套可视化的展示页面。

我们今天的主角是Prometheus,这是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。特点有:

  • 多维数据模型(时序列数据由metric名和一组key/value组成)
  • 在多维度上灵活的查询语言(PromQl)
  • 不依赖分布式存储,单主节点工作.
  • 通过基于HTTP的pull方式采集时序数据
  • 可以通过push gateway进行时序列数据推送(pushing)
  • 可以通过服务发现或者静态配置去获取要采集的目标服务器
  • 多种可视化图表及仪表盘支持

node_exporter

第一步就是在每台被监控的服务器上安装采集程序。node_exporter就是Prometheus的采集程序。

由于采用Go语言编写,很简单只需要下载、解压、运行就好了。

wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/
	node_exporter-1.0.1.linux-amd64.tar.gz

tar -xzvf node_exporter-1.0.1.linux-amd64.tar.gz
./node_exporter

客户端默认监听9100端口。

Prometheus

Prometheus是服务端程序,负责收集服务器的数据。这个工具是Go语言编写的。部署也简单,下载解压,修改配置文件之后运行即可。

wget https://github.com/prometheus/prometheus/releases/download/v2.24.1/
	prometheus-2.24.1.linux-amd64.tar.gz

tar -xzvf prometheus-2.24.1.linux-amd64.tar.gz

修改配置文件prometheus.yml,简单参考如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# my global config
global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: [ 'localhost:9090' ]

  - job_name: "node"
    static_configs:
      - targets: [ "localhost:9100" ]

运行./prometheus 启动服务,会看到日志中有Server is ready to receive web requests.字样。说明服务启动成功了,它会启动一个后台网页,默认是9090端口,我在浏览中打开会看到一个简易的展示界面。

看一下官方网站给出的Prometheus架构图:

image-20210131202450751

Grafana

Prometheus自带的展示效果比较基础,一般需要借助Grafana这种高大上的dashboard展示工具。

什么是Grafana

Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

  1. 展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
  2. 数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
  3. 通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
  4. 混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
  5. 注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
  6. 过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

下面我们用Docker安装Grafana:

docker run -d -p 3001:3000 --name=grafana544 grafana/grafana

安装成功之后就可以访问Docker所在主机的3001端口,输入admin/admin登录之后重置一个秘密就进入了主界面,接着就配置数据源:

image-20210131221858662

直接选第一项Prometheus,URL配置成主机的IP地址http://x.x.x.x:9090其它都是默认值(因为我们上面所有的工具都安装在一台服务器上,默认都是localhost),点击下面的Save & Test提示成功就好了。

接下来在后面的DashboardsTab页面中import相应的项目:

image-20210131230728005

回到首页点击搜索框,点击对应的监控项目,惊喜就出现了:

image-20210131231214183

更多的数据源接入可以上网找相应的科普文章。

参考:

https://www.cnblogs.com/smallSevens/p/7805842.html

总结

Prometheus收集服务器状态数据功能非常强大;Grafana则是一款开源通用的可视化工具,可以接入非常多的常见数据源,展示效果没得说。

这样的组合绝对算的上豪华,可怜我N年前自己写的监控工具是没法和这个比的,但是自己写也有很大意义的,说不定某个地方就能用上了。

再有一点,Prometheus适合做资源类的使用情况监控;应用日志的收集并不是太合适,日志的收集推荐使用ELK。

(完)