Prometheus监控实战之node_exporter详解

目录

1 概述

2 功能

2.1 不同操作系统采集端

2.2 linux操作系统采集端

2.3 监控指标

2.4 参数定义

2.4.1 默认启用的参数

 2.4.2 默认不启用的参数

2.5 启动参数

3 安装部署

3.1 下载

3.2 安装配置

3.3 测试验证

3.4 prometheus配置

3.5 在 grafana 中添加图表 


1 概述

 Exporter是Prometheus的指标数据收集组件。它负责从目标Jobs收集数据,并把收集到的数据转换为Prometheus支持的时序数据格式。 和传统的指标数据收集组件不同的是,他只负责收集,并不向Server端发送数据,而是等待Prometheus Server 主动抓取,node-exporter 默认的抓取url地址:http://ip:9100/metrics 。

因为环境原因,网络不可达的场景,Prometheus可以使用Pushgateway这个组件推送node-exporter的指标数据到远端Prometheus,node-exporter用于采集node的运行指标,包括node的cpu、load、filesystem、meminfo、network等基础监控指标,类似于zabbix监控系统的的zabbix-agent。node-exporter由Prometheus官方提供、维护,属于监控指标收集类UNIX内核操作系统的必备的exporter。

GitHub地址:https://github.com/prometheus/node_exporter#enabled-by-default。

2 功能

2.1 不同操作系统采集端

  • node-exporter用于采集类UNIX内核的硬件以及系统指标
  • Windows系统使用 WMI-exporter
  • 采集NVIDIA的GPU指标,可以使用 prometheus-dcgm

2.2 linux操作系统采集端

根据不同的类UNIX操作系统,node-exporter采集指标的支持也是不一样的。

  • diskstats 支持 Darwin, Linux
  • cpu 支持 Darwin, Dragonfly, FreeBSD, Linux, Solaris等,

2.3 监控指标

  • CPU
  • 内存
  • 硬盘
  • 网络流量
  • 文件描述符
  • 系统负载
  • 系统服务

2.4 参数定义

黑名单: 关闭某一项默认开启的采集项,使用--no-collector参数可指定不需要的模块,如果不指定,将使用默认配置。

白名单:关闭默认采集项而只开启某些采集,使用--collector.disable-defaults参数关闭默认采集项,使用--collector.<name>指定开启的采集项。

使用--collectors.enabled参数打开node_exporter默认的采集项。

部分参数默认关闭的原因是:

  • 太重

  • 太慢

  • 太多资源开销

2.4.1 默认启用的参数

