← 返回上一頁
程式語言 系統管理

使用 Python 監控伺服器在線狀態 — 自動告警實作

本頁目錄

不想花錢買監控服務,又想隨時知道伺服器是否正常?用 Python 寫一個簡單的監控腳本,定時 ping 或 HTTP 檢查,異常時自動發送通知。

監控方式比較

方式 適用場景 函式庫
ICMP Ping 檢查主機是否存活 ping3, subprocess
TCP 連線 檢查特定埠是否開放 socket
HTTP 請求 檢查 Web 服務是否正常 requests
SSL 憑證 檢查憑證是否過期 ssl, socket

實作範例

import requests
import smtplib
from email.mime.text import MIMEText
import time

SERVERS = [
    {'name': 'Web 主站', 'url': 'https://example.com', 'timeout': 10},
    {'name': 'API 服務', 'url': 'https://api.example.com/health', 'timeout': 5},
]

def check_server(server):
    try:
        r = requests.get(server['url'], timeout=server['timeout'])
        return r.status_code == 200
    except:
        return False

def send_alert(server_name, status):
    msg = MIMEText(f"伺服器 {server_name} 狀態異常!")
    msg['Subject'] = f'[告警] {server_name} 異常'
    msg['From'] = '******'
    msg['To'] = '******'
    with smtplib.SMTP('******', 587) as smtp:
        smtp.starttls()
        smtp.login('******', '******')
        smtp.send_message(msg)

while True:
    for server in SERVERS:
        if not check_server(server):
            send_alert(server['name'], 'DOWN')
            print(f"[異常] {server['name']}")
        else:
            print(f"[正常] {server['name']}")
    time.sleep(60)  # 每分鐘檢查一次

進階:搭配 schedule 函式庫做更靈活的排程,或用 Telegram Bot 取代 Email 通知。

分享這篇
X LinkedIn Facebook Hacker News Reddit

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料