Zabbix在性能眨猎、穩(wěn)定性測(cè)試中的應(yīng)用

一抑进、概述

Zabbix是一款企業(yè)級(jí)運(yùn)維監(jiān)控系統(tǒng),在運(yùn)維領(lǐng)域已有廣泛的應(yīng)用睡陪。而本文寺渗,將主要考慮將其引入測(cè)試工作當(dāng)中,對(duì)系統(tǒng)的整體及各服務(wù)進(jìn)程的資源消耗進(jìn)行實(shí)時(shí)監(jiān)控兰迫,以期能夠?yàn)樾阅軠y(cè)試分析信殊、問(wèn)題定位提供有效的數(shù)據(jù)支撐。當(dāng)然汁果,zabbix可以做的遠(yuǎn)不止這些涡拘,此處僅以測(cè)試領(lǐng)域?yàn)橹鲌?chǎng)景進(jìn)行介紹。
Zabbix架構(gòu)由zabbix-server须鼎、數(shù)據(jù)庫(kù)鲸伴、web組件、zabbix-agent 四部分組成晋控。其中zabbix-agent需要安裝在被監(jiān)控端汞窗,將數(shù)據(jù)采集后傳給zabbix-server。Zabbix-server再將信息處理存儲(chǔ)于數(shù)據(jù)庫(kù)(一般是mysql)赡译。web組件將數(shù)據(jù)展示給用戶仲吏。

二、Zabbix服務(wù)端docker化部署

Zabbix服務(wù)端主要由zabbix-server蝌焚、數(shù)據(jù)庫(kù)裹唆、web組件三部分組成。為簡(jiǎn)化安裝步驟只洒,采用docker化部署许帐。
docker官方倉(cāng)庫(kù)已有zabbix的相關(guān)鏡像,如果環(huán)境可以連接互聯(lián)網(wǎng)毕谴,那么直接執(zhí)行以下命令即可成畦,依次啟動(dòng)容器即可:

docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      -d mysql:5.7  \
--character-set-server=utf8 --collation-server=utf8_bin


docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      --link mysql-server:mysql \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest

docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix" \
      -e MYSQL_ROOT_PASSWORD="zabbix" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

如果環(huán)境在內(nèi)網(wǎng)距芬,則可先將下載好的docker鏡像導(dǎo)入內(nèi)網(wǎng)環(huán)境,后續(xù)步驟同上循帐。
參考上傳docker鏡像至內(nèi)網(wǎng)服務(wù)器命令如下:

docker image load -i xxx.tar

至此框仔,zabbix服務(wù)端就已安裝好了≈粞可以通過(guò)登錄web頁(yè)面 http://xx.xx.xx.xx
用戶名密碼:Admin/zabbix (xx.xx.xx.xx為你的虛擬機(jī)ip)

三离斩、Zabbix agent 批量分發(fā)部署

Zabbix服務(wù)端只有一個(gè),但zabbix-agent瘪匿、及采集腳本需要下發(fā)至各個(gè)被監(jiān)控節(jié)點(diǎn)跛梗。此處使用ansible來(lái)實(shí)現(xiàn)批量部署、配置agent柿顶。
自動(dòng)部署相關(guān)文件git下載地址:
https://github.com/ZengHongfu/zabbix
將以上文件下載至zabbix-server所在虛擬機(jī)茄袖,如下圖:

編輯hosts文件,配置好待監(jiān)控的主機(jī)信息嘁锯,如下:

[vm]
10.113.43.140   name=acmp_140   zabbix_server=10.113.14.243  ansible_ssh_pass=Admin
10.113.43.152   name=acmp_152   zabbix_server=10.113.14.243  ansible_ssh_pass=Admin

解釋如下:
第一列:待監(jiān)控的主機(jī)ip
第二列:待監(jiān)控的主機(jī)名字
第三列:zabbix-server所在虛擬機(jī)IP
第四列:待監(jiān)控的主機(jī)的后臺(tái)密碼
然后執(zhí)行以下命令進(jìn)行批量部署配置:

echo '' > /root/.ssh/known_hosts
ansible-playbook -i hosts send_zabbix_agent.yml

