维护上次已知状态似乎可能是主机(使用插件返回代码而不是0或1:Centreon blog post),但不适用于服务。
问题是,如何开发一个不会因为不需要而改变服务状态的插件?
我正在从文件中检索状态,但如果文件太旧,则不想抓取它。所以在这种情况下,当我的Python插件扫描文件时,我希望它不会干扰当前状态。
编辑:我想到的解决方法。
...或要求新功能;)
编辑2:更多信息。
Python插件是通用的,用于从xml文件中检索信息。这些xml文件是根据Nagios插件的需求构建的:
<?xml version="1.0"?>
<Data>
<CheckDate>1461939688</CheckDate>
<Status>WARNING</Status>
<Text>Warning on 3 disks</Text>
<PerfData>'Disk 1'=34;10;50;0;</PerfData>
<PerfData>'Disk 2'=21;10;50;0;</PerfData>
<PerfData>'Disk 3'=11;10;50;0;</PerfData>
<PerfData>'Disk 4'=0;10;50;0;</PerfData>
<PerfData>'Disk 5'=3;10;50;0;</PerfData>
</Data>
我正在比较给定的日期,以确保信息不会太旧。
基本上,我的Python插件只是一个xml解析器,检索数据并生成标准的Nagios输出。我们可以称之为“xml to Nagios”转换器!这是输出:
TEST WARNING: Errors on 3 disks | 'Disk 1'=34;10;50;0; 'Disk 2'=21;10;50;0; 'Disk 3'=11;10;50;0; 'Disk 4'=0;10;50;0; 'Disk 5'=3;10;50;0;
$ echo $?
1
它似乎没用(为什么不编写插件而不是使用xml文件?),但是:
所以,我不确定整个代码是否相关,只是因为我正在让它正确退出“符合Nagios”:
def return_status(status):
if status == 'OK':
return 0
elif status == 'WARNING':
return 1
elif status == 'CRITICAL':
return 2
elif status == 'UNKNOWN':
return 3
进一步:
sys.exit(return_status(status))
,状态为允许状态之一:“确定”,“警告”等。
答案 0 :(得分:0)
您有点关注主机状态,在这种情况下,与服务状态无关。他们是不同的,怀疑行为会被改变。
我编写了几个插件,其中使用cronjob
创建结果文件,因为执行时间超过了Centreon / Nagios限制。解决这个问题的最好方法是检查它的新鲜度(通过stat
或内容,如你的情况),如果它太旧则报警。我通常使用Unknown
,但这取决于谁在观看它以及如果文件太旧会有多重要。
对于perfdata
,如果文件太旧,则您的值无意义。试图保持它们只是为了保持图形连续只是为了美观。您真正关心的是创建文件的作业在担心其中的数据之前是否正常工作。