zabbix java api

zabbix java api

zabbix官方的api文檔地址:https://www.zabbix.com/documentation/3.0/manual/api

Zabbix功能

概觀

  • Zabbix是一個(gè)高度集成的網(wǎng)絡(luò)監(jiān)控解決方案,在單個(gè)軟件包中提供了多種功能。

數(shù)據(jù)采集

  • 可用性和性能檢查
  • 支持SNMP(捕獲和輪詢),IPMI,JMX,VMware監(jiān)控
  • 定制檢查
  • 以定制的間隔收集所需的數(shù)據(jù)
  • 由服務(wù)器/代理和代理執(zhí)行

靈活的閾值定義

  • 您可以定義非常靈活的問題閾值,稱為觸發(fā)器,從后端數(shù)據(jù)庫(kù)引用值

高度可配置的警報(bào)

  • 可以為升級(jí)計(jì)劃,收件人,媒體類型定制發(fā)送通知
  • 使用宏變量可以使通知變得有意義和有用
  • 自動(dòng)操作包括遠(yuǎn)程命令

實(shí)時(shí)繪圖

  • 使用內(nèi)置的圖形功能立即繪制被監(jiān)視的項(xiàng)目

Web監(jiān)控功能

  • Zabbix可以按照網(wǎng)站上模擬鼠標(biāo)點(diǎn)擊的路徑,并檢查功能和響應(yīng)時(shí)間

廣泛的可視化選項(xiàng)

  • 能夠創(chuàng)建可以將多個(gè)項(xiàng)目組合成單個(gè)視圖的自定義圖形
  • 網(wǎng)絡(luò)地圖
  • 自定義屏幕和幻燈片,以顯示儀表板風(fēng)格的概述
  • 報(bào)告
  • 監(jiān)控資源的高級(jí)(業(yè)務(wù))視圖

歷史數(shù)據(jù)存儲(chǔ)

  • 存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)
  • 可配置歷史
  • 內(nèi)置內(nèi)務(wù)程序

輕松配置

  • 將監(jiān)控的設(shè)備添加為主機(jī)
  • 主機(jī)被拾取用于監(jiān)視,一次在數(shù)據(jù)庫(kù)中
  • 將模板應(yīng)用于受監(jiān)控設(shè)備

使用模板

  • 在模板中分組檢查
  • 模板可以繼承其他模板

網(wǎng)絡(luò)發(fā)現(xiàn)

  • 自動(dòng)發(fā)現(xiàn)網(wǎng)絡(luò)設(shè)備
  • 代理商自動(dòng)注冊(cè)
  • 發(fā)現(xiàn)文件系統(tǒng),網(wǎng)絡(luò)接口和SNMP OID

快速的Web界面

  • PHP中的基于Web的前端
  • 可從任何地方訪問
  • 你可以點(diǎn)擊你的方式
  • 審核日志

Zabbix API

  • Zabbix API為Zabbix 提供了可編程接口,用于大規(guī)模操作,第三方軟件集成和其他目的。

權(quán)限系統(tǒng)

  • 安全的用戶認(rèn)證
  • 某些用戶可以限于某些視圖

全功能和易于擴(kuò)展的代理

  • 部署在監(jiān)測(cè)目標(biāo)上
  • 可以部署在Linux和Windows上

二進(jìn)制程序

  • 寫在C中,用于性能和小內(nèi)存占用
  • 容易攜帶

準(zhǔn)備復(fù)雜的環(huán)境

  • 通過使用Zabbix代理,遠(yuǎn)程監(jiān)控變得容易

zabbix最近問題列表

pom.xml

        <dependency>
            <groupId>io.github.hengyunabc</groupId>
            <artifactId>zabbix-api</artifactId>
            <version>0.0.1</version>
        </dependency>

zabbix獲取最近問題列表

JSONObject jo = new JSONObject();
        jo.put("value", 1);
        jo.put("priority", new String[]{"2", "3", "4", "5"});
        Request request = RequestBuilder.newBuilder().method("trigger.get")
                .paramEntry("output", new String[]{"description", "priority", "lastchange"})
                .paramEntry("selectHosts", new String[]{"host", "name", "hostid"})
                .paramEntry("selectDependencies", "extend")
                .paramEntry("expandData", "host")
                .paramEntry("skipDependent", "1")
                .paramEntry("monitored", "1")
                .paramEntry("active", "1")
                .paramEntry("expandDescription", "1")
                .paramEntry("sortfield", "priority")
                .paramEntry("sortorder", "DESC")
                .paramEntry("filter", jo)
                .build();

