前两天看到博客有监控web的,之前也写过pycurl的监控状态;后面想想web监控咱们何不直接通过zabbix的方式监控;zabbix确实是个万花筒,这个也是我喜欢zabbix的一个原因之一吧;pycurl可以参考我之前写过的:http://xiaoluoge.blog.51cto.com/9141967/1616922。
1、监控脚本:
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
37
38
39
40
41
42
43
44
45
46
|
[root@monitor scripts]
# cat web_monitor.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
os,sys
import
time
import
sys
import
pycurl
import
json
urllist
=
[
'www.baidu.com'
,
'www.hao123.com'
]
class
Test:
def
__init__(
self
):
self
.contents
=
''
def
callback(
self
,curl):
self
.contents
=
self
.contents
+
curl
def
test_gzip(url):
data
=
{}
t
=
Test()
c
=
pycurl.Curl()
c.setopt(pycurl.WRITEFUNCTION,t.callback)
c.setopt(pycurl.ENCODING,
'gzip'
)
c.setopt(pycurl.URL,url)
c.perform()
data[
'HTTP_CODE'
]
=
c.getinfo(c.HTTP_CODE)
data[
'NAMELOOKUP_TIME'
]
=
(c.getinfo(c.NAMELOOKUP_TIME))
*
1000
data[
'CONNECT_TIME'
]
=
(c.getinfo(c.CONNECT_TIME))
*
1000
data[
'PRETRANSFER_TIME'
]
=
(c.getinfo(c.PRETRANSFER_TIME))
*
1000
data[
'SPEED_DOWNLOAD'
]
=
c.getinfo(c.SPEED_DOWNLOAD)
return
data
def
web_name_discovery():
web_list
=
[]
web_dict
=
{
"data"
:
None
}
for
url
in
urllist:
url_dict
=
{}
url_dict[
"{#NAME}"
]
=
url
web_list.append(url_dict)
web_dict[
"data"
]
=
web_list
jsonStr
=
json.dumps(web_dict, sort_keys
=
True
, indent
=
4
)
return
jsonStr
def
get_web_status():
data
=
test_gzip(sys.argv[
2
])
return
data[sys.argv[
3
]]
if
__name__
=
=
'__main__'
:
if
sys.argv[
1
]
=
=
"web_name_discovery"
:
print
web_name_discovery()
elif
sys.argv[
1
]
=
=
"get_web_status"
:
print
get_web_status()
|
2、web_name_discovery函数负责以json格式的形式返回我们要监控的网站域名(修改urllist把域名变成你们自己的域名即可):执行结果:
1
2
3
4
5
6
7
8
9
10
11
|
[root@monitor scripts]
# python web_monitor.py web_name_discovery
{
"data"
: [
{
"{#NAME}"
:
"www.baidu.com"
},
{
"{#NAME}"
:
"www.hao123.com"
}
]
}
|
**这个{#NAME}就是我们要返回的宏变量;
3、web在anent定义这个key和在web UI定义:
1
2
3
|
[root@monitor scripts]
# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/web_status.conf
UserParameter
=
get_web_name,
/
usr
/
local
/
zabbix
/
scripts
/
web_monitor.py web_name_discovery
UserParameter
=
get_web_status[
*
],
/
usr
/
local
/
zabbix
/
scripts
/
web_monitor.py get_web_status $
1
$
2
|
测试结果:
1
2
3
4
5
6
7
8
9
10
11
|
[root@monitor
bin
]
# ./zabbix_get -s 192.168.10.100 -k get_web_name
{
"data"
: [
{
"{#NAME}"
:
"www.baidu.com"
},
{
"{#NAME}"
:
"www.hao123.com"
}
]
}
|
定义web UI的key(配置---》模板---创建自动发现规则---》定义第一个获取域名名称的key):
4、函数get_web_status获取网站各个服务质量的值:查看key设置效果:
# ./zabbix_get -s 192.168.10.100 -k get_web_status[www.hao123.com,HTTP_CODE]
200
5、这样的话获取key的返回值状态也找到了,剩下的就是在模板里定义监控原先和出图告警监控就好:
6、监控图形原型设置:
7、网站各状态响应时间:
网站平均下载速度:
网站的状态码:
到此已经完成,后期大家可以做些优化,或者想不到的地方大家可以修改:我用的是zabbix 3.0的,3.0的话直接下载模板导入,定义angent key即可:
zabbix视频请移步:http://www.roncoo.com/details/fb3050a5b34b42f39ccad83ebebc89c1
zabbix自动化课程目录(需求更新中):
1、zabbix生产环境如何使用
2、saltstack批量部署zabbix_agent
3、zabbix API简单使用讲解
4、web UI讲解
5、开始监控之添加一个简单的linux监控
6、zabbix 强大的内置key讲解
7、内置key的使用、 端口、用户数、磁盘读取状态出图
8、trigger表达式学习,实现用户登录数,端口检查告警
9、zabbix邮件告警设置与维护周期
10、zabbix自定义Key添加,tcp状态模板编写
11、自定义监控之、监控nginx解析与实现
12、自定义监控之php-fpm监控
13、自定义监控之mysql状态监控
14、自定义监控之缓存服务器memcached,redis监控
15、自动化之saltstack管理zabbix,批量推送key生效
16、zabbix自动发现绑定删除模板,自动注册
17、zabbix lld发现讲解以及端口发现监控告警出图
18、zabbix lld 发现web站点以及批量获取状态码
19、zabbix lld复习和监控磁盘的运行状况
20、zabbix生成环境规范和按月生成报表资源统计
21、微信公众号告警