muri 发表于 2019-1-18 14:14:31

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

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

  

  1、监控脚本:
# 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)
    return data]
if __name__ == '__main__':
    if sys.argv == "web_name_discovery":
      print web_name_discovery()
    elif sys.argv == "get_web_status":
      print get_web_status()  2、web_name_discovery函数负责以json格式的形式返回我们要监控的网站域名(修改urllist把域名变成你们自己的域名即可):执行结果:
# python web_monitor.py web_name_discovery
{
    "data": [
      {
            "{#NAME}": "www.baidu.com"
      },
      {
            "{#NAME}": "www.hao123.com"
      }
    ]
}  **这个{#NAME}就是我们要返回的宏变量;
  

  3、web在anent定义这个key和在web UI定义:
# 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  

  测试结果:
  

# ./zabbix_get -s 192.168.10.100 -k get_web_name
{
    "data": [
      {
            "{#NAME}": "www.baidu.com"
      },
      {
            "{#NAME}": "www.hao123.com"
      }
    ]
}  

  定义web UI的key(配置---》模板---创建自动发现规则---》定义第一个获取域名名称的key):
  

http://s4.运维网.com/wyfs02/M01/84/8A/wKioL1eTkmDwJGJKAAAumJNDU8o976.png-wh_500x0-wm_3-wmp_4-s_2443770619.png
  

  

  4、函数get_web_status获取网站各个服务质量的值:查看key设置效果:
  # ./zabbix_get -s 192.168.10.100 -k get_web_status      

  200
  

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

http://s4.运维网.com/wyfs02/M02/84/8A/wKiom1eTk_jxm13fAACc1V4JtiQ756.png-wh_500x0-wm_3-wmp_4-s_1122187158.png
  

  6、监控图形原型设置:
  

http://s3.运维网.com/wyfs02/M00/84/8A/wKiom1eTlNfQDeNRAABaBNn4VW4748.png-wh_500x0-wm_3-wmp_4-s_2941386250.png
  

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

http://s2.运维网.com/wyfs02/M01/84/8A/wKiom1eTmLqCttdMAAC69-65dzM449.png-wh_500x0-wm_3-wmp_4-s_2713624523.png
  

  网站平均下载速度:
  

http://s5.运维网.com/wyfs02/M00/84/8A/wKioL1eTlTeCPHmLAACnQzSYjjI612.png-wh_500x0-wm_3-wmp_4-s_1718435053.png
  

  网站的状态码:
  

http://s3.运维网.com/wyfs02/M01/84/8A/wKiom1eTlVLxndZSAABjMa7Woeg717.png-wh_500x0-wm_3-wmp_4-s_2354509298.png
  

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

  



附件:http://down.运维网.com/data/2367965

页: [1]
查看完整版本: zabbix lld结合pycurl批量监控网站服务质量