Node exporter
node-exporter
node-exporter 是 Prometheus 官方提供的 exporter,主要用来采集 Linux 类型节点的相关信息和运行指标,包括主机的 CPU、内存、Load、Filesystem、Network 等
官方:https://github.com/prometheus/node_exporter
下载 Node Exporter:https://github.com/prometheus/node_exporter/releases
运行:
使用 systemd 管理
/usr/lib/systemd/system/node_exporter.service
node_exporter 启动一个http服务,当请求metrics返回的数据比较多的时候,会消耗一定的cpu,通过systemd的CPUQuota限制cpu的使用
内存:node_exporter 对指标收集的时候会消耗一定的内存,通过systemd的MemoryLimit限制内存的使用,内存占用超限是发生OOM
[Unit]
Description=Node Exporter
Requires=node_exporter.socket
[Service]
User=root
EnvironmentFile=/etc/sysconfig/node_exporter
ExecStart=/usr/sbin/node_exporter --web.systemd-socket $OPTIONS
MemoryLimit=300M
CPUQuota=100%
[Install]
WantedBy=multi-user.target
/usr/lib/systemd/system/node_exporter.socket
/etc/sysconfig/node_exporter
# OPTIONS="--collector.textfile.directory /var/lib/node_exporter/textfile_collector"
OPTIONS="--log.level=error"
Docker 部署
官方不建议通过 Docker 方式部署 node-exporter,因为它需要访问主机系统。 通过 docker 部署的方式,需要把任何非根安装点都绑定到容器中,并通过 --path.rootfs
参数指定。
docker run -d \
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
prom/node-exporter \
--path.rootfs=/host
参数
由于 systemd 指标较多,可以用 --collector.systemd.unit-include
参数配置只收集指定的服务,减少无用数据,该参数支持正则表达式匹配
如果只想启用需要的收集器,其他的全部禁用,可用如下格式配置
其他参数
--collector.diskstats.ignored-devices=^(ram|loop|fd)\d+$
--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/)
限制资源
node_exporter 默认通过系统rsyslog的日志级别写入messages日志,可以通过调节日志级别 --log.level=error 来减少磁盘的消耗
Textfile 收集器
textfile 通过扫描指定目录中的文件,提取所有符合 Prometheus 数据格式的字符串,然后暴露它们给到 Prometheus 进行抓取。
创建指标文件保存目录 mkdir /opt/prom
$ cat <<EOF | tee /opt/prom/metadata.prom
# HELP alex_test this is a test
# TYPE alex_test gauge
alex_test{server="test",idc="bj"} 1
EOF
启用 textfile: ./node_exporter --collector.textfile.directory="/opt/prom"
抓取指标
在 Prometheus 配置关于 node-exporter 节点的 target,即可抓取相关节点指标数据。
scrape_configs:
- job_name: dev-nas
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
basic_auth:
username: prometheus
password: <secret>
follow_redirects: true
static_configs:
- targets:
- 10.244.244.3:9100
或者在 k8s 中
apiVersion: monitoring.coreos.com/v1alpha1
kind: ScrapeConfig
metadata:
name: dev-nas
namespace: monitoring
spec: {}
主动 push 指标
#!/bin/bash
PUSHGATEWAY_SERVER=https://PUSHGATEWAY.EXAMPLE.COM
NODE_NAME=`hostname`
curl -s localhost:9100/metrics | curl -u USERNAME:PASSWORD --data-binary @- $PUSHGATEWAY_SERVER/metrics/job/node-exporter/instance/$NODE_NAME
定时执行上述脚本
# added by ADMIN to push node stats to Prometheus Pushgateway every minute
*/1 * * * * /root/push_node_exporter_metrics.sh &> /dev/null
常用查询指标
- CPU
指标名称 | 类型 | 含义 |
---|---|---|
node_cpu_seconds_total | Counter | 节点 CPU 的使用时间 (单位:秒) |
- 内存
指标名称 | 类型 | 含义 |
---|---|---|
node_memory_MemTotal_bytes | Gauge | 节点总内存大小(单位:字节) |
node_memory_MemFree_bytes | Gauge | 节点空闲内存大小(单位:字节) |
node_memory_Buffers_bytes | Gauge | 节点缓存大小(单位:字节) |
node_memory_Cached_bytes | Gauge | 节点页面缓存大小(单位:字节) |
- 磁盘
指标名称 | 类型 | 含义 |
---|---|---|
node_filesystem_avail_bytes | Gauge | 分区用户剩余空间(单位:字节),表示用户拥有的剩余可用空间 |
node_filesystem_size_bytes | Gauge | 分区空间总容量(单位:字节) |
node_filesystem_free_bytes | Gauge | 分区物理剩余空间(单位:字节),表示物理层的可用空间 |
node_disk_read_bytes_total | Counter | 分区读总字节数(单位:字节) |
node_disk_written_bytes_total | Counter | 分区写总字节数(单位:字节) |
node_disk_reads_completed_total | Counter | 分区读总次数 |
node_disk_writes_completed_total | Counter | 分区写总次数 |
- 网络
指标名称 | 类型 | 含义 |
---|---|---|
node_network_receive_bytes_total | Counter | 接收流量总字节数(单位:字节) |
node_network_transmit_bytes_total | Counter | 发送流量总字节数(单位:字节) |
node_network_receive_packets_total | Counter | 接收流量总包数(单位:包) |
node_network_transmit_packets_total | Counter | 发送流量总包数(单位:包) |
node_network_receive_drop_total | Counter | 接收流量总丢包数(单位:包) |
node_network_transmit_drop_total | Counter | 发送流量总丢包数(单位:包) |