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 默认启用的参数
NameDescriptionOSarp从/proc/net/ARP中显示ARP统计信息Linuxbcache显示/sys/fs/bcache/中的bcache统计信息。Linuxbonding显示Linux绑定接口的已配置和活动从属设备的数量。LInuxboottime显示从kern.boottime sysctl派生的系统启动时间Darwin, Dragonfly, FreeBSD, NetBSD, OpenBSD, Solarisconntrack显示连接统计信息(如果没有/proc/sys/net/netfilter/present,则不执行任何操作)。Linuxcpu显示CPU统计信息Darwin, Dragonfly, FreeBSD, Linux, Solariscpufreq显示CPU频率统计信息Linux, Solarisdiskstats显示磁盘I/O统计信息。Darwin, Linux, OpenBSDedac显示错误检测和更正统计信息。Linuxentropy显示可用熵。Linuxexec显示执行统计信息。Dragonfly, FreeBSDfilefd显示/proc/sys/fs/file-nr中的文件描述符统计信息。Linuxfilesystem显示文件系统统计信息,如使用的磁盘空间。Darwin, Dragonfly, FreeBSD, Linux, OpenBSDhwmon暴露/sys/class/hwmon/中的硬件监控和传感器数据。Linuxinfiniband显示特定于InfiniBand和Intel OmniPath配置的网络统计信息。Linuxipvs显示/proc/net/ip_vs中的IPVS状态和/proc/net/ip_vs_stats中的统计信息。Linuxloadavg显示平均负载。Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solarismdadm在/proc/mdstat中显示有关设备的统计信息(如果不存在/proc/mdtat,则不执行任何操作)。Linuxmeminfo显示内存统计信息。Darwin, Dragonfly, FreeBSD, Linux, OpenBSDnetclass显示/sys/class/net中的网络接口信息/Linuxnetdev显示网络接口统计信息,如传输的字节数。Darwin, Dragonfly, FreeBSD, Linux, OpenBSDnetstat从/proc/net/netstat中显示网络统计信息。这是与netstat-s相同的信息。Linuxnfs从/proc/net/rpc/NFS中显示NFS客户端统计信息。这是与nfsstat-c相同的信息。Linuxnfsd从/proc/net/rpc/nfsd中显示NFS内核服务器统计信息。这与nfsstat-s的信息相同。Linuxpressure显示/proc/pressure/中的压力失速统计信息。Linux (kernel 4.20+ and/or CONFIG_PSI)rapl显示/sys/class/powercap中的各种统计信息。Linuxschedstat显示/proc/schedstat中的任务调度程序统计信息。Linuxsockstat显示/proc/net/sockstat中的各种统计信息。Linuxsoftnet显示/proc/net/softnet_stat中的统计信息Linuxstat显示/proc/stat中的各种统计信息。这包括启动时间、分叉和中断。Linuxtextfile显示从本地磁盘读取的统计信息。必须设置--collector.textfile.directory标志。anythermal_zone显示/sys/class/thermal中的热区和冷却设备统计信息。Linuxtime显示当前系统时间。anytimex显示选定的adjtimex(2)系统调用统计信息Linuxudp_queues显示/proc/net/UDP和/proc/net/udp6中rx_queue和tx_queue的UDP总长度。Linuxuname显示uname系统调用提供的系统信息。Linuxvmstat显示/proc/vmstat中的统计信息。Linuxxfs显示XFS运行时统计信息。Linux (kernel 4.4+)zfs显示ZFS性能统计信息。Linux, Solaris
如果不想收集某个类型的指标,就使用
--no-collector.<name>
参数,比如:
./node_exporter --no-collector.time
2.4.2 默认不启用的参数
默认不启用的参数需要通过
--collector.<name>
参数来启用,官方提供的不启用的参数如下:
NameDescriptionOSbuddyinfo显示/proc/buddyinfo报告的内存碎片统计信息。Linuxdevstat显示设备统计信息Dragonfly, FreeBSDdrbd显示分布式复制数据块设备统计信息(至8.4版)LInuxinterrupts显示详细的中断统计信息Linux, OpenBSDksmd从/sys/kernel/mm/ksm中显示内核和系统统计信息。Linuxlogind显示登录名中的会话计数。Linuxmeminfo_numa从logind中显示会话计数。从/proc/meminfo_numa中显示内存统计信息。Linuxmountstats从/proc/self/mountstats中显示文件系统统计信息。显示详细的NFS客户端统计信息。Linuxntp显示本地NTP守护程序运行状况以检查时间anyprocesses显示/proc中的聚合进程统计信息Linuxqdisc显示排队规则统计信息Linuxrunit显示排队规则统计信息从runit中显示服务状态。anysupervisord从supervisord中显示服务状态anysystemd从systemd中显示服务和系统状态。Linuxtcpstat从/proc/net/TCP和/proc/net/trcp6中显示TCP连接状态信息。(警告:当前版本在高负载情况下可能存在性能问题。)Linuxwifi显示WiFi设备和站点统计信息。Linuxperf显示基于性能的指标(警告:指标取决于内核配置和设置)。 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 }} 实例不可达,请尽快解决"
版权归原作者 alden_ygq 所有, 如有侵权,请联系我们删除。