1. 程式人生 > >如何通過Python/Shell對HTTP服務狀態的監控?

如何通過Python/Shell對HTTP服務狀態的監控?

HTTP

需求

相信很多運維童鞋都有遇到過這樣的需求,需要監控某個網站或者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:

Zabbix

注意Key的配置:

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

接下來配置一個Trigger:

Trigger

這裡我們定義http狀態碼不為200時發出告警,其實整個配置都不難,這裡也可以當作是Zabbix自定義監控的一個應用案例。

原文來自微信公眾號:Python運維圈