使用node_exporter、Prometheus和Grafana实现主机监控
使用node_exporter、Prometheus和Grafana实现主机监控
本文将详细介绍如何使用node_exporter、Prometheus和Grafana实现主机监控。通过本文,你将了解node_exporter的功能、安装方法、监控指标以及如何配置Prometheus和使用PromQL查询监控数据。最后,你还将学习如何使用Grafana进行数据可视化。
一、概述
在Prometheus的架构设计中,Prometheus Server主要负责数据的收集、存储和提供数据查询支持,而监控目标的数据采集则通过Exporter实现。Exporter可以是一个独立运行的程序,也可以是直接内置在监控目标中,只要能够向Prometheus提供标准格式的监控样本数据即可。
为了采集主机的运行指标(如CPU、内存、磁盘等信息),我们可以使用node_exporter。node_exporter由Prometheus官方提供和维护,是监控主机硬件和系统指标的重要工具。
二、功能
node_exporter主要用于提供*NIX内核的硬件和系统指标。对于不同的操作系统,node_exporter的支持情况也不同:
- diskstats:支持Darwin和Linux
- cpu:支持Darwin、Dragonfly、FreeBSD、Linux和Solaris等
可以通过--collectors.enabled
参数指定node_exporter收集的功能模块,或者用--no-collector
指定不需要的模块。如果不指定,将使用默认配置。
三、安装
1. 二进制包
node_exporter采用Golang编写,不存在任何第三方依赖,只需要下载并解压即可运行。可以从Prometheus官网获取最新版本的二进制包。
curl -OL https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.darwin-amd64.tar.gz
tar -xzf node_exporter-1.1.2.darwin-amd64.tar.gz
cd node_exporter-1.1.2.darwin-amd64
cp node_exporter-1.1.2.darwin-amd64/node_exporter /usr/local/bin/
node_exporter
启动成功后,可以通过访问http://localhost:9100/
来验证安装是否成功。
2. Docker容器
使用Docker部署node_exporter也非常简单:
docker run -d \
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter \
--path.rootfs /host
3. Kubernetes Operator
对于Kubernetes集群,可以使用Kubernetes Operator进行部署,具体参考kube-prometheus部署文档。
四、node_exporter监控指标
部署成功后,可以通过访问http://${IP}:9100/metrics
查看当前node_exporter获取到的主机监控数据。每个监控指标之前都会有一段类似于如下形式的信息:
# HELP node_disk_io_time_seconds_total Total seconds spent doing I/Os.
# TYPE node_disk_io_time_seconds_total counter
node_disk_io_time_seconds_total{device="dm-0"} 0.321
node_disk_io_time_seconds_total{device="dm-1"} 13765.443000000001
node_disk_io_time_seconds_total{device="vda"} 317.065
其中HELP
用于解释当前指标的含义,TYPE
则说明当前指标的数据类型。常见的监控指标包括:
node_boot_time_seconds
:系统启动时间node_cpu_seconds_total
:系统CPU使用量node_disk*
:磁盘IOnode_filesystem*
:文件系统用量node_load1
:系统负载node_memory*
:内存使用量node_network*
:网络带宽node_time
:当前系统时间go_*
:node exporter中go相关指标process_*
:node exporter自身进程相关运行指标
五、配置Prometheus
为了让Prometheus Server能够从node exporter获取监控数据,需要在Prometheus配置文件中添加相应的配置:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 采集node exporter监控数据
- job_name: 'node'
static_configs:
- targets: ['172.16.106.84:9100']
重新启动Prometheus Server后,可以通过访问http://${IP}:9090/
并输入up
来验证配置是否成功。
六、使用PromQL查询监控数据
Prometheus UI提供了强大的PromQL查询语言,可以方便地查询和分析监控数据。例如,查询主机负载变化情况可以使用关键字node_load1
:
使用rate()
函数可以计算单位时间内样本数据的变化情况,从而近似计算CPU利用率:
$rate(node_cpu_seconds_total[2m])$
如果要忽略具体的CPU编号,可以使用without
表达式:
$avg without(cpu) (rate(node_cpu_seconds_total[2m]))$
七、数据可视化
为了构建长期使用的监控数据可视化面板,可以使用Grafana。Grafana是一个开源的可视化平台,提供了对Prometheus的完整支持。
二进制包安装
wget https://dl.grafana.com/oss/release/grafana-7.4.5.linux-amd64.tar.gz
tar -zxvf grafana-7.4.5.linux-amd64.tar.gz
Docker安装
docker run -d --name=grafana -p 3000:3000 grafana/grafana
访问http://localhost:3000
并使用默认账户admin/admin
登录后,可以添加Prometheus作为数据源:
在Grafana中,可以通过grafana.com/dashboards网站找到大量可直接使用的Dashboard模板。例如,选择热门模板(ID:8919)可以得到如下展示效果:
八、扩展知识
1. 推荐的exporter
node_exporter是Prometheus官方推荐的exporter,类似的还有:
- 官方推荐的exporter都在GitHub下
- 社区也提供了大量第三方的exporter
2. 注意版本
由于node_exporter是一个较老的组件,一些最佳实践可能没有合并进去。建议使用较新版本(截至2021年3月,最新版本为1.1.2)。对于版本兼容性问题,可以采用以下解决方案:
- 在机器上启动两个版本的node-exporter,让Prometheus同时采集
- 使用指标转换器将旧指标名称转换为新指标
- 选择同时支持两套指标的Grafana dashboard模板
3. 实现原理
node-exporter的主函数主要依赖于Prometheus的官方Go库client_golang
,该库提供了基础的数据类型和方法,包括:
Counter
:收集事件次数等单调递增的数据Gauge
:收集当前的状态,比如数据库连接数Histogram
:收集随机正态分布数据,比如响应延迟Summary
:收集随机正态分布数据
详细实现可以参考Prometheus源码分析。
九、小结
虽然Prometheus+Grafana+node_exporter这样的组合工具可以提供丰富的监控数据,但这些数据本质上都是被监控者可以提供的常见计数器数据。了解这些数据的含义及其变化对性能测试和分析的影响,仍然是进行系统监控的核心。
参考资料:
- [1]:http://www.xuyasong.com/?p=1539
- [2]:《性能测试实战30讲》