NameDescriptionOS
arp从/proc/net/ARP中显示ARP统计信息Linux
bcache显示/sys/fs/bcache/中的bcache统计信息。Linux
bonding显示Linux绑定接口的已配置和活动从属设备的数量。LInux
boottime显示从kern.boottime sysctl派生的系统启动时间Darwin, Dragonfly, FreeBSD, NetBSD, OpenBSD, Solaris
conntrack显示连接统计信息(如果没有/proc/sys/net/netfilter/present,则不执行任何操作)。Linux
cpu显示CPU统计信息Darwin, Dragonfly, FreeBSD, Linux, Solaris
cpufreq显示CPU频率统计信息Linux, Solaris
diskstats显示磁盘I/O统计信息。Darwin, Linux, OpenBSD
edac显示错误检测和更正统计信息。Linux
entropy显示可用熵。Linux
exec显示执行统计信息。Dragonfly, FreeBSD
filefd显示/proc/sys/fs/file-nr中的文件描述符统计信息。Linux
filesystem显示文件系统统计信息,如使用的磁盘空间。Darwin, Dragonfly, FreeBSD, Linux, OpenBSD
hwmon暴露/sys/class/hwmon/中的硬件监控和传感器数据。Linux
infiniband显示特定于InfiniBand和Intel OmniPath配置的网络统计信息。Linux
ipvs显示/proc/net/ip_vs中的IPVS状态和/proc/net/ip_vs_stats中的统计信息。Linux
loadavg显示平均负载。Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solaris
mdadm在/proc/mdstat中显示有关设备的统计信息(如果不存在/proc/mdtat,则不执行任何操作)。Linux
meminfo显示内存统计信息。Darwin, Dragonfly, FreeBSD, Linux, OpenBSD
netclass显示/sys/class/net中的网络接口信息/Linux
netdev显示网络接口统计信息,如传输的字节数。Darwin, Dragonfly, FreeBSD, Linux, OpenBSD
netstat从/proc/net/netstat中显示网络统计信息。这是与netstat-s相同的信息。Linux
nfs从/proc/net/rpc/NFS中显示NFS客户端统计信息。这是与nfsstat-c相同的信息。Linux
nfsd从/proc/net/rpc/nfsd中显示NFS内核服务器统计信息。这与nfsstat-s的信息相同。Linux
pressure显示/proc/pressure/中的压力失速统计信息。Linux (kernel 4.20+ and/or CONFIG_PSI)
rapl显示/sys/class/powercap中的各种统计信息。Linux
schedstat显示/proc/schedstat中的任务调度程序统计信息。Linux
sockstat显示/proc/net/sockstat中的各种统计信息。Linux
softnet显示/proc/net/softnet_stat中的统计信息Linux
stat显示/proc/stat中的各种统计信息。这包括启动时间、分叉和中断。Linux
textfile显示从本地磁盘读取的统计信息。必须设置--collector.textfile.directory标志。any
thermal_zone显示/sys/class/thermal中的热区和冷却设备统计信息。Linux
time显示当前系统时间。any
timex显示选定的adjtimex(2)系统调用统计信息Linux
udp_queues显示/proc/net/UDP和/proc/net/udp6中rx_queue和tx_queue的UDP总长度。Linux
uname显示uname系统调用提供的系统信息。Linux
vmstat显示/proc/vmstat中的统计信息。Linux
xfs显示XFS运行时统计信息。Linux (kernel 4.4+)
zfs显示ZFS性能统计信息。Linux, Solaris

如果不想收集某个类型的指标,就使用--no-collector.<name>参数,比如:

./node_exporter --no-collector.time

 2.4.2 默认不启用的参数

默认不启用的参数需要通过--collector.<name>参数来启用,官方提供的不启用的参数如下:

NameDescriptionOS
buddyinfo显示/proc/buddyinfo报告的内存碎片统计信息。Linux
devstat显示设备统计信息Dragonfly, FreeBSD
drbd显示分布式复制数据块设备统计信息(至8.4版)LInux
interrupts显示详细的中断统计信息Linux, OpenBSD
ksmd从/sys/kernel/mm/ksm中显示内核和系统统计信息。Linux
logind显示登录名中的会话计数。Linux
meminfo_numa从logind中显示会话计数。从/proc/meminfo_numa中显示内存统计信息。Linux
mountstats从/proc/self/mountstats中显示文件系统统计信息。显示详细的NFS客户端统计信息。Linux
ntp显示本地NTP守护程序运行状况以检查时间any
processes显示/proc中的聚合进程统计信息Linux
qdisc显示排队规则统计信息Linux
runit显示排队规则统计信息从runit中显示服务状态。any
supervisord从supervisord中显示服务状态any
systemd从systemd中显示服务和系统状态。Linux
tcpstat从/proc/net/TCP和/proc/net/trcp6中显示TCP连接状态信息。(警告:当前版本在高负载情况下可能存在性能问题。)Linux
wifi显示WiFi设备和站点统计信息。Linux
perf显示基于性能的指标(警告:指标取决于内核配置和设置)。 Linux

2.5 启动参数

  • --web.listen-address:指定启动端口,例如:--web.listen-address=":8080"。
  • --web.config.file=web-config.yml:指定配置文件。
  • --collector.systemd:收集主机上面运行服务的状态,启用systemd收集器。
  • --collector.systemd.unit-include="(docker|sshd).service":指定systemd服务,与--collector.systemd搭配使用。
  • –collector.vmstat.fields=^(oom_kill|pgpg|pswp|nr|pg.fault):监控系统事件。
  • --collector.disable-defaults:禁用所有默认开启的收集器。
  • --collector.< name>:指定开启的收集器,与--collector.disable-defaults搭配使用。
  • --collector.textfile.directory="/opt/prom":自定义监控数据目录。
  • --web.telemetry-path="/metrics":指定metrics的路径,默认为/metrics。
  • --web.disable-exporter-metrics:是否禁用go、prome默认的metrics。
  •  --web.max-requests=40:最大并行请求数,默认40,设置为0时不限制。
  • --log.level="info":日志等级: [debug, info, warn, error, fatal]。
  •  --log.format=logfmt :设置日志打印target和格式: [logfmt, json]。
  • --version:版本号

