如何使用zabbix api和java匹配所有触发器

时间:2013-12-03 12:21:12

标签: java zabbix

我需要从Zabbix Dashboard获取所有触发器。因此,如果有触发器,无论哪个严重程度,我需要得到这个。以下是触发仪表板的屏幕截图,其中包含一个条目: enter image description here 点击它以查看更大
因此,如果没有活动触发器,则此列表为空。

我已经做了什么:

jsonObj.put("method", "trigger.get");
        // Priority: 0 = Not classified | 1 = Information | 2 = Warning | 3 =
        // Average | 4 = High | 5 = Disaster
        jsonObj.put(
                "params",
                (new JSONObject().put(
                        "filter",
                        new JSONObject().put("priority", 1).put("group", "WZU-Server")).put(
                        "output", "extend")));

但这会给我带来很多旧的触发器,它们不再活跃。我真的只需要显示在仪表板上的触发器!

我怎样才能做到这一点?我用zabbix api得了好几个小时......

信息:
组ID为7
该组中有不同的主机 如果触发器的状态为OK,我不需要它。只有存在问题。

修改
我真的很接近目标 我目前的代码如下:

int count = 2;
while (count <= 5){
    jsonObj.put("jsonrpc", "2.0");
    jsonObj.put("method", "trigger.get");
    // Value: 0 = OK | 1 = PROBLEM | 2 = UNKNOWN
    // Priority: 0 = Not classified | 1 = Information | 2 = Warning | 3 =
    // Average | 4 = High | 5 = Disaster

    // count = priority. It start with two and end with 5
    jsonObj.put("params", (new JSONObject().put("filter", new JSONObject().put("priority", count).put("group", "WZU-Server").put("value", 1)).put("output", "extend")));
    jsonObj.put("id", 0);
    jsonObj.put("auth", "8ba6b9f29dd68e0c98cdea9ee01f2614");

    putMethod.setRequestEntity(new StringRequestEntity(jsonObj.toString(), "application/json", "UTF-8"));
}

目前,我的信息中心是空的。所以我不应该得到这个代码的任何对象 “警告”是空的,所以没关系 “平均返回8个对象。所有对象都超过一周。不好!
“高”是空的,所以没关系 “灾难”返回1个对象。这个对象超过一周。糟糕!

那么我怎样才能实现我只获得仪表板的信息呢?

1 个答案:

答案 0 :(得分:1)

我有一个外部应用程序调用zabbix API来检查状态。

没有&#34;系统的状态&#34;。如果由&#34;系统&#34;你的意思是&#34;主持人&#34;。在zabbix中,您有主机已监控项目。项目不断获取保存到历史记录中的值。收到的数据通过触发器机制,可以引发警报

现在,您在仪表板中看到的内容可能是主机可用性状态和警报的混合。让我们调用您在仪表板中看到的整个图片&#34;系统健康&#34;。要了解您可能需要的系统健康状况:

  • 检查是否有任何主机具有不可用的代理,它是您安装的zabbix代理监控的主机,zabbix服务器无法访问代理。要做到这一点,您可以使用host.get过滤器&#34;可用&#34;属性。

  • 检查是否有任何警报,如果您使用警报,这是从仪表板获取红色内容的最简单方法。你可以用alert.get做到这一点。我从未使用它,因此请检查您是否需要任何过滤器以获得有效警报。

  • 您也可以使用event.get检查来自触发器的事件,但我也从未使用此方法。

  • 对于我而言,如果您的系统运行状况中没有警报的无代理主机,您可能会被迫执行的操作是检查特定项目历史记录。要做到这一点,您需要使用history.get来获取值,通常是N个值或最后N分钟的值,您可以在代码中进行分析。这种方法可能会将监控和警报目的从zabbix转移到您的应用程序,使zabbix服务器只能收集数据。

继续尝试,但请阅读zabbix如何工作以及概念首先是什么。平台的知识将为您节省大量时间,以便您更好地投资编写代码。