Prometheus Node_exporter

Stella981
• 阅读 948

Node Exporter

node_exporter 主要用于 *NIX 系统监控, 用 Golang 编写。

功能对照表

默认开启的功能

名称

说明

系统

arp

/proc/net/arp 中收集 ARP 统计信息

Linux

conntrack

/proc/sys/net/netfilter/ 中收集 conntrack 统计信息

Linux

cpu

收集 cpu 统计信息

Darwin, Dragonfly,

FreeBSD, Linux

diskstats

/proc/diskstats 中收集磁盘 I/O 统计信息

Linux

edac

错误检测与纠正统计信息

Linux

entropy

可用内核熵信息

Linux

exec

execution 统计信息

Dragonfly, FreeBSD

filefd

/proc/sys/fs/file-nr 中收集文件描述符统计信息

Linux

filesystem

文件系统统计信息,例如磁盘已使用空间

Darwin, Dragonfly,

FreeBSD, Linux, OpenBSD

hwmon

/sys/class/hwmon/ 中收集监控器或传感器数据信息

Linux

infiniband

从 InfiniBand 配置中收集网络统计信息

Linux

loadavg

收集系统负载信息

Darwin, Dragonfly, FreeBSD,

Linux, NetBSD, OpenBSD, Solaris

mdadm

/proc/mdstat 中获取设备统计信息

Linux

meminfo

内存统计信息

Darwin, Dragonfly,

FreeBSD, Linux

netdev

网口流量统计信息,单位 bytes

Darwin, Dragonfly,

FreeBSD, Linux, OpenBSD

netstat

/proc/net/netstat 收集网络统计数据,等同于 netstat -s

Linux

sockstat

/proc/net/sockstat 中收集 socket 统计信息

Linux

stat

/proc/stat 中收集各种统计信息,包含系统启动时间,forks, 中断等

Linux

textfile

通过 --collector.textfile.directory参数指定本地文本收集路径,收集文本信息

any

time

系统当前时间

any

uname

通过 uname 系统调用, 获取系统信息

any

vmstat

/proc/vmstat 中收集统计信息

Linux

wifi

收集 wifi 设备相关统计数据

Linux

xfs

收集 xfs 运行时统计信息

Linux (kernel 4.4+)

zfs

收集 zfs 性能统计信息

Linux

默认关闭的功能

名称

说明

系统

bonding

收集系统配置以及激活的绑定网卡数量

Linux

buddyinfo

/proc/buddyinfo 中收集内存碎片统计信息

Linux

devstat

收集设备统计信息

Dragonfly, FreeBSD

drbd

收集远程镜像块设备(DRBD)统计信息

Linux

interrupts

收集更具体的中断统计信息

Linux,OpenBSD

ipvs

/proc/net/ip_vs 中收集 IPVS 状态信息,从 /proc/net/ip_vs_stats 获取统计信息

Linux

ksmd

/sys/kernel/mm/ksm 中获取内核和系统统计信息

Linux

logind

logind 中收集会话统计信息

Linux

meminfo_numa

/proc/meminfo_numa 中收集内存统计信息

Linux

mountstats

/proc/self/mountstat 中收集文件系统统计信息,包括 NFS 客户端统计信息

Linux

nfs

/proc/net/rpc/nfs 中收集 NFS 统计信息,等同于 nfsstat -c

Linux

qdisc

收集队列推定统计信息

Linux

runit

收集 runit 状态信息

any

supervisord

收集 supervisord 状态信息

any

systemd

systemd 中收集设备系统状态信息

Linux

tcpstat

/proc/net/tcp/proc/net/tcp6 收集 TCP 连接状态信息

Linux

注意:我们可以使用 --collectors.enabled 运行参数指定 node_exporter 收集的功能模块, 如果不指定,将使用默认模块。

程序安装

下载地址:https://prometheus.io/download/#node_exporter

安装node exporter
tar -zxvf node_exporter-0.16.0.linux-amd64.tar.gz

