• 欢迎访问蜷缩的蜗牛博客 蜷缩的蜗牛
  • 微信搜索: 蜷缩的蜗牛 | 联系站长 kbsonlong@qq.com
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

zabbix lld结合pycurl批量监控网站服务质量 推荐

Zabbix 蜷缩的蜗牛 7个月前 (02-27) 13次浏览 已收录

   前两天看到博客有监控 web 的,之前也写过 pycurl 的监控状态;后面想想 web 监控咱们何不直接通过 zabbix 的方式监控;zabbix 确实是个万花筒,这个也是我喜欢 zabbix 的一个原因之一吧;pycurl 可以参考我之前写过的:http://xiaoluoge.blog.51cto.com/9141967/1616922。

1、监控脚本:

[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 把域名变成你们自己的域名即可):执行结果:

[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 定义:

[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

测试结果:

[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):

wKioL1eTkmDwJGJKAAAumJNDU8o976.png-wh_50

4、函数 get_web_status 获取网站各个服务质量的值:查看 key 设置效果:

# ./zabbix_get -s 192.168.10.100 -k get_web_status[www.hao123.com,HTTP_CODE]       

200

5、这样的话获取 key 的返回值状态也找到了,剩下的就是在模板里定义监控原先和出图告警监控就好:

wKiom1eTk_jxm13fAACc1V4JtiQ756.png-wh_50

6、监控图形原型设置:

wKiom1eTlNfQDeNRAABaBNn4VW4748.png-wh_50

7、网站各状态响应时间:

wKiom1eTmLqCttdMAAC69-65dzM449.png-wh_50

网站平均下载速度:

wKioL1eTlTeCPHmLAACnQzSYjjI612.png-wh_50

网站的状态码:

wKiom1eTlVLxndZSAABjMa7Woeg717.png-wh_50

到此已经完成,后期大家可以做些优化,或者想不到的地方大家可以修改:我用的是 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、微信公众号告警

本文转载自 zabbix lld 结合 pycurl 批量监控网站服务质量 推荐


蜷缩的蜗牛 , 版权所有丨如未注明 , 均为原创丨 转载请注明zabbix lld 结合 pycurl 批量监控网站服务质量 推荐
喜欢 (0)
[]
分享 (0)