3 安装部署

3.1 下载

下载地址:

https://prometheus.io/download/

3.2 安装配置

tar -zxvf node_exporter-0.18.1.linux-amd64.tar.gz
cp -rf node_exporter-0.18.1.linux-amd64 /usr/local/node_exporter
#启动 
cd /usr/local/node_exporter/
nohup ./node_exporter --web.listen-address="192.168.10.131:9100" --log.level=warn &
#要想后台运行就得加nohup,单独加最后面的&都不管用

3.3 测试验证


curl -g -X GET http://192.168.10.131:9100/metrics?collect[]=cpu

go_代表goruntime信息等
curl http://192.168.10.131:9100/metrics|grep go_
process_代表进程信息等
curl http://192.168.10.131:9100/metrics|grep process

3.4 prometheus配置

- job_name: node_exporter
    honor_timestamps: true
    scrape_interval: 5s
    scrape_timeout: 5s
    metrics_path: /metrics
    scheme: http
    follow_redirects: true
    static_configs:
      - targets:
        - 192.168.10.131:9100
    params:    ##配置比较鸡肋,可以从node_exporter端过率
      collect[]: #node_exporter可以传递一个可选的收集器列表来过滤指标。该collect[]参数可以多次使用。
        - cpu
        - meminfo

重启 prometheus,查看状态

基于发现配置prometheus

在prometheus 主配置文件配置定义子配置文件路径

  - job_name: 'node'
    static_configs:
    file_sd_configs:
    - files:
      - metrics/node_exporter*.yaml
      refresh_interval: 2m

在prometheus安装目录下的targets目录下(在主配置文件定义metrics目录不存在则手动创建)创建文件 node_exporter65.yaml。

- targets: ['192.168.111.65:9100']    # 如果有多个node_exporter,配置到[]中,隔开添加不需要重启服务,服务自动发现node_exporter客户端
  labels:
   app: node-exporter
   job: node

3.5 在 grafana 中添加图表 

1)开启alertmanager配置告警规则

prometheus 主配置文件配置定义子配置文件路径

rule_files:
    - "rules/*.yml"

2)prometheus 告警规则

在prometheus安装目录下的定义的rules目录下(如果rules目录不存在)创建文件 alarm_rule.yml,

groups:
- name: hostStatsAlert
  rules:
  - alert: hostCpuUsageAlert
    expr: (1- avg(irate(node_cpu_seconds_total{instance=~"$node",mode="idle"}[30m])))*100>85
    for: 1m
    labels:
      level: disaster #定义一个等级标签,用于altermanager 发送消息
    annotations:
      summary: "实例 {{ $labels.instance }} CPU使用率过高"
      description: "{{ $labels.instance }} CPU 使用率大于 85% (当前值为: {{ $value }})"

  - alert: hostMemUsageAlert
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100>85
    for: 1m
    labels:
      level: disaster
    annotations:
      summary: "实例 {{ $labels.instance }} 内存使用率过高"
      description: "{{ $labels.instance }} 内存使用率大于 85% (当前的值: {{ $value }})"

  - alert: hostLoad
    expr: sum(node_load15) >= sum(count(node_cpu_seconds_total{mode='system'}) by (cpu)) and node_load1 > node_load5 and node_load5 > node_load15 
    for: 1m
    labels:
      level: disaster
    annotations:
      summary: "实例 {{ $labels.instance }} 15 分钟负载过高"
      description: "{{ $labels.instance }} 15 分钟负载大于其 cpu 核心数 (当前的值: {{ $value }})"

  - alert: hostUp
    expr: up{job="node"} == 0
    for: 1m
    labels:
      level: disaster
    annotations:
      summary: "实例 {{ $labels.instance }} 不可达"
      description: "{{ $labels.instance }} 实例不可达,请尽快解决"

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alden_ygq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值