mv node_exporter-0.16.0.linux-amd64 /usr/local/node_exporter
创建systemd服务
vim /etc/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
启动node_exporter
systemctl daemon-reload
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter
验证启动成功
curl 127.0.0.1:9100
curl 127.0.0.1:9100/metrics

拉取数据

可以利用 Prometheus 的 static_configs 来拉取 node_exporter 的数据。

编辑prometheus.yml文件,添加内容

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

重启prometheus,然后在Prometheus页面中的Targets中就能看到新加入的node

Prometheus Node_exporter

Node Exporter 常用查询语句

收集到 node_exporter 的数据后,我们可以使用 PromQL 进行一些业务查询和监控,下面是一些比较常见的查询

以下查询均以单个节点作为例子,如果大家想查看所有节点,将 instance="xxx" 去掉即可。

CPU使用率

100 - (avg by (instance) (irate(node_cpu{instance="172.16.8.153:9100", mode="idle"}[5m])) * 100)

CPU各个mode使用率

avg by (instance, mode) (irate(node_cpu{instance="172.16.8.153:9100"}[5m])) * 100
  • User:CPU一共花了多少比例的时间运行在用户态空间或者说是用户进程(running user space processes)。典型的用户态空间程序有:Shells、数据库、web服务器等

  • Nice:可理解为,用户空间进程的CPU的调度优先级,范围为[-20,19]

  • System:System的含义与User相似。System表示:CPU花了多少比例的时间在内核空间运行。分配内存、IO操作、创建子进程……都是内核操作。这也表明,当IO操作频繁时,System参数会很高

  • ioWait:在计算机中,读写磁盘的操作远比CPU运行的速度要慢,CPU负载处理数据,而数据一般在磁盘上需要读到内存中才能处理。当CPU发起读写操作后,需要等着磁盘驱动器将数据读入内存,从而导致CPU 在等待的这一段时间内无事可做。CPU处于这种等待状态的时间由Wait参数来衡量

  • Idle:CPU处于空闲状态时间比例。一般而言,idel + user + nice 约等于100%

机器平均负载

node_load1{instance="172.16.8.153:9100"}   // 1分钟负载
node_load5{instance="172.16.8.153:9100"}   // 5分钟负载
node_load15{instance="172.16.8.153:9100"}  // 15分钟负载  

内存使用率

100-(node_memory_MemFree{instance="172.16.8.172:9100"}+node_memory_Cached{instance="172.16.8.172:9100"}+node_memory_Buffers{instance="172.16.8.172:9100"})/node_memory_MemTotal{instance="172.16.8.172:9100"} * 100

磁盘使用率

100 - node_filesystem_free{instance="172.16.8.153:9100",fstype!~"rootfs|selinuxfs|autofs|rpc_pipefs|tmpfs|udev|none|devpts|sysfs|debugfs|fuse.*"} / node_filesystem_size{instance="172.16.8.153:9100",fstype!~"rootfs|selinuxfs|autofs|rpc_pipefs|tmpfs|udev|none|devpts|sysfs|debugfs|fuse.*"} * 100

或者你也可以直接使用 {fstype="xxx"} 来指定想查看的磁盘信息

Prometheus Node_exporter

网卡出/入包

// 入包量
sum by (instance) (rate(node_network_receive_bytes{instance="172.16.8.153:9100",device!="lo"}[5m]))

// 出包量
sum by (instance) (rate(node_network_transmit_bytes{instance="172.16.8.153:9100",device!="lo"}[5m]))

Node exporter Dashboard 模板

获取node exporter dashboard

1.下载dashboard json文件在上传到grafana中
https://grafana.com/dashboards/1860

2.直接在grafana中输入相应导入的dashboard code_id

 Prometheus Node_exporter

输入code_id 或者 导入json文件

Prometheus Node_exporter

有些仪表盘上面是没有数据的,可能有些参数需要调整(模板可能适应以前的版本),对照这PromQL 修改参数

Prometheus Node_exporter

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这