如何通過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 %{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:
注意Key的配置:
monitor.http[http://www.qq.com]
接下來配置一個Trigger:
這裡我們定義http狀態碼不為200時發出告警,其實整個配置都不難,這裡也可以當作是Zabbix自定義監控的一個應用案例。
原文來自微信公眾號:Python運維圈