在Prometheus的架构设计中,PrometheusServer并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。
从上面的描述中可以看出Exporter可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向Prometheus提供标准格式的监控样本数据即可。
这里为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。我们可以使用Node Exporter 。
node_exporter安装部署
配置hosts文件解析并修改主机名(在Prometheus ,node1,node2都要配置)Prometheus安装文档
[root@locathost ~]# vim /etc/hosts
192.168.100.100 prometheus
192.168.100.10 node2
192.168.100.9 node2
修改主机名
Prometheus服务器
[root@prometheus ~]# hostnamectl set-hostname prometheus
node1 node2
[root@node1 ~]# hostnamectl set-hostname node1
[root@node2 ~]# hostnamectl set-hostname node2
配置时间服务器同步时间
prometheus服务器
[root@prometheus ~]# yum -y install ntp ntpdate
[root@prometheus ~]# sed -i '/^server/s/^/#/g' /etc/ntp.conf
[root@prometheus ~]# cat <<END >>/etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8
END
[root@prometheus ~]# systemctl enable ntpd --now
[root@prometheus ~]# ntpdate ntp1.aliyun.com
node服务器(node1和node2配置相同再此只拿node1举栗子)
[root@node1 ~]# yum -y install ntpdate
[root@node1 ~]# /usr/sbin/ntpdate 192.168.100.100
下载node_exporter(node1和node2配置相同再此只拿node1举栗子) Prometheus官网
[root@node1 ~]# tar zxvf node_exporter-1.5.0.linux-amd64.tar.gz
[root@node1 ~]# mv node_exporter-1.5.0.linux-amd64 /usr/local/exporter
配置系统启动脚本
[root@node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/exporter/node_exporter --web.listen-address=:20001 --collector.systemd --collector.systemd.unit-whitelist=(sshd|nginx).service --collector.processes --collector.tcpstat
[Install]
WantedBy=multi-user.target
[root@node1 ~]# useradd -M -s /sbin/nologin prometheus
[root@node1 ~]# chown -R prometheus:prometheus /usr/local/exporter/
[root@node1 ~]# systemctl enable --now node_exporter
[root@node1 ~]# systemctl status node_exporter.service
[root@node2 ~]# firewall-cmd --add-port=20001/tcp --permanent
[root@node2 ~]# firewall-cmd --reload
访问192.168.100.9:20001 192.168.100.10:20001可以看到这个页面
![](https://i-blog.csdnimg.cn/blog_migrate/ee75f7787dd88cc66628e487506c2e79.png)
![](https://i-blog.csdnimg.cn/blog_migrate/de3f448e62cd5d323088389ce4b6cb3c.png)
初始Node Exporter监控指标
访问http://192.168.100.10/metrics,可以看到当前node exporter获取到的当前主机的所有监控数据,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/efa4bd862f7bf24bcae68e59f14abfc7.png)
每一个监控指标之前都会有一段类似于如下形式的信息:
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 3.0703125
其中HELP用于解释当前指标的含义,TYPE则说明当前指标的数据类型。在上面的例子中node_cpu的注释表明当前指标是cpu0上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu的数据类型是计数器(counter),与该指标的实际含义一致。又例如node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为仪表盘(gauge),与指标反映的实际含义一致。
除了这些以外,在当前页面中根据物理主机系统的不同,你还可能看到如下监控指标:
node_boot_time:系统启动时间
node_cpu:系统CPU使用量
nodedisk*:磁盘IO
nodefilesystem*:文件系统用量
node_load1:系统负载
nodememeory*:内存使用量
nodenetwork*:网络带宽
node_time:当前系统时间
go_*:node exporter中go相关指标
process_*:node exporter自身进程相关运行指标
配置prometheus采集node端信息
为了能够让PrometheusServer能够从当前node exporter获取到监控数据,这里需要修改Prometheus配置文件。编辑prometheus.yml并在scrape_configs节点下添加以下内容:
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
- job_name: "node"
static_configs:
- targets:
- "192.168.100.9:20001"
- "192.168.100.10:20001"
###注意格式!!!
[root@prometheus ~]# systemctl restart prometheus
[root@prometheus ~]# systemctl status prometheus
查看集成
![](https://i-blog.csdnimg.cn/blog_migrate/7ed1ee826f3f96f811188935d9d9726a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/119561d392b2011d7befdcf00da5434f.png)
使用PromQL查询监控数据
Prometheus UI是Prometheus内置的一个可视化管理界面,通过Prometheus UI用户能够轻松的了解Prometheus当前的配置,监控任务运行状态等。通过Graph面板,用户还能直接使用PromQL实时查询监控数据:
![](https://i-blog.csdnimg.cn/blog_migrate/6950ff7cfbe704d3270a114add1a037a.png)
PromQL是Prometheus自定义的一套强大的数据查询语言,除了使用监控指标作为查询关键字以为,还内置了大量的函数,帮助用户进一步对时序数据进行处理。例如使用rate()函数,可以计算在单位时间内样本数据的变化情况即增长率,因此通过该函数我们可以近似的通过CPU使用时间计算CPU的利用率:
rate(node_cpu_seconds_total[2m])
![](https://i-blog.csdnimg.cn/blog_migrate/f9a36806ed87f7be43451adda4a4687c.png)
这时如果要忽略是哪一个CPU的,只需要使用without表达式,将标签CPU去除后聚合数据即可
avg without(cpu) (rate(node_cpu_seconds_total[2m]))
![](https://i-blog.csdnimg.cn/blog_migrate/5956aadb616f2ba2b1d6e4f05277f73a.png)