解釋如下:
通過(guò)ansible-playbook執(zhí)行編排好的任務(wù),編排內(nèi)容詳情見send_zabbix_agent.yml文件聂薪,內(nèi)容如下:

---
- hosts: vm
  remote_user: root
  tasks:
    - name: Create data directory
      file: path=/root/zabbix state=directory owner=root group=root

    - name: cp zabbix_ageent_rpm to host
      copy: src=./zabbix-agent-4.2.1-1.el7.x86_64.rpm dest=/root/zabbix/ owner=root group=root mode=0555

    - name: install zabbix-agent
      yum: name=/root/zabbix/zabbix-agent-4.2.1-1.el7.x86_64.rpm state=present

    - name: cp zabbix_base_script to host
      copy: src=./cloud.conf dest=/etc/zabbix/zabbix_agentd.d/ owner=root group=root mode=0644

    - name: cp zabbix_scripts to host
      copy: src=./scripts dest=/root/zabbix/ owner=root group=root mode=0555

    - name: midify_agent_config -->Server
      shell: sed -n '/^Server=/p' /etc/zabbix/zabbix_agentd.conf | xargs -i sed -i 's/^{}/Server={{zabbix_server}}/g' /etc/zabbix/zabbix_agentd.conf
    - name: midify_agent_config -->ServerActive
      shell: sed -n '/^ServerActive=/p' /etc/zabbix/zabbix_agentd.conf | xargs -i sed -i 's/^{}/ServerActive={{zabbix_server}}/g' /etc/zabbix/zabbix_agentd.conf
    - name: midify_agent_config -->Hostname
      shell: sed -n '/^Hostname=/p' /etc/zabbix/zabbix_agentd.conf | xargs -i sed -i 's/^{}/Hostname={{name}}/g' /etc/zabbix/zabbix_agentd.conf

    - name: open port 10050
      shell: iptables -A INPUT -p tcp --dport 10050 -j ACCEPT

    - name: restart zabbix-agent
      service: name=zabbix-agent state=restarted

    - name: set zabbix-agent start when boot
      shell: chkconfig zabbix-agent on

至此家乘,zabbix-agent以及scripts目錄下的腳本都已部署配置到了所有被監(jiān)控主機(jī)。剩下的事就是在web頁(yè)面使用zabbix了藏澳。

四仁锯、Zabbix使用指南

4.1 zabbix常用基本概念

我們用到的常見概念主要有模板福也、監(jiān)控項(xiàng)毛秘、主機(jī)、觸發(fā)器呜师、聚合圖形蓄愁。此處僅對(duì)這幾項(xiàng)進(jìn)行簡(jiǎn)單介紹双炕,想了解更多的內(nèi)容,請(qǐng)移步官方文檔:https://www.zabbix.com/documentation/4.0/zh/manual

4.1.1 zabbix模板

模板內(nèi)包含多個(gè)監(jiān)控項(xiàng)撮抓、觸發(fā)器妇斤、應(yīng)用(相當(dāng)于監(jiān)控項(xiàng)的分組)。通俗一點(diǎn)來(lái)講丹拯,就是模板定義了它要去監(jiān)控什么數(shù)據(jù)站超,以及對(duì)監(jiān)控結(jié)果的響應(yīng)措施。
當(dāng)一個(gè)模版鏈接到一個(gè)主機(jī)后乖酬,主機(jī)會(huì)繼承這個(gè)模版中的所有對(duì)象死相。簡(jiǎn)單而言,一組預(yù)先定義好的檢查會(huì)被快速應(yīng)用到主機(jī)上咬像。
創(chuàng)建一個(gè)模板:
配置---->模板---->創(chuàng)建模板


在模板內(nèi)創(chuàng)建一個(gè)應(yīng)用集:
配置---->模板---->進(jìn)入已有的模板的詳情頁(yè)---->應(yīng)用集---->創(chuàng)建應(yīng)用集

在模板內(nèi)創(chuàng)建一個(gè)監(jiān)控項(xiàng):
配置---->模板---->進(jìn)入已有的模板的詳情頁(yè)---->監(jiān)控項(xiàng)---->創(chuàng)建監(jiān)控項(xiàng)

4.1.2 zabbix監(jiān)控項(xiàng)