zabbix Api

import io.github.hengyunabc.zabbix.api.DefaultZabbixApi;
import io.github.hengyunabc.zabbix.api.Request;
import io.github.hengyunabc.zabbix.api.RequestBuilder;
import io.github.hengyunabc.zabbix.api.ZabbixApi;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * zabbix Api
 * @author can
 */
public class ZabbixUtil {

    private static final Logger LOGGER = LoggerFactory.getLogger(ZabbixUtil.class);

    private ZabbixApi zabbixApi;

    public ZabbixUtil(String username, String password, String url) throws Exception {
        if (StringUtils.isBlank(username) || StringUtils.isBlank(password) || StringUtils.isBlank(url)){
            throw new Exception("ZabbixApi初始化失??!參數(shù)不全!");
        }
        login(username, password, url);
    }

    private ZabbixApi login(String username, String password, String url) throws Exception {
        zabbixApi = new DefaultZabbixApi(url);
        zabbixApi.init();
        boolean login = zabbixApi.login(username, password);
        if(!login){
            LOGGER.info(username + " login in Zabbix " + (login ? "SUCCESS" : "FALURE") + " !");
        }
        return zabbixApi;
    }

    /**
     * 獲取zabbix中所以的主機(jī)群組列表
     * @return 主機(jī)群組列表json
     */
    public String getHostGroupList() throws Exception {
        Request request = RequestBuilder.newBuilder().method("hostgroup.get")
                .paramEntry("output", "extend")
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }
    
