Zabbix-(五)監控Docker容器與自定義jvm監控項

Zabbix-(五)監控Docker容器與自定義jvm監控項

一.前言

前文中講述了Zabbix對服務器硬件方面的監控功能,本文將講述利用Zabbix監控Docker容器中的Java Web服務,並經過自定義監控項,監控JVM老年代使用狀況以及GC信息。Zabbix其實提供了JMX監控,自帶了JMX模板可以直接監控JVM信息,本文主要側重於自定義參數與自定義監控項,關於JMX會在以後的文章中介紹。html

準備

  • Zabbix Server (Zabbix 4.4) (ip:192.168.152.140)
  • 運行Java應用的主機 如下簡稱Server-A (已被Zabbix監控) (ip:192.168.152.142)


二.開啓agent用戶自定義參數配置

  1. 修改配置python

    使用自定義參數時,首先須要修改Server-A的agent配置docker

    # vim /etc/zabbix/zabbix_agentd.conf

    修改配置 UnsafeUserParameters=1shell

    UnsafeUserParameters=1
  2. 重啓zabbix-agentjson

    # systemctl restart zabbix-agent


三.運行tomcat容器

在Server-A運行tomcat容器vim

# docker run --name tomcat -p 8080:8080 -dit tomcat:jdk8-adoptopenjdk-hotspot

將zabbix帳號添加到docker組。參考部署問題tomcat

# sudo gpasswd  -a zabbix docker

外部訪問測試一下bash

訪問tomcat


四.建立自定義Docker模板

咱們能夠定義一個比較通用的Docker模板,有服務須要被監控時,直接連接該模板便可。服務器

  1. 建立羣組jvm

    點擊【配置】-【主機羣組】-【建立主機羣組】

    定義一個組名 Docker Group

    配置項
    * 組名 Docker Group

  2. 建立模板

    建立一個自定義模板,模板名稱Docker Template,選擇上步驟建立的Docker Group羣組

    配置項
    * 模板名稱 Docker Template
    * 羣組 Docker Group


五.編寫腳本與自定義監控參數

咱們須要編寫一個腳本,用於發現當前正在運行的docker容器(這裏使用容器名稱)。

  1. 在Server-A編寫發現運行容器的python腳本

    建立腳本

    # cd /data/zabbix
    # touch find_container.py
    # chmod a+x find_container.py
    # vim find_container.py

    腳本內容:

    #!/usr/bin/env python
    import os
    import json
    
    # 查看當前運行的docker容器
    t=os.popen(""" docker ps  |grep -v 'CONTAINER ID'|awk {'print $NF'} """)
    container_name = []
    for container in  t.readlines():
            r = os.path.basename(container.strip())
            container_name += [{'{#CONTAINERNAME}':r}]
    # 轉換成json數據
    print json.dumps({'data':container_name},sort_keys=True,indent=4,separators=(',',':'))
    運行腳本,查看一下json數據格式:
    {
        "data":[
            {
                "{#CONTAINERNAME}":"tomcat"
            }
        ]
    }
  2. 在Server-A自定義容器發現參數

    咱們須要自定義一個鍵值對的配置類型,以便Zabbix能夠經過鍵讀取到值。

    增長自定義參數

    # cd /etc/zabbix/zabbix_agentd.d
    # vim userparameter_find_container.conf
    docker.container /data/zabbix/find_container.py (腳本的運行結果)
    UserParameter=docker.container,/data/zabbix/find_container.py
  3. 在Server-A建立查看容器JVM GC狀況的腳本

    咱們可使用jstat -gcutil 命令查看GC狀況


    建立python腳本

    # cd /data/zabbix
    # touch monitor_gc.py
    # chmod a+x monitor_gc.py
    # vim monitor_gc.py

    腳本內容

    #!/usr/bin/python
    import sys
    import os
    
    def monitor_gc(container_name, keyword):
            cmd = ''' docker exec %s bash -c "jstat -gcutil 1" | grep -v S0 | awk '{print $%s}' ''' %(container_name, keyword)
            value = os.popen(cmd).read().replace("\n","")
            print value
    
    if __name__ == '__main__':
            # 參數1:容器的名稱
            # 參數2:查看第幾列(例如 Eden區在第3列傳入3,Full GC次數在第9列傳入9)
            container_name, keyword = sys.argv[1], sys.argv[2]
            monitor_gc(container_name, keyword)

    測試腳本,查看當前tomcat容器Full GC次數

    # /data/zabbix/monitor_gc.py 'tomcat' '9'


  4. 在Server-A自定義Zabbix JVM GC參數

    一樣,增長一個conf文件,表示自定義參數

    # cd /etc/zabbix/zabbix_agentd.d
    # touch userparameter_gc_status.conf
    # vim userparameter_gc_status.conf
    jvm.gc.status[*] /data/zabbix/monitor_gc.py $1 $2
    UserParameter=jvm.gc.status[*], /data/zabbix/monitor_gc.py $1 $2

    jvm.gc.status[*] 表示可使用參數。其中$1表示參數1,即容器名稱;$2表示參數2,須要查看哪項GC信息,$1 $2都是經過Zabbix配置時傳遞的。Zabbix自定義參數

  5. 在Zabbix server上測試自定義參數

    爲zabbix sever安裝zabbix-get

    # yum install -y zabbix-get

    測試自定義參數,若是有權限問題,能夠參考部署問題

    # zabbix_get -s 192.168.152.142 -p 10050 -k docker.container
    # zabbix_get -s 192.168.152.142 -p 10050 -k "jvm.gc.status['tomcat', 9]"


