1

更新cpanpnp4nagios/NPCD 中的模块后,每次调用脚本时都会在我的系统日志中记录以下内容;

NPCD[19673]: ERROR: Executed command exits with return code '255'
NPCD[19673]: ERROR: Command line was '/etc/pnp4nagios/libexec/process_perfdata.pl -n --bulk /var/spool/icinga2/perfdata/host-perfdata.1524923929'

功能或数据似乎没有任何损失,我的图表按预期填充 - 但我被这个垃圾邮件发送了。

从 cli 运行脚本给出了这个结果;

bash-4.1$ /etc/pnp4nagios/libexec/process_perfdata.pl -n --bulk /var/spool/icinga2/perfdata/host-perfdata.1524919009 
tv_interval() 2nd argument should be an array reference at /etc/pnp4nagios/libexec/process_perfdata.pl line 218, <PDFILE> line 111

该模块的错误点的唯一有用的谷歌结果。Time::HiRes

4

3 回答 3

2

似乎Time::HiRes是/是当前版本的问题。cpan提供Time-HiRes-1.9758更新,但这似乎是导致问题的版本。

为了停止错误,我必须通过执行以下操作来降级该模块;

make clean在已安装版本的文件夹中(我的是在.cpan/build/Time-HiRes-1.9758),然后从 cpan 获取特定版本;

cpan JHI/Time-HiRes-1.9721.tar.gz它安装了较旧的(1.9721)版本。

重新启动npcd,错误消失了。

我不确定哪个版本Time-HiRes引入了这个错误/行为变化,因为我没有经历过它们,也不是 100% 确定问题可能实际出在哪里(npcd/Time-HiRes/其他地方)。希望这可以为其他人指明正确的方向。

来自ikegami的评论

“即使在 1.9721 版本中,第二个参数(如果提供)也必须是数组引用。似乎行为的唯一变化是添加了输入验证。process_perfdata.pl这是错误的,更新的版本Time::HiRes会让你知道。”

于 2018-04-28T14:17:59.183 回答
0

即使在最新版本的 pnp4nagios 中,这也是一个问题。如果您需要快速解决方法,您可以修改 pnp4nagios 脚本 process_perfdata.pl 以便它始终传递数组引用,如下所示(差异输出):

 sub main {
     my $job = shift;
     my $t0 = [gettimeofday];
-    my $t1;
+    my @t1=();
+    my $t1=\@t1;
     my $rt;
     my $lines = 0;
     # Gearman Worker

我已经这样做了,它似乎工作正常并删除了非常频繁的错误消息。如果它似乎引起问题,我会在这里发帖。

于 2018-08-06T04:58:23.377 回答
0

问题在于最新的库 Time:HiRes 1.9758 和 tv_interval 边界的第二个值。根据手册,如果省略,则使用实际时间 - 它到底是做什么的。因此,您需要将此命令应用于脚本 process_perfdata.pl:

sed -s 's/tv_interval $t0, $t1/tv_interval $t0/g' -i process_perfdata.pl

之后,一切都会正常进行。我遇到了 CentOS8 的问题,它不提供旧版本的 HiRes 库。另一个症状是 npcd 无法创建 .pnp-internal 文件夹。

于 2020-01-23T08:38:53.760 回答