最為核心的就是監(jiān)控項(xiàng)算撮,它定義了我們想要監(jiān)控什么數(shù)據(jù)双肤。
進(jìn)入添加監(jiān)控項(xiàng)頁(yè)面,如下圖:


設(shè)置完成钮惠,點(diǎn)擊添加即可茅糜,如下圖監(jiān)控項(xiàng)已成功添加 :

4.1.3 zabbix觸發(fā)器

Zabbix觸發(fā)器也是非常重要的,作用就是定義告警條件素挽,并檢查監(jiān)控項(xiàng)采集的數(shù)據(jù)蔑赘,一旦滿足條件,就觸發(fā)告警(告警方式多樣化:可zabbix檢測(cè)頁(yè)面告警预明,郵件告警缩赛,自定義方式告警等等)
現(xiàn)已上一節(jié)創(chuàng)建的監(jiān)控項(xiàng)為例,假設(shè)當(dāng)用戶進(jìn)程的CPU占用超過(guò)10%時(shí)撰糠,就觸發(fā)告警酥馍。
在模板內(nèi)創(chuàng)建一個(gè)觸發(fā)器:
配置---->模板---->進(jìn)入已有的模板的詳情頁(yè)---->觸發(fā)器---->創(chuàng)建觸發(fā)器
做如下配置即可:

4.1.4 主機(jī)

主機(jī)就是被監(jiān)控對(duì)象。添加步驟如下:
配置---->主機(jī)---->創(chuàng)建主機(jī)
做如下配置即可:


接下來(lái)為主機(jī)關(guān)聯(lián)模板

4.1.5聚合圖形
我們使用聚合圖形主要是將幾個(gè)有關(guān)聯(lián)的數(shù)據(jù)放在一起進(jìn)行對(duì)比觀察阅酪。如下步驟添加:
監(jiān)測(cè)---->聚合圖形---->創(chuàng)建聚合圖形


點(diǎn)擊新建的聚合圖形的構(gòu)造函數(shù)進(jìn)行配置:


點(diǎn)擊‘更改’在對(duì)應(yīng)位置添加圖形:

相同方式旨袒,共添加3個(gè)監(jiān)控項(xiàng)如下:

至此,聚合圖形添加完成术辐,就可以通過(guò)聚合圖形觀察數(shù)據(jù)走勢(shì)砚尽。
之后查看聚合圖形:
監(jiān)測(cè)---->聚合圖形---->所有聚合圖形列表---->點(diǎn)擊查看某個(gè)聚合圖形
效果如下:

4.2 zabbix擴(kuò)展監(jiān)控項(xiàng)的開發(fā)

Zabbix自帶了許多常用(通用的,基礎(chǔ)的)的監(jiān)控項(xiàng)辉词,但結(jié)合我們自己的平臺(tái)必孤,可能需要更多定制的監(jiān)控項(xiàng)。所以需要擴(kuò)展監(jiān)控項(xiàng)瑞躺。為了擴(kuò)展腳本規(guī)范化敷搪,便于后期維護(hù)〈鄙冢可以將我們擴(kuò)展的監(jiān)控項(xiàng)的key統(tǒng)一為這樣的格式:cloud.info[script-name,arg1,arg2,...]
例如:cloud.info[get_top,cpu,"/usr/bin/mongod"]
它是這樣工作的:在zabbix agent端赡勘,存在如下配置:/etc/zabbix/zabbix_agentd.d/cloud.conf,內(nèi)容如下:

UserParameter=cloud.info[*],/root/zabbix/scripts/cloud_zabbix.sh "$1" "$2" "$3" "$4"

也就是說(shuō)嘱么,我們擴(kuò)展的監(jiān)控項(xiàng)(cloud.info)是在agent端調(diào)用腳本/root/zabbix/scripts/cloud_zabbix.sh來(lái)獲取數(shù)據(jù)的狮含,而腳本/root/zabbix/scripts/cloud_zabbix.sh再根據(jù)傳入的參數(shù)(script-name)來(lái)調(diào)用其它腳本。 cloud_zabbix.sh內(nèi)容如下:

#!/bin/bash

filepath=$(dirname "$0")

