首页
学习
活动
专区
工具
TVP
发布

如何通过Python/Shell对HTTP服务状态的监控?

需求

相信很多运维童鞋都有遇到过这样的需求,需要监控某个网站或者URL的状态码,如果返回的不是指定的状态码,那就触发告警。今天一起学习下,怎么通过Python和Shell来实现该需求,并怎么整合到Zabbix当中去。

Shell

我们首先来看Shell版本如何实现吧。

#!/bin/bash

# 定义位置变量

url=$1

# 定义检查函数

monitor_http(){

status_code=$(curl -m 5 -s -o /dev/null -w % $url)

echo $status_code

}

# 调用http监测函数

monitor_http

通过Shell的实现方式呢,主要就是curl的使用,来看看这几个参数的说明:

-m 设置curl不管访问成功或失败,最大消耗的时间为5秒,5秒连接服务为相应则视为无法连接

-s 设置静默连接,不显示连接时的连接速度、时间消耗等信息

-o 将curl下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)

-w 设置curl命令需要显示的内容%,指定curl返回服务器的状态码

Python

Python的版本可能相对复杂了一点点,这里我们主要通过urllib2模块来实现:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import urllib2

import sys

def monitor_http(url):

response = None

try:

response = urllib2.urlopen(url,timeout=5)

#print response.info() # header

print response.getcode()

except urllib2.URLError as e:

if hasattr(e, ‘code’):

print e.code

elif hasattr(e, ‘reason’):

print e.reason

finally:

if response:

response.close()

url = sys.argv[1]

monitor_http(url)

代码其实还是很简单的,urllib2这里不多说了哈,也可以使用pyCurl模块来实现。

如何整合到Zabbix

整合到Zabbix,就可以实现告警了。

首先在ZabbixAgent配置文件中配置一条UserParameter,如下:

UserParameter=monitor.http[*],/data/app/zabbix/bin/monitor_http.py $1

然后配置item:

注意Key的配置:

monitor.http[http://www.qq.com]

接下来配置一个Trigger:

这里我们定义http状态码不为200时发出告警,其实整个配置都不难,这里也可以当作是Zabbix自定义监控的一个应用案例。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190107A17J0X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券