阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

53次阅读
没有评论

共计 1225 个字符,预计需要花费 4 分钟才能阅读完成。

需求

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

Shell

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

#!/bin/bash

# 定义位置变量

url=$1

# 定义检查函数

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

echo $status_code

}

# 调用 http 监测函数

monitor_http

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

  • -m 设置 curl 不管访问成功或失败,最大消耗的时间为 5 秒,5 秒连接服务为相应则视为无法连接
  • -s 设置静默连接,不显示连接时的连接速度、时间消耗等信息
  • -o 将 curl 下载的页面内容导出到 /dev/null(默认会在屏幕显示页面内容)
  • -w 设置 curl 命令需要显示的内容 %{http_code},指定 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:

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

注意 Key 的配置:

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

接下来配置一个 Trigger:

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

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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计1225字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中