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ù)庫引用值

高度可配置的警報(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ù)庫中的數(shù)據(jù)
  • 可配置歷史
  • 內(nèi)置內(nèi)務(wù)程序

輕松配置

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

使用模板

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

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

  • 自動(dòng)發(fā)現(xiàn)網(wǎng)絡(luò)設(shè)備
  • 代理商自動(dòng)注冊
  • 發(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)測目標(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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市平窘,隨后出現(xiàn)的幾起案子吓肋,更是在濱河造成了極大的恐慌,老刑警劉巖瑰艘,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件是鬼,死亡現(xiàn)場離奇詭異肤舞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)均蜜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門李剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人囤耳,你說我怎么就攤上這事篙顺。” “怎么了充择?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵德玫,是天一觀的道長。 經(jīng)常有香客問我椎麦,道長宰僧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任观挎,我火速辦了婚禮琴儿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘁捷。我一直安慰自己造成,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布雄嚣。 她就那樣靜靜地躺著晒屎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪现诀。 梳的紋絲不亂的頭發(fā)上夷磕,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天履肃,我揣著相機(jī)與錄音仔沿,去河邊找鬼。 笑死尺棋,一個(gè)胖子當(dāng)著我的面吹牛封锉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膘螟,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼成福,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荆残?” 一聲冷哼從身側(cè)響起奴艾,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎内斯,沒想到半個(gè)月后蕴潦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體像啼,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年潭苞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忽冻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡此疹,死狀恐怖僧诚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝗碎,我是刑警寧澤湖笨,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蹦骑,受9級(jí)特大地震影響赶么,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脊串,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一辫呻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琼锋,春花似錦放闺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谜叹,卻和暖如春匾寝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荷腊。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工艳悔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人女仰。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓猜年,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疾忍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乔外,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Zabbix簡介 Zabbix官方網(wǎng)站Zabbix中文文檔 本文系統(tǒng)環(huán)境是CentOS7x86_64, Zabbi...
    Zhang21閱讀 7,968評(píng)論 0 37
  • 自定義key網(wǎng)絡(luò)發(fā)現(xiàn)Web監(jiān)控主動(dòng)檢測基于SNMP監(jiān)控基于JMX監(jiān)控Zabbix ProxyZabbix調(diào)優(yōu) 一、...
    哈嘍別樣閱讀 1,135評(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,233評(píng)論 1 76
  • 希望的定義——就是一個(gè)人相信自己的明天會(huì)因?yàn)榻裉斓呐Χ兊酶谩!2罟骸2挂伞!歹撒!?如果我們的行為是經(jīng)過思考的莲组,是充滿希...
    金金視界閱讀 2,285評(píng)論 1 2
  • 七月初,我打算找一份工作暖夭,頂著南方的酷暑锹杈,漫無目的地走在街上迈着〗咄看到一家小小的照相館門前貼有招工啟事,便走了進(jìn)去裕菠。老...
    海邊的卡夫拉閱讀 350評(píng)論 0 0