欢迎光临
一直在努力

zabbix 批量监控web站点

经常有这样的需求,要监控很多的web站点

监控模板

  • 模板
  • script
  • zabbix_agentd.conf.d
  • /etc/zabbix/web.txt

1. 模板

  1. 下载地址

http://pan.baidu.com/s/1c16p8RY

2. script

vim /etc/zabbix/script/web_site.py

#!/usr/bin/env python
# coding:utf-8

import os, sys, json,time

# 将要监控的web站点url添加到urllist列表
# urllist = ["http://baidu.com",
# "http://www.qq.com",
# "http://www.sina.com.cn/"]
files='/etc/zabbix/web.txt'

fd = open(files,'r')
urllist=[]
for i in fd.readlines():
    if i[0] != '#':
        urllist.append(i.strip('\n'))
fd.close()
#这个函数主要是构造出一个特定格式的字典,用于zabbix
def web_site_discovery():
    web_list=[]
    web_dict={"data":None}
    for url in urllist:
        url_dict={}
        url_dict["{#SITENAME}"]=url
        web_list.append(url_dict)

    web_dict["data"]=web_list
    jsonStr = json.dumps(web_dict, sort_keys=True, indent=4)
    return jsonStr

#这个函数用于测试站点返回的状态码,注意在cmd命令中如果有%{}这种字符要使用占位符代替,否则
#会报错
def web_site_code():
       cmd='curl -o /dev/null -s -w %s %s' %("%{http_code}",sys.argv[2])
       time.sleep(2)
       reply_code=os.popen(cmd).readlines()[0]
       return reply_code

if __name__ == "__main__":
  try:
    if sys.argv[1] == "web_site_discovery":
        print web_site_discovery()
    elif sys.argv[1] == "web_site_code":
        print web_site_code()
    else:
        print "Pls sys.argv[0] web_site_discovery | web_site_code[URL]"
  except Exception as msg:
        print msg

站点放在 /etc/zabbix/web.txt 文件里

例如:

3.zabbix_agentd.conf.d

vim /etc/zabbix/zabbix_agentd.d/userparameter_site.conf

UnsafeUserParameters=1
UserParameter=web_site_discovery,/etc/zabbix/script/web_site.py web_site_discovery
UserParameter=web_site_code[*],/etc/zabbix/script/web_site.py web_site_code $1

之后的操作

  • 重启zabbix-agent
  • 测试返回值
zabbix_get -s 127.0.0.1 -p 10050 -k web_site_discovery 

最后的效果

赞(2) 打赏

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