本文主要分為3個部分
創(chuàng)新互聯(lián)是專業(yè)的梨樹網(wǎng)站建設(shè)公司,梨樹接單;提供網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行梨樹網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!第一部分 前言,主要說說需求和獲取數(shù)據(jù)的命令
第二部分 zabbix,主要說如何利用lld獲得想要監(jiān)控的數(shù)據(jù)
第三部分 ansible,主要提供一個ansible playbook來分發(fā)該監(jiān)控所需的文件
第一部分 前言部分
最近有一個需求是對系統(tǒng)的IO進(jìn)行監(jiān)控,最后決定從iostat獲取數(shù)據(jù)。
這是具體的命令:
iostat -x -d -m 1 3
參數(shù)簡單解析:
-x Display extended statistics
-d Display the device utilization report
-m Display statistics in megabytes per second instead of blocks or kilobytes per second
那么為什么要 1 3呢?
我們用
iostat -x -d -m 1
多次測試,會發(fā)現(xiàn)第一次輸出的值變動不大,第二次,第三次輸出的值會有一定的變化,因此我更偏向與取第二次,第三次的值做平均
命令的輸出格式如下:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
可以較好地滿足我們的監(jiān)控需求
第二部分 zabbix部分
接下來,我們就用zabbix的LLD來自動發(fā)現(xiàn)當(dāng)前系統(tǒng)的Device值
cat /etc/zabbix/scripts/io_discovery.py
#!/bin/env python import os import commands (status,output) = commands.getstatusoutput("iostat -x -d -m | sed -n '4,$p' | grep -v ^$| awk '{print $1}'") DISKS = output.split() print '{' print '\t"data":[' count = 1 for key in DISKS: print '\t{' if count < len(DISKS): print '\t\t"{#DISK}":"%s"},' % key else: print '\t\t"{#DISK}":"%s"}' % key count += 1 print '\t]' print '}'
拿到Device以后,用腳本來獲取對應(yīng)的數(shù)值
cat /etc/zabbix/scripts/userparameter_diskio.py
#!/bin/env python import commands import sys DISK = sys.argv[1] cmdline = 'cat /tmp/iostat.txt | grep %s' % DISK (status,output) = commands.getstatusoutput(cmdline) output_list = output.split() value = zip(*[iter(output_list)]*12) if sys.argv[2] == "rrqmps": print ((float(value[1][1])+float(value[2][1]))/2) elif sys.argv[2] == "wrqmps": print ((float(value[1][2])+float(value[2][2]))/2) elif sys.argv[2] == "rps": print ((float(value[1][3])+float(value[2][3]))/2) elif sys.argv[2] == "wps": print ((float(value[1][4])+float(value[2][4]))/2) elif sys.argv[2] == "rspeed": print ((float(value[1][5])+float(value[2][5]))/2) elif sys.argv[2] == "wspeed": print ((float(value[1][6])+float(value[2][6]))/2) elif sys.argv[2] == "await": print ((float(value[1][9])+float(value[2][9]))/2) elif sys.argv[2] == "svctm": print ((float(value[1][10])+float(value[2][10]))/2) elif sys.argv[2] == "util": print ((float(value[1][11])+float(value[2][11]))/2)
這里還需要一個crontab來生成/tmp/iostat.txt文件
* * * * * iostat -x -d -m 1 3 > /tmp/iostat.txt
接著寫一個自定義配置文件
cat /etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf
UserParameter=diskio_discovery[*],python /etc/zabbix/scripts/io_discovery.py UserParameter=diskio[*],python /etc/zabbix/scripts/userparameter_diskio.py $1 $2
接下來需要在zabbix上建一個監(jiān)控模板,模板在附件里面,本模板適用于zabbix3.2,其他版本請自行測試,可能需要做一些修改
都準(zhǔn)備以后可以開始使用了
首先把相應(yīng)的腳本和配置文件放到客戶機(jī)上面,添加cron
接著把模板導(dǎo)入,在模板里面添加機(jī)器,然后restart zabbix 客戶端
第三部分 Ansible部分
如果你有使用ansible,這里可以提供一個playbook,用來分發(fā)腳本等工作
- hosts: 客戶機(jī) tasks: - name: mkdir the scripts dir file: path=/etc/zabbix/scripts state=directory - name: copy conf files copy: src=/etc/zabbix/zabbix_agentd.d/userparameter_diskio.conf dest=/etc/zabbix/zabbix_agentd.d/ - name: copy io_discovery.py copy: src=/etc/zabbix/scripts/io_discovery.py dest=/etc/zabbix/scripts/io_discovery.py mode=0755 - name: copy userparameter_diskio.py copy: src=/etc/zabbix/scripts/userparameter_diskio.py dest=/etc/zabbix/scripts/userparameter_diskio.py mode=0755 - name: add cron cron: name='add iostat cron' minute='*' hour='*' day='*' month='*' weekday='*' job='iostat -x -d -m 1 3 > /tmp/iostat.txt' state=present notify: - restart zabbix-agent handlers: - name: restart zabbix-agent service: name=zabbix-agent state=restarted enabled=yes附件:http://down.51cto.com/data/2368552
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。