    public String getHostList() throws Exception {
        Request request = RequestBuilder.newBuilder().method("host.get")
                .paramEntry("output", new String[]{"host", "name", "description", "hostid"})
                .paramEntry("selectGroups", "extend")
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    /**
     * 獲取主機(jī)ID
     * @param hostIp
     * @return 主機(jī)ID
     */
    public String getHostByGroupid(Integer groupid) throws Exception {
        Request request = RequestBuilder.newBuilder().method("host.get")
                .paramEntry("groupids", groupid)
                .paramEntry("output", new String[]{"host", "name", "description", "hostid"})
                .paramEntry("selectGroups", "extend")
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    /**
     * 獲取zabbix報(bào)警列表
     * @param timeFrom 僅返回在給定時(shí)間之后生成的警報(bào)。
     * @return
     */
    public String getAlertList(Long timeFrom) throws Exception {
        Request request = RequestBuilder.newBuilder().method("alert.get")
                .paramEntry("output", new String[]{"sendto", "subject", "clock", "message"})
                .paramEntry("selectHosts", new String[]{"host"})
                .paramEntry("time_from", timeFrom)
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    /**
     * 獲取zabbix報(bào)警列表
     * @param timeFrom 僅返回在給定時(shí)間之后生成的警報(bào)。
     * @return
     */
    public String getAlertListByGroupids(Integer groupid, Long timeFrom) throws Exception {
        Request request = RequestBuilder.newBuilder().method("alert.get")
                .paramEntry("time_from", timeFrom)
                .paramEntry("groupids", groupid)
                .paramEntry("output", new String[]{"sendto", "subject", "clock", "message","triggerid"})
                .paramEntry("selectHosts", new String[]{"host"})
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    /**
     * 獲取zabbix最近問題列表
     * @return
     * @throws Exception
     */
    public String getTriggerInfoList() throws Exception {
        JSONObject jo = new JSONObject();
        jo.put("value", 1);
        jo.put("priority", new String[]{"2", "3", "4", "5"});
        Request request = RequestBuilder.newBuilder().method("trigger.get")
                .paramEntry("output", new String[]{"description", "priority", "lastchange"})
                .paramEntry("selectHosts", new String[]{"host", "name", "hostid"})
                .paramEntry("selectDependencies", "extend")
                .paramEntry("expandData", "host")
                .paramEntry("skipDependent", "1")
                .paramEntry("monitored", "1")
                .paramEntry("active", "1")
                .paramEntry("expandDescription", "1")
                .paramEntry("sortfield", "priority")
                .paramEntry("sortorder", "DESC")
                .paramEntry("filter", jo)
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }
    
    /**
     * 根據(jù)群組id和機(jī)器host獲取觸發(fā)器信息列表
     * @param groupid
     * @param host
     * @return
     * @throws Exception
     */
    public String getTrigger(Integer groupid, String host) throws Exception {
        Request request = RequestBuilder.newBuilder().method("trigger.get")
                .paramEntry("groupids", groupid)
                .paramEntry("host", host)
                .paramEntry("monitored", 1)
                .paramEntry("output", new String[]{"expression","description", "priority", "lastchange","status"})
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }
    
    /**
     * 根據(jù)觸發(fā)器id獲取觸發(fā)器信息
     * @param triggerId
     * @return
     * @throws Exception
     */
    public String getTriggerByTriggerId(Integer triggerId) throws Exception {
        Request request = RequestBuilder.newBuilder().method("trigger.get")
                .paramEntry("triggerids", triggerId)
                .paramEntry("output", "extend")
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    public String getItemList() throws Exception {
        Request request = RequestBuilder.newBuilder().method("item.get").paramEntry("output", "extend").paramEntry("monitored", "true").build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    public String getTriggerPrototypeByGroupid(Integer groupid) throws Exception {
        Request request = RequestBuilder.newBuilder().method("triggerprototype.get")
                .paramEntry("groupids", groupid)
                .paramEntry("selectHosts", new String[]{"host", "hostid"})
                .paramEntry("selectGroups", "extend")
                .paramEntry("output", new String[]{"expression", "triggerid", "description", "priority", "status"})
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }
    
    public String getTriggerPrototypeByTriggerids(Integer triggerid) throws Exception {
        Request request = RequestBuilder.newBuilder().method("triggerprototype.get")
                .paramEntry("triggerids", triggerid)
                .paramEntry("output", "extend")
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }
    
    public String getTriggerInfo(Integer groupid,Long lastChangeSince) throws Exception {
        Request request = RequestBuilder.newBuilder().method("trigger.get")
                .paramEntry("groupids", groupid)
                .paramEntry("lastChangeSince", lastChangeSince)
                .paramEntry("output", new String[]{"description", "priority", "lastchange"})
                .paramEntry("selectHosts", new String[]{"host", "name", "hostid"})
                .paramEntry("skipDependent", "1")
                .paramEntry("monitored", "1")
                .paramEntry("active", "1")
                .paramEntry("expandDescription", "1")
                .paramEntry("sortfield", "priority")
                .build();
        JSONObject response = zabbixRequest(request);
        zabbixError(response);
        JSONArray result = response.getJSONArray("result");
        return result.toJSONString();
    }

    private JSONObject zabbixRequest(Request request) throws Exception {
        JSONObject response = zabbixApi.call(request);
        return response;
    }

    private void zabbixError(JSONObject response) throws Exception {
        if (!StringUtils.isBlank(response.getString("error")))
            throw new Exception("向Zabbix請(qǐng)求出錯(cuò)了!" + JSON.parseObject(response.getString("error")).getString("data"));
    }

運(yùn)行結(jié)果



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Zabbix簡(jiǎn)介 Zabbix官方網(wǎng)站Zabbix中文文檔 本文系統(tǒng)環(huán)境是CentOS7x86_64, Zabbi...
    Zhang21閱讀 8,322評(píng)論 0 37
  • 自定義key網(wǎng)絡(luò)發(fā)現(xiàn)Web監(jiān)控主動(dòng)檢測(cè)基于SNMP監(jiān)控基于JMX監(jiān)控Zabbix ProxyZabbix調(diào)優(yōu) 一、...
    哈嘍別樣閱讀 1,500評(píng)論 0 1
  • 前言介紹 監(jiān)控是整個(gè)運(yùn)維乃至整個(gè)產(chǎn)品生命周期中最重要的一環(huán),事前及時(shí)預(yù)警發(fā)現(xiàn)故障,事后提供詳實(shí)的數(shù)據(jù)用于追查定位問...
    oldxu_linux閱讀 5,418評(píng)論 1 76
  • 希望的定義——就是一個(gè)人相信自己的明天會(huì)因?yàn)榻裉斓呐Χ兊酶?。。。。?!?如果我們的行為是經(jīng)過思考的,是充滿希...
    金金視界閱讀 2,800評(píng)論 1 2
  • 七月初,我打算找一份工作,頂著南方的酷暑,漫無目的地走在街上。看到一家小小的照相館門前貼有招工啟事,便走了進(jìn)去。老...
    海邊的卡夫拉閱讀 402評(píng)論 0 0

友情鏈接更多精彩內(nèi)容