问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用node_exporter、Prometheus和Grafana实现主机监控

创作时间:
作者:
@小白创作中心

使用node_exporter、Prometheus和Grafana实现主机监控

引用
1
来源
1.
https://developer.aliyun.com/article/1576724

本文将详细介绍如何使用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*:磁盘IO
  • node_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这样的组合工具可以提供丰富的监控数据,但这些数据本质上都是被监控者可以提供的常见计数器数据。了解这些数据的含义及其变化对性能测试和分析的影响,仍然是进行系统监控的核心。

参考资料:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号