让我首先给出我在其中看到的/var/log/syslog
输出dmesg
:
[559151.898586] ACPI Error: SMBus/IPMI/GenericSerialBus write requires Buffer of length 66, found length 32 (20170831/exfield-427)
[559151.911578] No Local Variables are initialized for Method [_PMM]
[559151.911580] No Arguments are initialized for method [_PMM]
[559151.911584] ACPI Error: Method parse/execution failed \_SB.PMI0._PMM, AE_AML_BUFFER_LIMIT (20170831/psparse-550)
[559151.916648] ACPI Exception: AE_AML_BUFFER_LIMIT, Evaluating _PMM (20170831/power_meter-338)
显然,Prometheus 节点导出器正在触发错误,尽管它似乎不是记录错误的原因。
现在我想要实现的是——最好是——告诉 Prometheus 节点导出器停止查询它试图查询的任何信息。如果做不到这一点,我想使这些消息静音,以免它们向我的日志文件发送垃圾邮件。
我将如何处理这些选项中的任何一个?...或者也许还有其他我没有考虑过的选择...
这发生在打包好的 Ubuntu 18.04 上prometheus-node-exporter
(它也发生在 0.16 和 0.17 版本中prometheus-node-exporter
,可以通过stretch-backports
- 是的,在 Ubuntu 上安装)。
显然,最好的方法是通过在(或同一文件夹中新创建的文件)中
acpi_power_meter
添加如下一行来将命名的内核模块列入黑名单:/etc/modprobe.d/blacklist.conf
在正在运行的系统上,还应该
rmmod acpi_power_meter
以超级用户身份运行以卸载模块。我已经对其进行了测试,这在我正在处理的所有 HP 服务器上都运行良好。据称,该错误的原因是所述 HP 硬件上的 BIOS 缺陷。这似乎是唯一可行的方法,我通过对 Prometheus项目的评论找到了它。
node_exporter
我将这些
[_PMM]
类型的日志消息放在一个新openvz
容器中(因此这些消息不在我的控制范围内)。您可以在
rsyslog
其中创建一个属性过滤器 (/etc/rsyslog.d/discard.conf
此目录中的文件是在应用所有其他配置之前获取的):对于
syslog
没有过滤器(例如 inetutils-syslogd) - 一个简单的修复是创建/etc/cron.hourly/pmmlog
并使其可执行: