如何排查因Exporter采集底层系统指标时卡死在内核态引发的Prometheus拉取挂起故障

千磊君_6631

千磊君_6631

2026-05-30

201人浏览

原创

exporter内核态卡死会导致prometheus抓取超时,targets显示context deadline exceeded或up但无新数据;需通过curl测试/metrics响应、strace跟踪系统调用、ps查看d状态线程及wchan定位阻塞点,并临时禁用filesystem收集器或过滤挂载点缓解。

如何排查因exporter采集底层系统指标时卡死在内核态引发的prometheus拉取挂起故障

Exporter在采集底层系统指标时卡死在内核态,会导致Prometheus抓取请求长时间无响应,最终超时失败,Targets页面显示 context deadline exceeded 或持续处于 UP但无新数据 状态。这类故障隐蔽性强——进程仍在运行、端口可连、HTTP服务看似正常,但实际指标生成已停滞。排查需绕过应用层日志,深入到系统调用与内核行为层面。

确认Exporter是否真正在“假活”状态

不能只看进程存在或端口监听,要验证其是否能实际生成指标:

  • 直接访问 http://IP:9182/metrics(Windows Exporter)或 http://IP:9100/metrics(Node Exporter),观察响应时间与内容完整性;若页面加载超过5秒、返回截断内容、或反复卡在某一行(如卡在 node_filesystem_... 指标处),即为典型内核卡死迹象
  • 执行 curl -v http://IP:9100/metrics 2>&1 | head -n 20,检查是否卡在 * Connected to... 后无后续,说明请求已进入内核但未返回
  • 对比 ps aux | grep exporter 中的 CPU% 和 RSS:若 CPU% 接近 0 但 RSS 持续缓慢上涨,常表明线程阻塞在不可中断睡眠(D 状态)

检查是否存在 stuck mount 或 slow I/O 导致 filesystem collector 卡住

这是最常见诱因,尤其在挂载 NFS、CIFS、加密卷或异常设备后:

  • 运行 findmnt 或 cat /proc/mounts,识别非常规挂载类型(如 nfs4、cifs、fuse.sshfs、zfs)及非标准路径(如 /mnt/backup、/data/archive)
  • 手动触发 statfs 测试:strace -e trace=statfs,openat,readlink -f timeout 10 ./node_exporter --collector.filesystem.ignored-mount-points="^$" --no-collector.time,观察是否卡在某个 statfs("/path", ...) 调用上
  • 检查对应挂载点内核状态:cat /proc/self/mountstats | grep -A 10 "device_name",关注 age: 是否异常高,或出现 inodes: stale 类提示

定位卡在内核态的具体系统调用

需要借助 strace 和 ps 结合判断线程真实状态:

  • 查出 exporter 主进程 PID:pgrep -f 'node_exporter\|windows_exporter'
  • 查看线程状态:ps -T -o pid,tid,comm,state,wchan:20 -p $PID,重点关注状态为 D(uninterruptible sleep)的线程,及其 wchan(等待的内核函数,如 nfs_wait_bit_killable、__fuse_read、sleep_on_page)
  • 对可疑线程做实时跟踪:strace -p $TID -e trace=%all -s 128 -yy 2>&1 | grep -E "(statfs|openat|readlink|getdents|ioctl)",确认是否循环阻塞在同一路径或设备上

临时规避与长期修复建议

内核卡死无法从用户态强制唤醒,只能隔离或绕过问题源:

  • 立即缓解:通过启动参数跳过问题挂载点,例如 --collector.filesystem.ignored-mount-points "^/mnt/broken|^/backup"(Node Exporter)或 --collectors.enabled="...,-filesystem" 临时禁用整个模块
  • Windows 场景下重点检查 WMI 查询:若 windows_exporter 卡住,启用详细日志 --log.level=debug,观察是否卡在 Win32_PerfFormattedData_PerfOS_System 等 WMI 类查询;可改用 --collector.logical_disk.ignored-mount-points 或关闭 logical_disk 收集器
  • 长期方案:避免在生产环境挂载不稳定的远程文件系统;对关键挂载点设置 soft,nointr,timeo=10,retrans=3(NFS)等容错参数;定期巡检 /proc/mounts 与 dmesg | tail -20 中的 I/O 错误
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3910

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3353

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2493

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6050

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5682

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3333

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2845

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3059

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习