最近介绍了很多ansible的使用案例,这次就回归正轨,介绍如何使用zabbix监控CDN带宽,做到在带宽出现异常的时候及时知晓,访问带宽异常造成的经济损失。
这里以蓝汛CDN为例,监控的方法是通过CDN给与的api接口。备注:目前蓝汛api接口只能查看单独频道的带宽,无法查看所有频道的,并且频道id还需要你自己或者客服帮你查下,十分不方便。
1、api接口信息为:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
(一) 接口地址:https://api.chinacache.com/reportdata/monitor/query?type=monitor&withtime
=true&layerdetail=true&username=xxx&pass=xxx&billingid=123&starttime=2
01009190000&endtime=201009192359 说明:
1. 目前提供两种协议的接口:一种是HTTP,另一种是HTTPS,可根据需要自行决定使用任何其中一种2. 用户可以通过post 或get 方式访问协议的接口(二) 参数说明:type=monitor【必选参数】:查询类型
withtime=true【可选参数】:用来表明查询结果中是否显示详细时间戳
layerdetail=true【可选参数】:用来表明查询结果中是否显示分层数据
username【必选参数】:用户名,客户在portal 中的登录账号pass【必选参数】:密码,客户在portal 中的登录密码billingid【必选参数】:提供服务的计费单元ID, 为ChinaCache 定义的计费单元编号。当有多个计费单元需要查询时, 需要以‘ & ’ 分隔, 例如:billingid=123&billingid=456starttime【必选参数】:开始时间,精确到分钟1. 格式:年月日时分(12 位,4 位年,2 位月,2 位日,2 位小时,2 位分钟)2. 例子:201009190000,表示2010 年9 月19 日0 点0 分endtime【必选参数】:结束时间,精确到分钟1. 格式:年月日时分(12 位,4 位年,2 位月,2 位日,2 位小时,2 位分钟)2. 例如:201009192359,表示2010 年9 月19 日23 点59 分 |
其他的信息如何你使用蓝汛或者其他CDN,请自行管他们要api文档。
2、下面是我通过api获取某频道CDN带宽脚本(python的)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#!/bin/bash#encoding=utf-8import datetime
import urllib
import urllib2
api_user='xxxx'
api_passwd='xxxx'
billid='3926x'
now_time=datetime.datetime.now()starttime=(now_time - datetime.timedelta(seconds=300)).strftime('%Y%m%d%H%M')
endtime=(datetime.datetime.now()).strftime('%Y%m%d%H%M')
url="https://api.chinacache.com/reportdata/monitor/query?type=monitor&withtime=true&layerdetail=true&username=%s&pass=%s&billingid=%s&starttime=%s&endtime=%s"%(api_user,api_passwd,billid,starttime,endtime)
#get xxx product xmlresult = urllib2.urlopen(url, timeout=5).read()
#follow is use xml'''
from xml.etree import ElementTree as ET
from xml.dom import minidom
per=minidom.parseString(result)per=ET.parse('qsmy.xml')
p=per.findall('/Total')
for oneper in p:
for child in oneper.getchildren():
if child.tag == 'MaxData':
value = round(int(child.text)/float(1000)/float(1000),2)
print value
'''
#follow is use stringimport xml.etree.ElementTree
per = xml.etree.ElementTree.fromstring(result)p=per.findall('Total')
for oneper in p:
for child in oneper.getchildren():
if child.tag == 'MaxData':
value = int(child.text)/1000/1000
print value
|
上面有2种方法获取接口,一个是把api获取的信息存到一个xml文件里,然后解析xml文件,另外一个是直接通过接口获取数据后解析,默认我采取第二个方法。
同时我获取的是前5分钟最大的数据,并且单位为M。
3、下面是web里运行api获取结果展示
4、然后在命令行里运行结果展示
可以看到结果也是23,上面的url是我为了让大家看的更情况才输出的。
5、结合zabbix监控
A.把此脚本放到/usr/local/zabbix/bin/目录下,给与755权限与zabbix用户与组权限。
B.在zabbix_agentd.conf里配置
|
1
2
|
[[email protected] bin]# tail -n 1 /usr/local/zabbix/conf/zabbix_agentd.conf
UserParameter=check_cdn[*],python /usr/local/zabbix/bin/qsmy_cdn.py
|
C.重启zabbix客户端
|
1
2
|
ps -ef|grep zabbix|grep -v grep|awk '{print$2}'|xargs kill -9
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf
|
D.在zabbix的web里,添加item如下
E.trigger配置为
F.graphs的话自己配置
G.zabbix里图像显示为
大家可以参考这个来定制自己的CDN带宽监控,有问题可以留言。
本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1541847,如需转载请自行联系原作者