溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker怎么自定義監(jiān)控項

發(fā)布時間:2021-12-13 14:41:15 來源:億速云 閱讀:171 作者:iii 欄目:云計算

本篇內(nèi)容介紹了“Docker怎么自定義監(jiān)控項”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

機器部署情況一覽

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

b. 有一臺機器安裝了zabbix agent,作為自定義監(jiān)控項的載體; c. 有一臺機器安裝了zabbix server; d. 有一臺機器安裝了mysql,作為zabbix系統(tǒng)的數(shù)據(jù)庫;

整體部署如下圖所示:

Docker怎么自定義監(jiān)控項

運行web應用的server

這是個基于maven的java web應用,里面有個spring mvc的controller,提供一個http服務,范圍某個業(yè)務每分鐘的業(yè)務量,代碼如下圖所示:

@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服務會返回隨機數(shù),此服務接受兩個參數(shù)model和type,當model等于”a”時返回的隨機數(shù)從50000開始,model不等于”a”時返回的隨機數(shù)從10000開始,當type等于”0”時,在base的基礎上增加的值是1000到9000之間,當type不等于”0”時,在base的基礎上增加的值是0到1000之間;

整個工程的代碼已經(jīng)上傳到git上,地址是git@github.com:zq2599/blog_demos.git,這個目錄下由多個工程,本次實戰(zhàn)的工程是zabbixcustomitemdemo,如下圖:

Docker怎么自定義監(jiān)控項

docker-compose.yml文件

上面我們已經(jīng)把四臺機器的功能和關(guān)系梳理清楚了,現(xiàn)在就來制定docker-compose.yml文件吧:

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文件的內(nèi)容如上所示,其中mysql、zabbix server,zabbix agent的配置和上一章《Docker下實戰(zhàn)zabbix三部曲之二:監(jiān)控其他機器》是一樣的,新增的是一個tomcat的鏡像,這個鏡像是我在tomcat官方鏡像的基礎上做了點小改動,使得這個tomcat支持在線部署web應用,關(guān)于tomcat在線部署應用,請看文章《實戰(zhàn)docker,編寫Dockerfile定制tomcat鏡像,實現(xiàn)web應用在線部署》

準備好yml文件之后,打開終端,在yml文件所在目錄下執(zhí)行<font color="red">docker-compose up -d</font>可以將yml文件中所有的容器都啟動;

注意,如果您的電腦之前已經(jīng)運行過上一章《Docker下實戰(zhàn)zabbix三部曲之二:監(jiān)控其他機器》中的docker-compose.yml文件,那么本次執(zhí)行docker-compose up -d會提示啟動失敗,已有同樣名稱的容器存在,這時候可以去上一章的docker-compose.yml文件所在目錄執(zhí)行docker-compose down,也可以通過docker ps -a將所有容器列出,再通過docker stop命令依次停止所有容器,再執(zhí)行docker-compose rm命令依次刪除;

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

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

Docker怎么自定義監(jiān)控項

###制作訪問url的shell腳本### 接下來我們要在zabbix agent上做一個shell腳本,此腳本的功能時發(fā)起http請求http://localhost:8080/zabbixcustomitemdemo/count?model=a&type=0,就能得到web服務響應的數(shù)字,如果此腳本每分鐘被調(diào)用一次,就能得到完整的監(jiān)控曲線圖了;

a. 首先,執(zhí)行<font color="red">docker exec -it zabbix-agent-a /bin/bash</font>登錄zabbix agent的容器; b. 登錄后,執(zhí)行<font color="red">apt-get update</font>更新apt; c. 先后執(zhí)行<font color="red">apt-get install wget</font>和<font color="red">apt-get install vim</font>,安裝wget和vi工具; d. 新建目錄/usr/work/,在此目錄下用vi創(chuàng)建一個shell文件biz_count.sh,內(nèi)容如下:

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

上面代碼的功能是訪問http服務獲取一個數(shù)字,其中model和type用的是shell的入?yún)ⅲ?注意兩個細節(jié): 第一個:最后一行代碼<font color="red">echo “”</font>,實踐證明這一行是很有用的,有了這一行就會在輸出http返回的數(shù)字后進行換行,有了換行數(shù)據(jù)才能成功上報到zabbix server; 第二個:wget命令后面的url參數(shù)中,”&”符號前面要加轉(zhuǎn)義的斜杠”\”;

e. 執(zhí)行<font color="red">chmod a+x biz_count.sh</font>,給shell賦予可執(zhí)行權(quán)限;

###agent上添加監(jiān)控項### 繼續(xù)在zabbix agent容器上,我們要添加一個自定義監(jiān)控項,這樣后面在zabbix server上就能使用該監(jiān)控項了: a. 在/etc/zabbix/zabbix_agentd.d目錄下,新增一個biz.conf文件,內(nèi)容如下:

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

