【问题标题】:Centreon service' state : Maintaining last known stateCentreon 服务状态:保持最后已知状态
【发布时间】:2016-05-02 13:33:02
【问题描述】:

对于主机(使用除 0 或 1 以外的插件返回码:Centreon blog post)似乎可以维护最后一个已知状态,但对于服务则不行。

所以问题是,如何开发一个在不需要时不会改变服务状态的插件?

我正在从文件中检索状态,但如果文件太旧,我不想获取它。所以在这种情况下,当我的 Python 插件正在扫描文件时,我希望它不会干扰当前状态。

编辑:我想到的解决方法。

  1. 在不退出系统的情况下退出 Python 插件(有可能吗??)
  2. 以“未知”状态退出插件。可能没问题,但在这种情况下,我们失去了之前在 Centreon 的地位。如果这以后是一个“关键”的,可能不是最好的主意。
  3. ??

...或要求新功能 ;)

编辑 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 文件?),但是:

  1. 我们正在从许多来源检索信息,但并非所有人都知道 Nagios 系统
  2. 这允许生成速度非常慢的插件 输出。否则,Centreon 服务器会产生超时。

所以,我不确定整个代码是否相关,只是我正在让它有一个正确的退出“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)),状态为允许状态之一:“OK”、“WARNING”等。

【问题讨论】:

  • 使用自定义插件,退出代码是您的选择。一个更好的代码示例将有助于更好地了解您正在检查的内容和方式。
  • 谢谢,JonB,我已经编辑了我的帖子。问题是,除 0、1、2 或 3 之外的退出代码将在 Centreon 中产生“关键”状态,而对于主机它不会改变任何东西(这也是我希望服务的状态)。
  • 如果&lt;CheckDate&gt;1461939688&lt;/CheckDate&gt; 太旧,您基本上想覆盖&lt;Status&gt;WARNING&lt;/Status&gt; 并返回上一次检查中的任何状态,从而冒着认为您想多了的风险?我还认为,如果 XML 文件中的日期太旧,您会想知道这一点,以便调查原因。
  • 这个想法是在 Centreon 中保持上次检查的状态和日期不变(对于主机来说似乎是可能的,请参阅博客链接)。覆盖当前状态会更改检查日期,这不是一个可接受的选项,因为它会让我们认为已经执行了检查,但事实并非如此(它也会在图表中添加一个错误值)。毕竟,“未知”状态可能是最好的选择,因为我们确实必须调查为什么 xml 文件没有改变。

标签: python monitoring nagios


【解决方案1】:

您有点关注主机状态,在这种情况下,它与服务状态无关。他们是不同的,并且怀疑他们的行为会被改变。

我编写了几个插件,其中一个结果文件是用cronjob 创建的,因为执行时间超过了 Centreon/Nagios 的限制。处理这个问题的最好方法是检查它的新鲜度(通过stat 或内容,如你的情况)并在它太旧时发出警报。我通常使用Unknown,但这取决于谁在关注它,以及如果文件太旧,它可能有多重要。

对于perfdata,如果文件太旧,您的值将毫​​无意义。试图保持它们只是为了保持图形的连续性只是为了美观。您真正关心的应该是创建文件的作业是否正常工作,然后再担心其中的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多