Prometheus+Node Exporter+Grafana 实现 Linux 主机全程监控可视化
1、Exporter介绍
所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下图所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:

从Exporter的来源上来讲,主要分为两类:分别是社区提供的和用户自定义的,分别介绍如下:
(1)、社区提供的
Prometheus社区提供了丰富的Exporter的实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下面列举一些社区中常用的Exporter,如下表所示:
下表是Prometheus常见的Exporter实现
|
分类 |
Exporter名称 |
|
硬件 |
Node Exporter、IPMI Exporter、IoT Edison Exporter |
|
存储 |
HDFS Exporter、Ceph Exporter |
|
HTTP服务 |
HAProxy Exporter、Nginx Exporter、Apache Exporter |
|
日志 |
Fluentd Exporter、Grok Exporter |
|
监控系统 |
Nagios Exporter、SNMP Exporter、Graphite Exporter |
|
消息队列 |
Kafka Exporter, NSQ Exporter, RabbitMQ Exporter |
|
API服务 |
GitHub Exporter、Docker Cloud Exporter、AWS ECS Exporter |
(2)、用户自定义的
我们除了可以直接使用社区提供的Exporter以外,还可以基于Prometheus提供的Client Library创建适合自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持:Python 、Go、Java/Scala、Ruby等。同时还有第三方实现的如:Bash、C++、Lua、Node.js、PHP、Rust等。
官方推荐的Exporter列表:https://prometheus.io/docs/instrumenting/exporters/
2、Node exporte介绍
Node exporte主要用于采集被监控主机上的cpu负载,内存的使用情况,网络等数据,并上报数据给Prometheus server。Node_exporter 其实是一个以http_server方式运行在后台,并且持续不断采集 Linux系统中各种操作系统本身相关的监控参数的程序,其采集量是很快很全的,默认的采集项目就远超过了我们的实际需求。
从Prometheus官网https://prometheus.io/download/ 下载node_exporter,这里我们下载的版本是node_exporter-1.5.0.linux-amd64.tar.gz ,下载之后解压缩然后直接运行即可。
node_exporter的安装、运行非常简单,过程如下所示:
[root@localhost ~]# tar zxvf node_exporter-1.5.0.linux-amd64.tar.gz
[root@localhost ~]# mv node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter
[root@localhost ~]# cd /usr/local/node_exporter
[root@localhost node_exporter]# nohup ./node_exporter &
运行起来以后 我们使用“netstats -tnlp”命令可以来看下 node_exporter进程的状态
![]()
node_exporter默认监听在9100端口,要关闭被监控机上的防火墙、selinux等,确保node_exporter可以响应 prometheus_server发过来的HTTP_GET请求,也可以响应其他方式的HTTP_GET请求,最简单的方式,在浏览器打开:http://“node_exporter所在服务器的IP地址”:9100/metrics , 看是否有初始Node Exporter监控指标生成。如下图所示:

可以看出,exporter返回的数据格式如下:
# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="4",mode="idle"} 199147.19
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 0
# HELP node_load15 15m load average.
# TYPE node_load15 gauge
node_load15 0.05
# HELP node_load5 5m load average.
# TYPE node_load5 gauge
node_load5 0.01
其中,HELP用于解释当前指标的含义,TYPE则说明当前指标的数据类型。在上面的例子中node_cpu_seconds_total的注释表明当前指标是cpu4上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu_seconds_total的数据类型是计数器(counter),与该指标的实际含义一致。又例如node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为仪表盘(gauge),与指标反映的实际含义一致。
除了这些以外,在当前页面中根据物理主机系统的不同,还可能看到如下监控指标:
- node_boot_time:系统启动时间
- node_cpu:系统CPU使用量
- node_disk :磁盘IO
- node_filesystem :文件系统用量
- node_load1:系统负载
- node_memory :内存使用量
- node_network :网络带宽
- nodetime:当前系统时间
- go:node exporter中go相关指标
- process_:node exporter自身进程相关运行指标
3、grafana与prometheus实现监控可视化
(1)、Grafana基础知识
Grafana是一个开源的指标监测和可视化工具。官方网站为:https://grafana.com/, 常用于展示基础设施的时序数据和应用程序运行分析。Grafana的dashboard展示非常炫酷,绝对是运维提升可视化监控的一大利器。
数据源(datasource )
数据的存储源,它定义了将用什么方式来查询数据展示在grafana上面,不同的datasource拥有不同的查询语法,grafana支持多种数据源,官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch。
每个数据源的查询语言和能力各不同,我们可以将来自多个数据源的数据组合到一个仪表盘中,但是每个面板都绑定到属于特定组织的特定数据源。
仪表盘(Dashboard )
通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在Grafana中,我们通过Dashboard来组织和管理我们的数据可视化图表。