以上代碼配置了一個自定義監(jiān)控項,名稱是get_total_num,可以接受兩個入?yún)ⅲ摫O(jiān)控項會調(diào)用biz_count.sh這個腳本,并且把外部傳來的兩個入?yún)⒅苯觽鬟f給biz_count.sh;

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

###在zabbix agent上測試### 繼續(xù)在zabbix agent容器上,執(zhí)行以下命令來測試剛剛新加的監(jiān)控項:

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

中括號中的a,0表示兩個入?yún)⒎謩e是”a”和”0”,我們執(zhí)行四次,入?yún)⒎謩e用[a,0]、[b,0]、[a,1]、[b,1],得到的結(jié)果如下圖所示:

Docker怎么自定義監(jiān)控項

四個返回值分別是54741、17097、50564、10919,結(jié)合前面的java代碼可以發(fā)現(xiàn)兩個參數(shù)都生效了,數(shù)字的大小范圍因入?yún)⒍兓?/p>

為了讓監(jiān)控項生效,需要重啟zabbix agent,不過這里有個更快捷的方法可以試試: a. 執(zhí)行<font color="red">exit</font>退出zabbix agent容器; b. 執(zhí)行<font color="red">docker restart zabbix-agent-a</font>重啟zambia agent容器;

到了這里,自定義監(jiān)控項已經(jīng)準備好了,接下來在zabbix server上把它配置成功,我們就能看到監(jiān)控數(shù)據(jù)和曲線圖了,不過在配置前,我們可以在zabbix server上測試一下能否成功調(diào)用zabbix agent上的監(jiān)控項;

在zabbix server上測試agent機器的監(jiān)控項

首先我們要搞清楚zabbix agent機器的ip,有兩種方法: 第一種,執(zhí)行<font color="red">docker exec -it zabbix-agent-a /bin/bash</font>登錄zabbix agent的容器,在容器中執(zhí)行<font color="red">ip addr</font>命令可以得到ip; 第二種,直接執(zhí)行<font color="red">docker exec -it zabbix-agent-a ip addr</font>命令得到ip;

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

現(xiàn)在我們登錄zabbix server容器,執(zhí)行命令<font color="red">docker exec -it zabbix-server-service /bin/bash</font>即可登錄,登錄后執(zhí)行以下命令:

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

如下圖所示,測試成功,調(diào)用agent的監(jiān)控項返回了符合預期的數(shù)據(jù):

Docker怎么自定義監(jiān)控項

還記得我們剛才在zabbix agent上配置好之后,需要重啟agent服務或者重啟zabbix agent容器,如果您忘了這一步,現(xiàn)在zabbix server上測試會得到如下錯誤提示:

Docker怎么自定義監(jiān)控項

這時候去重啟一下,再回來測試就可以成功了。

在管理頁面上添加監(jiān)控項

在瀏覽器上輸入”http://localhost:8888/“登錄管理頁面,先添加agent機器,如下圖:

Docker怎么自定義監(jiān)控項

添加之后,點擊下圖紅框位置,進入監(jiān)控項頁面:

Docker怎么自定義監(jiān)控項

如下圖,點擊右上角的“Create item”即可開始添加監(jiān)控項:

Docker怎么自定義監(jiān)控項

新增的監(jiān)控項,我們只要填寫Name,Key,Update interval(更新頻率)這幾個字段,其他的保持不變,每個要更新的字段的內(nèi)容如下圖:

Docker怎么自定義監(jiān)控項

填寫并保存后,我們可以在Monitoring -> Latest data中看到最新的監(jiān)控項數(shù)據(jù),如下圖:

Docker怎么自定義監(jiān)控項

接下來我們添加一個監(jiān)控圖形,操作如下圖所示,可以進入圖形管理頁面:

Docker怎么自定義監(jiān)控項

如下圖,點擊右上角的“Create graph”創(chuàng)建一個圖形:

Docker怎么自定義監(jiān)控項

新建圖形的時候,名稱隨意,只要Items選中剛剛創(chuàng)建的監(jiān)控項即可,如下圖:

Docker怎么自定義監(jiān)控項

創(chuàng)建成功,現(xiàn)在要看看效果了,操作如下圖所示:

Docker怎么自定義監(jiān)控項

點擊”add”之后,在彈出的頁面上選擇剛剛我們新建的圖形選項,操作完畢后,點擊下圖紅框位置,就能看見曲線圖了:

Docker怎么自定義監(jiān)控項

曲線圖如下:

Docker怎么自定義監(jiān)控項

“Docker怎么自定義監(jiān)控項”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI