0x0034's Blog.

Node-Exporter 性能优化

字数统计: 591阅读时长: 2 min
2025/01/20

起因

Node-exporter 采集数据有断图的问题, 排查发现/metrics接口 rt 很高, 大概都需要 1-3s 左右.

1
2
3
4
5
6
7
8
# time curl http://127.0.0.1:9199/metrics -o ne.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 7539k 0 7539k 0 0 7151k 0 --:--:-- 0:00:01 --:--:-- 7153k

real 0m1.065s
user 0m0.009s
sys 0m0.029s

优化

主旨就是做减法

1.分析 metrics 构成

可以看到 ipvs 是占绝对的数据量大头, 但是正常的情况下是没有使用到这部分的 metrics的 , 所以调整Node Exporter 停止 ipvs 的采集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# grep -v ^# ne.txt |grep -v ^go | wc -l
53777
总 metrics 数量为 53777
# grep -v ^# ne.txt |grep -v ^go | awk -F'_' '{print $2}' |uniq -c |sort -nr
44759 ipvs
2340 xfs
1788 network
1280 cpu
1177 disk
896 softnet
570 filesystem
384 schedstat
256 cooling
92 scrape
52 memory
46 arp
41 netstat
20 sockstat
17 timex
10 nf
7 vmstat
6 metric
5 time
4 udp
2 virtual
2 procs
2 os
2 filefd
2 entropy
1 uname
1 textfile
1 start
1 selinux
1 resident
1 open
1 max
1 load5 48.32
1 load15 47.72
1 load1 52.17
1 intr
1 forks
1 exporter
1 dmi
1 cpu
1 context
1 boot

在 Node Exporter 中 添加如下的启动命令, 丢弃 ipvs 相关的 metrics

1
--no-collector.ipvs

2.获取Pprof分析

再次测试访问耗时, 可以看到 rt 降低到 0.4s 左右.

1
2
3
4
5
6
7
8
#  time curl http://127.0.0.1:9199/metrics -o ne.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 623k 0 623k 0 0 1599k 0 --:--:-- --:--:-- --:--:-- 1599k

real 0m0.400s
user 0m0.003s
sys 0m0.012s

采集 30s pprof数据

1
curl -o /tmp/cpu_profile.prof "http://localhost:9100/debug/pprof/profile?seconds=30"

启动分析

1
go tool pprof -http=:8080 node_exporter.go  /tmp/cpu_profile.prof

观察如下CPU火焰图, 可以看到大部分的耗时在arp 数据的采集中, 但是这部分数据一般情况下也不会使用到

这里的情况因人而异, 只是提供一个思路

CPU火焰图1

在 Node Exporter 中 添加如下的启动命令, 直接丢弃

1
--no-collector.arp

优化结果

再次测试访问耗时, 可以看到 rt 降低到 0.01s 左右.

1
2
3
4
5
6
7
8
#  time curl http://127.0.0.1:9199/metrics -o ne.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 587k 0 587k 0 0 6612k 0 --:--:-- --:--:-- --:--:-- 6676k

real 0m0.100s
user 0m0.003s
sys 0m0.010s

再对 CPU 耗时进行分析, 可以看到绝大部分的开销都在必要的数据上

CPU火焰图2

CATALOG
  1. 1. 起因
  2. 2. 优化
    1. 2.1. 1.分析 metrics 构成
    2. 2.2. 2.获取Pprof分析
  3. 3. 优化结果