Docker下實戰zabbix三部曲之三:自定義監控項

經過上一章《Docker下實戰zabbix三部曲之二:監控其餘機器》的實戰,咱們瞭解了對機器的監控是經過在機器上安裝zabbix agent來完成的,zabbix agent鏈接上zabbix server以後,將本身所在機器的信息定時給到zabbix server,這樣就實現了機器的監控; 可是咱們能監控到的只有cpu,磁盤這些基礎信息,對於一些業務信息例如訪問量,某個邏輯的執行成功失敗次數等信息,咱們也想進行監控,這就須要咱們去製做自定義監控項了,本章咱們就一塊兒來實戰自定義監控項吧。java

全系列文章連接:

  1. 《Docker下實戰zabbix三部曲之一:極速體驗》
  2. 《Docker下實戰zabbix三部曲之二:監控其餘機器》
  3. 《Docker下實戰zabbix三部曲之三:自定義監控項》

機器部署狀況一覽

總的來講,有四臺機器,各自的功能以下: a. 假設有一個機器在運行web應用,容器是tomcat,這個應用有個接口http://localhost:8080/zabbixcustomitemdemo/count,能夠返回最近一分鐘的某個業務量(例如網站訪問次數);mysql

b. 有一臺機器安裝了zabbix agent,做爲自定義監控項的載體; c. 有一臺機器安裝了zabbix server; d. 有一臺機器安裝了mysql,做爲zabbix系統的數據庫;git

總體部署以下圖所示:github

這裏寫圖片描述

運行web應用的server

這是個基於maven的java web應用,裏面有個spring mvc的controller,提供一個http服務,範圍某個業務每分鐘的業務量,代碼以下圖所示:web

@Controller
public class CountController {

    @RequestMapping("/count")
    @ResponseBody
    public int count(String model, String type) {
        int base;
        int max;
        int min;

        if("a".equals(model)){
            base = 50000;
        }else{
            base =10000;
        }

        if("0".equals(type)){
            max = 9000;
            min = 1000;
        }else{
            max = 1000;
            min = 0;
        }

        return base + new Random().nextInt(max)%(max-min+1);
    }
}

從以上代碼咱們能夠看出,http服務會返回隨機數,此服務接受兩個參數model和type,當model等於」a」時返回的隨機數從50000開始,model不等於」a」時返回的隨機數從10000開始,當type等於」0」時,在base的基礎上增長的值是1000到9000之間,當type不等於」0」時,在base的基礎上增長的值是0到1000之間;spring

整個工程的代碼已經上傳到git上,地址是git@github.com:zq2599/blog_demos.git,這個目錄下由多個工程,本次實戰的工程是zabbixcustomitemdemo,以下圖:sql

這裏寫圖片描述

docker-compose.yml文件

上面咱們已經把四臺機器的功能和關係梳理清楚了,如今就來制定docker-compose.yml文件吧:docker

version: '2'
services:
  zabbix-mysql-service: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql-service
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server-service:
    image: monitoringartist/zabbix-xxl:3.2.6
    links: 
      - zabbix-mysql-service:mysqlhost
    container_name: zabbix-server-service
    restart: always
    depends_on:
      - zabbix-mysql-service
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888
  zabbix-agent-a:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-a
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-a
      - ZBX_SERVER_HOST=zabbixserverhost
  tomcat-server-service:
    image: bolingcavalry/bolingcavalrytomcat:0.0.1
    container_name: tomcat-server
    restart: always
    ports:
      - "8080:8080"

yml文件的內容如上所示,其中mysql、zabbix server,zabbix agent的配置和上一章《Docker下實戰zabbix三部曲之二:監控其餘機器》是同樣的,新增的是一個tomcat的鏡像,這個鏡像是我在tomcat官方鏡像的基礎上作了點小改動,使得這個tomcat支持在線部署web應用,關於tomcat在線部署應用,請看文章《實戰docker,編寫Dockerfile定製tomcat鏡像,實現web應用在線部署》shell

準備好yml文件以後,打開終端,在yml文件所在目錄下執行<font color="red">docker-compose up -d</font>能夠將yml文件中全部的容器都啓動;數據庫

注意,若是您的電腦以前已經運行過上一章《Docker下實戰zabbix三部曲之二:監控其餘機器》中的docker-compose.yml文件,那麼本次執行docker-compose up -d會提示啓動失敗,已有一樣名稱的容器存在,這時候能夠去上一章的docker-compose.yml文件所在目錄執行docker-compose down,也能夠經過docker ps -a將全部容器列出,再經過docker stop命令依次中止全部容器,再執行docker-compose rm命令依次刪除;

###部署web應用### 打開終端,進入web工程zabbixcustomitemdemo的目錄下,執行命令<font color="red">mvn clean package -U -Dmaven.test.skip=true tomcat7:redeploy</font>,便可將web工程部署到tomcat容器上,關於在線部署的細節請參照文章《實戰docker,編寫Dockerfile定製tomcat鏡像,實現web應用在線部署》;

部署成功後,打開瀏覽器,訪問http://localhost:8080/zabbixcustomitemdemo/count,web server會返回一個數字,以下圖所示:

這裏寫圖片描述

###製做訪問url的shell腳本### 接下來咱們要在zabbix agent上作一個shell腳本,此腳本的功能時發起http請求http://localhost:8080/zabbixcustomitemdemo/count?model=a&type=0,就能獲得web服務響應的數字,若是此腳本每分鐘被調用一次,就能獲得完整的監控曲線圖了;

