# Nagios頁面監控腳本是怎么樣的
## 引言
在企業級IT運維中,服務可用性監控是保障業務連續性的關鍵環節。Nagios作為開源監控系統的代表,其靈活的插件機制允許用戶通過自定義腳本擴展監控能力。本文將深入探討Nagios頁面監控腳本的實現原理、典型架構和實際應用場景。
## 一、Nagios監控腳本基礎概念
### 1.1 Nagios插件規范
Nagios腳本本質上遵循以下規范:
- 使用Bash/Python/Perl等腳本語言編寫
- 返回標準化的退出狀態碼:
- 0:OK
- 1:WARNING
- 2:CRITICAL
- 3:UNKNOWN
- 輸出第一行作為簡短狀態信息(顯示在Dashboard)
- 可選的性能數據(用`|`分隔)
### 1.2 頁面監控的特殊性
相比常規服務監控,網頁監控需要處理:
- HTTP狀態碼驗證(200/404/500等)
- 響應時間閾值
- 頁面內容匹配(關鍵詞/正則表達式)
- SSL證書有效期檢查
## 二、典型腳本實現方案
### 2.1 Bash實現示例
```bash
#!/bin/bash
URL="https://example.com"
TIMEOUT=10
KEYWORD="Welcome"
response=$(curl -sSL --max-time $TIMEOUT -w "%{http_code}" -o /dev/null $URL)
code=$?
if [ $code -ne 0 ]; then
echo "CRITICAL: Connection failed (curl error $code)"
exit 2
elif [[ $response != 2* ]]; then
echo "CRITICAL: HTTP $response"
exit 2
else
if ! curl -sSL $URL | grep -q "$KEYWORD"; then
echo "WARNING: Keyword not found"
exit 1
fi
echo "OK: Page loaded successfully | time=${response_time}s"
exit 0
fi
#!/usr/bin/env python3
import requests
import sys
from urllib.parse import urlparse
def check_website(url, timeout=5, keyword=None):
try:
r = requests.get(url, timeout=timeout, verify=True)
r.raise_for_status()
if keyword and keyword not in r.text:
return (1, f"WARNING: Keyword '{keyword}' not found")
return (0, f"OK: {url} (HTTP {r.status_code}) | response_time={r.elapsed.total_seconds():.2f}s")
except requests.exceptions.SSLError as e:
return (2, f"CRITICAL: SSL Error - {str(e)}")
except requests.exceptions.RequestException as e:
return (2, f"CRITICAL: Connection failed - {str(e)}")
if __name__ == "__main__":
url = sys.argv[1] if len(sys.argv) > 1 else "https://example.com"
keyword = sys.argv[2] if len(sys.argv) > 2 else None
code, msg = check_website(url, keyword=keyword)
print(msg)
sys.exit(code)
模擬用戶操作流程:
with requests.Session() as s:
# 登錄檢查
login = s.post(login_url, data=credentials)
if "Login Failed" in login.text:
return (2, "CRITICAL: Login failed")
# 儀表盤檢查
dashboard = s.get(dashboard_url)
if dashboard.status_code != 200:
return (2, f"CRITICAL: Dashboard {dashboard.status_code}")
# 訂單提交檢查
order = s.post(order_api, json=order_data)
return (0, f"OK: Transaction completed in {order.elapsed.total_seconds():.2f}s")
Nagios支持將性能數據附加到輸出:
OK: Page loaded | time=0.87s; size=245KB; uptime=99.98%
在Python中可通過:
perf_data = f"time={elapsed:.2f}s; size={len(content)/1024:.2f}KB"
print(f"OK: Status normal | {perf_data}")
/usr/local/nagios/libexec/
chmod +x /usr/local/nagios/libexec/check_website.py
chown nagios:nagios /usr/local/nagios/libexec/check_website.py
define command {
command_name check_website
command_line $USER1$/check_website.py $ARG1$ $ARG2$
}
define service {
use generic-service
host_name web-server
service_description Website Availability
check_command check_website!https://example.com!"Welcome"
normal_check_interval 5
retry_check_interval 1
}
故障類型 | 處理方案 |
---|---|
連接超時 | 設置合理的timeout值 |
SSL證書過期 | 提前30天告警 |
內容篡改 | 校驗頁面哈?;蜿P鍵元素 |
流量突增 | 監控響應時間百分位數 |
NRPE
模式測試:
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_website
import logging
logging.basicConfig(level=logging.DEBUG)
通過textfile
exporter暴露指標:
from prometheus_client import write_to_textfile
METRICS_FILE = '/var/lib/node_exporter/website.prom'
write_to_textfile(METRICS_FILE,
Gauge('website_response_seconds', 'HTTP response time').set(elapsed))
使用Ansible批量部署監控腳本:
- name: Deploy website monitor
template:
src: check_website.j2
dest: /usr/local/nagios/libexec/check_website.py
mode: 0755
owner: nagios
group: nagios
一個健壯的Nagios頁面監控腳本需要兼顧準確性、性能和可維護性。通過合理設計狀態判斷邏輯、完善的異常處理以及標準化的輸出格式,可以構建出適應復雜業務場景的監控解決方案。隨著云原生技術的發展,建議結合Prometheus等現代監控工具形成立體化監控體系。
本文示例代碼已托管至GitHub倉庫:https://github.com/example/nagios-web-monitoring “`
注:實際文章約1650字,包含: - 6個主要章節 - 4個完整代碼示例 - 2個配置示例 - 1個對比表格 - 標準Markdown格式(代碼塊、表格、標題等)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。