六.Zabbix模板增長自動發現規則

上述配置中,已經能夠經過腳本獲取到已運行的容器信息,此步驟將經過Zabbix配置界面,在模板中添加自動發現規則,以發現被監控主機中正在運行的docker容器,並利用這些獲取的數據進一步監控容器中jvm數據。

  1. 建立自動發現規則

    點擊【配置】-【模板】-【Docker Template】

    點擊【自動發現規則】-【建立發現規則】

    先配置【自動發現規則】

    配置項
    * 名稱 發現正在運行的Docker容器規則
    類型 Zabbix 客戶端
    * 鍵值 docker.container (這是咱們上述步驟中自定義的鍵值)
    其餘配置 根據須要配置

    鍵值配置項是以前自定義的監控鍵值

    再配置【過濾器】

    則配置自定義腳本返回json數據中的key值

    配置項
    {#CONTAINERNAME}

  2. 添加監控項原型

    點擊新建的自動發現規則的【監控項原型】-【建立監控項原型】


    輸入參數

    配置項
    * 名稱 Tomcat Full GC次數監控項
    類型 Zabbix 客戶端
    * 鍵值 jvm.gc.status[{#CONTAINERNAME} , 9]
    其餘配置項 根據須要填寫

    鍵值是自定義jvm gc參數步驟中定義的參數,{#CONTAINERNAME} 是jvm.gc.status的參數1,使用了自動發現規則,發現到的docker容器名稱(本文中便是 tomcat);參數2 9 則是表示須要查看FullGC次數,FGC列(第9列)

    除此以外,還能夠添加Old老年代(對應第4列),Full GC時間(對應第10列)等監控項,這裏就不一一添加了,和上述過程基本一致,只需修改參數2便可(也能夠利用剛新建的監控項原型進行【克隆】)。


七.連接模板

將上述自定義的模板連接到Server-A主機

八.DashBoard添加可視化圖形

回到Zabbix首頁能夠爲新增的自定義監控項,增長圖形(添加圖形步驟能夠參考Zabbix-(三)監控主機CPU、磁盤、內存並建立監控圖形

九.其餘

部署問題

  • zabbix在執行腳本時,是使用的zabbix帳戶,所以可能要注意要給zabbix帳號賦予權限。

    例如,zabbix帳戶沒法使用docker命令,將zabbix添加到docker組

    # sudo gpasswd -a zabbix docker
  • zabbix server沒法執行agent自定義參數中的腳本

    爲agent主機設置

    # setenforce 0
相關文章
相關標籤/搜索