a. 首先,執行<font color="red">docker exec -it zabbix-agent-a /bin/bash</font>登陸zabbix agent的容器; b. 登陸後,執行<font color="red">apt-get update</font>更新apt; c. 前後執行<font color="red">apt-get install wget</font>和<font color="red">apt-get install vim</font>,安裝wget和vi工具; d. 新建目錄/usr/work/,在此目錄下用vi建立一個shell文件biz_count.sh,內容以下:

#"!/bin/bash
wget -qO- http://tomcathost:8080/zabbixcustomitemdemo/count?model=$1\&type=$2
echo ""

上面代碼的功能是訪問http服務獲取一個數字,其中model和type用的是shell的入參; 注意兩個細節: 第一個:最後一行代碼<font color="red">echo 「」</font>,實踐證實這一行是頗有用的,有了這一行就會在輸出http返回的數字後進行換行,有了換行數據才能成功上報到zabbix server; 第二個:wget命令後面的url參數中,」&」符號前面要加轉義的斜槓」\」;

e. 執行<font color="red">chmod a+x biz_count.sh</font>,給shell賦予可執行權限;

###agent上添加監控項### 繼續在zabbix agent容器上,咱們要添加一個自定義監控項,這樣後面在zabbix server上就能使用該監控項了: a. 在/etc/zabbix/zabbix_agentd.d目錄下,新增一個biz.conf文件,內容以下:

UserParameter=get_total_num[*],/usr/work/biz_count.sh $1 $2

以上代碼配置了一個自定義監控項,名稱是get_total_num,能夠接受兩個入參,該監控項會調用biz_count.sh這個腳本,而且把外部傳來的兩個入參直接傳遞給biz_count.sh;

b. 執行<font color="red">chmod a+r biz.conf</font>使得該文件可讀;

###在zabbix agent上測試### 繼續在zabbix agent容器上,執行如下命令來測試剛剛新加的監控項:

/usr/sbin/zabbix_agentd -t get_total_num[a,0]

中括號中的a,0表示兩個入參分別是」a」和」0」,咱們執行四次,入參分別用[a,0]、[b,0]、[a,1]、[b,1],獲得的結果以下圖所示:

這裏寫圖片描述

四個返回值分別是5474一、1709七、5056四、10919,結合前面的java代碼能夠發現兩個參數都生效了,數字的大小範圍因入參而變化;

爲了讓監控項生效,須要重啓zabbix agent,不過這裏有個更快捷的方法能夠試試: a. 執行<font color="red">exit</font>退出zabbix agent容器; b. 執行<font color="red">docker restart zabbix-agent-a</font>重啓zambia agent容器;

到了這裏,自定義監控項已經準備好了,接下來在zabbix server上把它配置成功,咱們就能看到監控數據和曲線圖了,不過在配置前,咱們能夠在zabbix server上測試一下可否成功調用zabbix agent上的監控項;

在zabbix server上測試agent機器的監控項

首先咱們要搞清楚zabbix agent機器的ip,有兩種方法: 第一種,執行<font color="red">docker exec -it zabbix-agent-a /bin/bash</font>登陸zabbix agent的容器,在容器中執行<font color="red">ip addr</font>命令能夠獲得ip; 第二種,直接執行<font color="red">docker exec -it zabbix-agent-a ip addr</font>命令獲得ip;

不論哪一種,都能獲得zabbix-agent的ip是172.31.0.5;

如今咱們登陸zabbix server容器,執行命令<font color="red">docker exec -it zabbix-server-service /bin/bash</font>便可登陸,登陸後執行如下命令:

zabbix_get -s 172.31.0.5 -k get_total_num[a,0]

以下圖所示,測試成功,調用agent的監控項返回了符合預期的數據:

這裏寫圖片描述

還記得咱們剛纔在zabbix agent上配置好以後,須要重啓agent服務或者重啓zabbix agent容器,若是您忘了這一步,如今zabbix server上測試會獲得以下錯誤提示:

這裏寫圖片描述

這時候去重啓一下,再回來測試就能夠成功了。

在管理頁面上添加監控項

在瀏覽器上輸入」http://localhost:8888/「登陸管理頁面,先添加agent機器,以下圖:

這裏寫圖片描述

添加以後,點擊下圖紅框位置,進入監控項頁面:

這裏寫圖片描述

以下圖,點擊右上角的「Create item」便可開始添加監控項:

這裏寫圖片描述

新增的監控項,咱們只要填寫Name,Key,Update interval(更新頻率)這幾個字段,其餘的保持不變,每一個要更新的字段的內容以下圖:

這裏寫圖片描述

填寫並保存後,咱們能夠在Monitoring -> Latest data中看到最新的監控項數據,以下圖:

這裏寫圖片描述

接下來咱們添加一個監控圖形,操做以下圖所示,能夠進入圖形管理頁面:

這裏寫圖片描述

以下圖,點擊右上角的「Create graph」建立一個圖形:

這裏寫圖片描述

新建圖形的時候,名稱隨意,只要Items選中剛剛建立的監控項便可,以下圖:

這裏寫圖片描述

建立成功,如今要看看效果了,操做以下圖所示:

這裏寫圖片描述

點擊」add」以後,在彈出的頁面上選擇剛剛咱們新建的圖形選項,操做完畢後,點擊下圖紅框位置,就能看見曲線圖了:

這裏寫圖片描述

曲線圖以下:

這裏寫圖片描述

以上就是自定義監控項開發和設置的全部過程,基於監控項的操做,除了圖形還能添加tirgger用來告警,在添加action用來肯定告警的動做,例如郵件短信的,有興趣的讀者能夠實際操做實戰。

歡迎關注個人公衆號

在這裏插入圖片描述

相關文章
相關標籤/搜索