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 默认启用的参数

Name Description OS
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>参数来启用,官方提供的不启用的参数如下:

Name Description OS
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 }} 实例不可达,请尽快解决"

猜你喜欢

转载自blog.csdn.net/ygq13572549874/article/details/129115350