在一个Dashboard中,一个最基本的可视化单元为一个Panel(面板),Panel通过如趋势图,热力图的形式展示可视化数据。 并且在Dashboard中每一个Panel是一个完全独立的部分,通过Panel的Query Editor(查询编辑器)我们可以为每一个Panel配置独立的查询数据源以及数据查询方式,例如,如果以Prometheus作为数据源,那在Query Editor中,我们实际上使用的是PromQL,而Panel则会负责从特定的Prometheus中查询出相应的数据,并且将其可视化。由于每个Panel是完全独立的,因此在一个Dashboard中,往往可能会包含来自多个Data Source的数据。
Grafana通过插件的形式提供了多种Panel的实现,常用的如:Graph Panel,Heatmap Panel,SingleStat Panel以及Table Panel等。用户还可通过插件安装更多类型的Panel面板。
除了Panel以外,在Dashboard页面中,我们还可以定义一个Row(行),来组织和管理一组相关的Panel。Grafana还允许用户为Dashboard定义Templating variables(模板参数),从而实现可以与用户动态交互的Dashboard页面。
Grafana还专门为Dashboard提供了一个共享服务。https://grafana.com/dashboards,通过该服务用户可以轻松实现Dashboard的共享,同时我们也能快速的从中找到我们希望的Dashboard实现,并导入到自己的Grafana中。
(2)、Grafana的安装与配置
Grafana的安装非常简单,官方就有软件仓库可以直接使用,也可以通过docker镜像等方式直接本地启动。还可以直接下载rpm包、二进制包进行安装。
大家可以从 https://grafana.com/get 下载Grafana安装包,然后根据需要的系统平台及性能下载即可,官方给出了非常详细的安装方法,例如,要通过rpm包安装在Redhat & Centos平台,可直接执行如下命令:
[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-8.3.3-1.x86_64.rpm
[root@localhost ~]# yum localinstall grafana-8.3.3-1.x86_64.rpm
安装完毕后,启动grafana,访问 http://your-host:3000 就可以看到登录界面了。默认的用户名和密码都是admin。

本文是在centos7.x版本下进行的安装,安装方法与上面相同,安装完毕后,设置一些服务自启动即可,操作如下:
[root@localhost ~]# systemctl enable grafana-server #开启自启动
[root@localhost ~]# systemctl start grafana-server #启动服务
[root@localhost ~]# systemctl status grafana-server #查看服务是否正常启动
Grafana的配置文件位于/etc/grafana/grafana.ini,一般情况下无需修改配置文件。这样,安装就完成了。非常简单。
(3)、安装grafana插件
grafana提供了很多扩展插件,可通过https://grafana.com/grafana/plugins/查看,如果要和zabbix集成,就需要先安装grafana-zabbix插件,grafana官方已经包含了这个插件,直接使用即可。安装之前可以通过grafana-cli plugins list-remote 命令来查看都有什么插件可以安装。操作如下:
[root@localhost ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.2.4
可以看到,有一个名为alexanderzobnin-zabbix-app的zabbix 插件,接着直接在grafana上安装zabbix插件即可,执行如下命令:
[root@localhost ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
执行这个命令需要grafana服务器能够上网,因为它会从外网下载插件包,安装成功之后会提示我们需要重启grafana 服务,以使插件生效。接着,再安装一个clock-panel插件,这个插件是个时钟插件,可以在dashboard上显示时间用。命令如下:
[root@localhost ~]# grafana-cli plugins install grafana-clock-panel
所有需要的插件安装完成后,执行如下命令重启grafana服务:
[root@localhost ~]# systemctl restart grafana-server
(4)、配置prometheus数据源
Grafana已经默认自带了Prometheus数据源,所以无需安装插件,直接使用即可。这里将添加Prometheus作为数据源,如下图所示,指定数据源类型为Prometheus并且设置Prometheus的访问地址即可:

(5)、获取docker可视化Dashboard
Grafana社区用户分享了大量的Dashboard,可以通过访问 https://grafana.com/dashboards 网站,找到大量可直接使用的Dashboard。推荐几个非常不错的Dashboard,可直接导入Grafana使用。
|
模板ID |
模板用途 |
|
1860 |
Node Exporter Full |
|
9965 |
Blackbox Exporter 0.14 for Prometheus 监控展示看板 |
|
8919 |
1 Node Exporter for Prometheus Dashboard CN v20201010 |
|
10619 |
Docker Container & Host Metrics |
|
193 |
Docker monitoring |
|
14841 |
Docker monitoring |
其中,模板ID为https://grafana.com/grafana/dashboards/ID,将上面ID替换为具体的数字即可访问Dashboard。
获取了Dashboard后,就可以导入使用了,Grafana中所有的Dashboard可以通过JSON进行共享,下载并且导入这些JSON文件,就可以直接使用这些已经定义好的Dashboard,可以通过两种方式导入Dashboard,一种是先下载json文件,然后在Grafana中导入,如下图所示:

第二种方式是直接在线导入,如下图所示:

如果导入成功,会自动打开Prometheus 的Dashboard,即可出现炫酷的展示效果。下图是node_export获取的数据截图。

下图是docker状态截图:

更多推荐




所有评论(0)