NodeTextFileCollectorScrapeError 报警原因及解决方法

news2025/4/17 10:09:05

现象

prometheus 经常有告警 NodeTextFileCollectorScrapeError
查看 node-exporter 日志出现如下报错

time=2025-04-01T06:43:18.266Z level=ERROR source=textfile.go:248 msg="failed to collect textfile data" collector=textfile file=ipmitool.prom err="failed to parse textfile data from \"/host/root/var/lib/node_exporter/textfile/ipmitool.prom\": text format parsing error in line 35: invalid label value \"r\\x85r??\""

从日志来看,ipmitool.prom 文件在第 35 行存在格式错误,具体错误是 “invalid label value”,可能的原因如下:

可能的原因

1.特殊字符或乱码
r\x85r?? 可能是非 ASCII 字符或二进制数据,导致解析失败。
可能是 IPMI 工具输出的数据包含不可见字符。

2.标签格式错误
Prometheus 指标的标签必须符合:

metric_name{label="value"} number

例如:

ipmi_temperature{sensor="CPU Temp"} 42.0

label=“r\x85r??” 说明 value 部分包含了非法字符。

3.文件编码问题
ipmitool.prom 可能是 UTF-16、UTF-8 BOM 或其他非标准编码,导致解析失败。

4.IPMI 读取错误
ipmitool 可能返回了异常字符,导致 .prom 文件生成时包含错误数据。

解决方法

1.检查 ipmitool.prom 文件

cat -A /host/root/var/lib/node_exporter/textfile/ipmitool.prom | grep -n .

cat -A 显示所有特殊字符(^M、\x85 等)。
找到第 35 行的内容,看是否有乱码或特殊字符。

2.手动清理 ipmitool.prom
如果确认文件有乱码,可以手动编辑:

nano /host/root/var/lib/node_exporter/textfile/ipmitool.prom

删除第 35 行的无效字符
确保格式正确,如:

ipmi_temperature{sensor="CPU Temp"} 42.0

不要使用非 ASCII 字符(如中文、特殊符号等)。

3.自动清理文件
如果是 ipmitool 生成的问题,可用 sed 或 tr 过滤非标准字符:

sed -i 's/[^a-zA-Z0-9_{}=",.\-]//g' /host/root/var/lib/node_exporter/textfile/ipmitool.prom

或者:

tr -cd '\11\12\15\40-\176' < /host/root/var/lib/node_exporter/textfile/ipmitool.prom > /tmp/clean.prom && mv /tmp/clean.prom /host/root/var/lib/node_exporter/textfile/ipmitool.prom

这会删除所有 非 ASCII 可打印字符,避免 Prometheus 解析失败。

4.检查 ipmitool 生成的内容
如果 ipmitool 仍然生成错误数据,建议先手动运行:

ipmitool sensor

然后检查输出是否包含乱码或特殊字符。如果有问题,可以尝试:

LANG=C ipmitool sensor

或者重定向输出后检查:

ipmitool sensor > /tmp/ipmi_output.txt
cat -A /tmp/ipmi_output.txt

5.重新生成 .prom 文件
如果 ipmitool 是用脚本生成 .prom 文件的,建议在脚本里加个清理步骤:

ipmitool sensor | tr -cd '\11\12\15\40-\176' > /host/root/var/lib/node_exporter/textfile/ipmitool.prom

这样可以确保生成的 .prom 文件不会带有非法字符。

6.重新启动 node_exporter
清理后,重启 node_exporter 并检查日志:

sudo systemctl restart node_exporter
journalctl -u node_exporter --no-pager | tail -n 20

然后再访问 Prometheus /metrics 端点:

curl -s http://localhost:9100/metrics | grep textfile

如果 node_textfile_scrape_error 0,说明错误已经修复。

tr -cd ‘\11\12\15\40-\176’ 命令解释

tr -cd '\11\12\15\40-\176' 这个命令的作用是 过滤掉所有非 ASCII 可打印字符,只保留特定的字符集。

解释各个部分

  • tr:翻译或删除字符的命令(translate)
  • -c取反,即匹配不在指定字符集范围内的字符
  • -d:删除匹配到的字符
  • '\11\12\15\40-\176':保留的字符集:
    • \11(Tab 键 HT,ASCII 9)
    • \12(换行符 LF,ASCII 10)
    • \15(回车 CR,ASCII 13)
    • \40-\176(范围表示法,ASCII 32 到 126,即所有可见的 ASCII 字符)

字符范围

ASCII 范围说明
\11 (9)Tab (HT)
\12 (10)换行 (LF)
\15 (13)回车 (CR)
\40 (32)空格 (Space)
\176 (126)~(所有可打印 ASCII 字符)

