我需要从Zabbix Dashboard获取所有触发器。因此,如果有触发器,无论哪个严重程度,我需要得到这个。以下是触发仪表板的屏幕截图,其中包含一个条目:
点击它以查看更大
因此,如果没有活动触发器,则此列表为空。
我已经做了什么:
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个对象。这个对象超过一周。糟糕!
那么我怎样才能实现我只获得仪表板的信息呢?
答案 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如何工作以及概念首先是什么。平台的知识将为您节省大量时间,以便您更好地投资编写代码。