if [ $# -lt 2 ];then 
    echo "Invalid parameter! $*"
    exit 1
fi

filename=$1

if [ -f "${filepath}/${filename}.sh" ];then
    file="${filepath}/${filename}.sh"
elif [ -f "${filepath}/${filename}.py" ];then
    file="${filepath}/${filename}.py"
else
    exit 1
fi

shift

ps -aux | grep "$file $*" | grep -v "grep" >/dev/null 2>&1
if [ $? = 1 ]; then
    $file $*
else
    echo "The same command running!"
fi

現(xiàn)在以添加監(jiān)控服務(wù)器的swap分區(qū)使用量為例曼振,簡(jiǎn)述擴(kuò)展監(jiān)控項(xiàng)的開發(fā)步驟如下几迄。
a、編寫腳本get_free.sh冰评,可通過(guò)傳參獲取到free的相關(guān)數(shù)據(jù)映胁,下發(fā)至被監(jiān)控端,如下:

#!/bin/bash
if [ "$1" == "Mem" ];then
    if [ "$2" == "used" ]; then
        res=$( free | awk 'NR==2{print $3/1024}' )
    else
        echo "Parameter error !"
    fi
elif [ "$1" == "Swap" ];then
    if [ "$2" == "used" ]; then
        res=$( free | awk 'NR==3{print $3/1024}' )
    else
        echo "Parameter error !"
    fi
else
    echo "Parameter error !"
fi
if [ $res ];then
    echo $res
fi

效果如下:


b甲雅、在zabbix上添加監(jiān)控項(xiàng) Swap used

4.3 其他注意事項(xiàng)

附:修改時(shí)區(qū)方法如下
在容器zabbix-web-nginx-mysql 內(nèi)解孙,
編輯 /etc/php7/conf.d/99-zabbix.ini 將 data.timezone=Asia/Shanghai

#cat /etc/php7/conf.d/99-zabbix.ini
max_execution_time=600
memory_limit=128M
post_max_size=16M
upload_max_filesize=2M
max_input_time=300
; always_populate_raw_post_data=-1
max_input_vars=10000
; date.timezone=Europe/Riga
date.timezone=Asia/Shanghai    //修改此處的
; session.save_path=/var/lib/php7

由于修改此配置重啟容器之后坑填,修改的內(nèi)容會(huì)被還原,所以直接使用kill 了php-fpm7的進(jìn)程殺掉
由于容器中有supervisord管理php-fpm kill掉fpm主進(jìn)程很快也會(huì)被重啟此時(shí)發(fā)現(xiàn)zabbix的頁(yè)面時(shí)間已經(jīng)和系統(tǒng)時(shí)間一致

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弛姜,一起剝皮案震驚了整個(gè)濱河市脐瑰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廷臼,老刑警劉巖苍在,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荠商,居然都是意外死亡寂恬,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門莱没,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)初肉,“玉大人,你說(shuō)我怎么就攤上這事饰躲⊙烙剑” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵属铁,是天一觀的道長(zhǎng)眠寿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)焦蘑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任盒发,我火速辦了婚禮例嘱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宁舰。我一直安慰自己拼卵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布蛮艰。 她就那樣靜靜地躺著腋腮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壤蚜。 梳的紋絲不亂的頭發(fā)上即寡,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音袜刷,去河邊找鬼聪富。 笑死,一個(gè)胖子當(dāng)著我的面吹牛著蟹,可吹牛的內(nèi)容都是我干的墩蔓。 我是一名探鬼主播梢莽,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奸披!你這毒婦竟也來(lái)了昏名?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阵面,失蹤者是張志新(化名)和其女友劉穎轻局,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膜钓,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗽交,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颂斜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夫壁。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沃疮,靈堂內(nèi)的尸體忽然破棺而出盒让,到底是詐尸還是另有隱情,我是刑警寧澤司蔬,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布邑茄,位于F島的核電站,受9級(jí)特大地震影響俊啼,放射性物質(zhì)發(fā)生泄漏肺缕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一授帕、第九天 我趴在偏房一處隱蔽的房頂上張望同木。 院中可真熱鬧,春花似錦跛十、人聲如沸彤路。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洲尊。三九已至,卻和暖如春奈偏,著一層夾襖步出監(jiān)牢的瞬間坞嘀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工霎苗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姆吭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓唁盏,卻偏偏與公主長(zhǎng)得像内狸,于是被迫代替她去往敵國(guó)和親检眯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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