总结
这个命令 删除所有不可打印字符(比如 \x85、控制字符、二进制字符等)

  • 只保留:
    • 可见的 ASCII 字符(32-126
    • Tab换行回车(用于格式化)

示例

示例 1:清理包含特殊字符的文件

cat file.txt | tr -cd '\11\12\15\40-\176' > clean.txt
  • 作用:从 file.txt删除不可打印字符,输出到 clean.txt
  • 适用于清理 Prometheus .prom 文件格式错误问题

示例 2:处理 ipmitool.prom

tr -cd '\11\12\15\40-\176' < ipmitool.prom > clean.prom
mv clean.prom ipmitool.prom
  • 作用:去除 .prom 文件中的乱码或非法字符,保证 Prometheus 能正确解析

这样可以确保 ipmitool.prom 不包含非标准字符,避免 NodeTextFileCollectorScrapeError

ansible 中写法

如果使用ansible 部署,tr -cd ‘\11\12\15\40-\176’ 里的 \ 需要转义(在 YAML 里 \ 是特殊字符)
示例如下

- name: Creates a cron file for prometheus monitor ipmi
  cron:
    name: "{{ item.name }}"
    minute: "{{ item.minute }}"
    hour: "{{ item.hour }}"
    day: "{{ item.day }}"
    month: "{{ item.month }}"
    weekday: "{{ item.weekday }}"
    user: "{{ item.user }}"
    job: "{{ item.job }}"
  with_items:
    - { name: "ipmitool", minute: "*/1", hour: "*", day: "*", month: "*", weekday: "*", user: "root", job: "sudo ipmitool sensor | sudo awk -f {{ node_exporter_root_dir }}/ipmitool | tr -cd '\\11\\12\\15\\40-\\176' > {{ node_exporter_textfile_dir }}/ipmitool.prom" }

tr -cd ‘\11\12\15\40-\176’ 可以使用双引号吗

在 tr -cd ‘\11\12\15\40-\176’ 中,单引号 ‘’ 是用来确保 \11\12\15\40-\176 作为转义字符被 tr 正确解析。

如果使用 双引号 “”,bash 可能会对 \11\12\15\40-\176 进行额外的 shell 解析,可能导致错误或不符合预期的行为。

是否可以使用双引号?
单引号 ’ ’ ✅(推荐)

tr -cd '\11\12\15\40-\176'

✅ 正确,tr 直接解析 \11\12\15\40-\176 作为 ASCII 码范围。

双引号 " " ⚠️(可能错误)

tr -cd "\11\12\15\40-\176"

⚠️ 可能错误,bash 会优先解析 \,可能导致 tr 不能正确识别 ASCII 码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

80. Linux内核定时器实验

一、Linux内核定时器原理 1.1、内核时间管理 1、Cortex-M内核使用systick作为系统定时器。 2、硬件定时器、软件定时器&#xff0c;原理是依靠系统定时器来驱动。 3、linux内核频率可以配置&#xff0c;图形化界面配置。 4、重点&#xff0c;HZ表示系统节拍率&#xff0c; 1.…

C++类与对象(上):从入门到实践

目录 一、引言 二、面向过程和面向对象初步认识 2.1 面向过程编程 2.2 面向对象编程 三、类的引入 四、类的定义 4.1 定义格式 4.2 定义方式 4.3 成员变量命名规则建议 五、类的访问限定符及封装 5.1 访问限定符 5.2 封装 六、类的作用域 七、类的实例化 7.1 概念…

Lumerical ------ Edge coupler design

Lumerical ------ Edge coupler design 引言正文无 Si Substrate 的仿真步骤有 Si Substrate 的仿真步骤引言 本文,我们将使用官方提供的 Edge coupler 设计教程,但是中间会带有作者本人的设计的感悟。 正文 无 Si Substrate 的仿真步骤 打开 Edge_Coupler_No_Substrate.l…

大语言模型本质上还是自动化,而不是智能化

大语言模型本质上仍然是自动化或高级自动化&#xff0c;而非真正的智能化&#xff0c;原因可以从以下几个方面进行分析&#xff1a;1、自动化与智能化的本质区别自动化&#xff1a;大语言模型通过预训练和微调&#xff0c;基于大量数据和规则生成输出。它的行为是基于输入数据的…

python数据结构——链表、栈、队列

一、思维梳理&#xff1a; 二、双向循环链表&#xff1a; class Node:def __init__(self,data):self.data dataself.next Noneself.prev Noneclass DoubleLink:def __init__(self):self.size 0self.head Nonedef is_empty(self):return self.size 0def add_end(self,dat…

centos操作系统如何更换yum镜像源

CentOS Linux 是一个免费提供的、社区支持的Linux发行版,由CentOS项目社区贡献者开发、分发和维护。2020年CentOS项目宣布将把全部投资转移到CentOS Stream,作为即将发布的 Red Hat Enterprise Linux版本的上游开发平台。因此,CentOS Linux更新和发布将在2021年至2024年期间…

【Linux篇】自主Shell命令行解释器

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1. 获取用户名的接口2. 等待用户输入接口3. 将上述代码进行面向对象式的封装4. 命令行解析5.…

我的创作纪念日-一周年

目录 机缘 收获 日常 成就 憧憬 机缘 时光荏苒&#xff0c;转行计算机已经是第5个年头了。从Python入门&#xff0c;到C入土&#xff0c;兜兜转转&#xff0c;发现自己也只是初窥门径&#xff0c;习得皮毛。我从6年前开始潜水CSDN&#xff0c;学习各路大佬的技术经验&…

多线程代码案例 - 1

目录 单例模式 1. 饿汉模式 2. 懒汉模式 单例模式与多线程 问题1 问题2 问题3 完&#xff01; 单例模式 单例模式是一种设计模式。 设计模式&#xff0c;是我们在编写代码时候的一种软性的规定&#xff0c;也就是说&#xff0c;我们遵守设计模式&#xff0c;代码的下限…

开发体育赛事直播系统主播认证功能技术实现方案

该体育直播系统系统由东莞梦幻网络科技开发&#xff0c;使用 ThinkPHP 作为后端&#xff0c;Vue.js 作为 PC/H5 端框架&#xff0c;Java 和 Objective-C 分别用于安卓和 iOS 开发。 1、前端实现 (Vue.js) <template><div class"anchor-certification">…

国产三维CAD「皇冠CAD」在汽车零部件领域建模教程:刹车片

本教程深度融合三维皇冠CAD&#xff08;CrownCAD&#xff09;的MBD&#xff08;Model-Based Definition&#xff09;设计理念&#xff0c;通过参数化建模、智能约束管理、动态装配验证等功能&#xff0c;实现数据驱动设计&#xff0c;精准解决了汽车制动系统中精密制动组件的设…

SpringMvc获取请求数据

基本参数 RequestMapping("save5") ResponseBody public User save5(String name, int age) {User user new User();user.setName(name);user.setAge(age);return user; } 在url中将name与age进行编写&#xff0c;通过框架可以提取url中的name与age&#xff0c;这…

大语言模型开发框架——LangChain

什么是LangChain LangChain是一个开发由语言模型驱动的应用程序的框架&#xff0c;它提供了一套工具、组件和接口&#xff0c;可以简化构建高级语言模型应用程序的过程。利用LangChain可以使应用程序具备两个能力&#xff1a; 上下文感知 将语言模型与上下文&#xff08;提示…

机器学习的一百个概念(7)独热编码

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

从实用的角度聊聊Linux下文本编辑器VIM

本文从实用的角度聊聊Vim的常用命令。何为实用&#xff1f;我举个不实用的例子大家就明白了&#xff0c;用vim写代码。;) “vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用&#xff0c;和Emacs并列成…

佳能imageRUNNER 2206N基本参数及管理员密码

基本参数&#xff1a; 产品类型 激光数码复合机 颜色类型 黑白 涵盖功能 复印/打印/扫描 速度类型 低速 最大原稿尺寸 A3 复印/打印方式 激光静电转印方式 感光材料 OPC 显影系统 干式单组分显影 定影…

社交类 APP 设计:打造高用户粘性的界面

在当今数字化时代&#xff0c;社交类APP已成为人们日常生活中不可或缺的一部分。然而&#xff0c;随着市场竞争的加剧&#xff0c;如何通过设计提升用户粘性成为社交类APP成功的关键。本文将从设计的关键要素、用户界面优化、功能创新、个性化体验以及持续优化等方面&#xff0…

数据编排与Dagster:解锁现代数据管理的核心工具

在数据驱动的时代&#xff0c;如何高效管理复杂的数据管道、确保数据质量并实现团队协作&#xff1f;本文深入探讨数据编排的核心概念&#xff0c;解析其与传统编排器的差异&#xff0c;并聚焦开源工具Dagster如何以“资产为中心”的理念革新数据开发流程&#xff0c;助力企业构…

Jmeter的压测使用

Jmeter基础功能回顾 一、创建Jmeter脚本 1、录制新建 &#xff08;1&#xff09;适用群体&#xff1a;初学者 2、手动创建 &#xff08;1&#xff09;需要了解Jmeter的常用组件 元件&#xff1a;多个类似功能组件的容器&#xff08;类似于类&#xff09; 各元件作用 组件…

kubernetes》》k8s》》Deployment》》ClusterIP、LoadBalancer、Ingress 内部访问、外边访问

Nginx部署 K8s 集群内外访问服务的方式 节点 Kubernetes 集群中的服务器&#xff08;指单台&#xff09; 集群 Kubernetes 管理的一组服务器的集合 边界路由器 为局域网和Internet路由数据包的路由器&#xff0c;执行防火墙保护局域网络 集群网络 遵循Kubernetes网络模型实现集…