实用脚本能批量监控吗?

wen 实用脚本 16

本文目录导读:

实用脚本能批量监控吗?

  1. 脚本实现批量监控的常见思路
  2. 如何实现自动化与告警?

是的,实用脚本完全可以批量监控脚本化是实现批量监控最高效、最灵活的方式之一

“批量监控”通常指对多个目标(如服务器、网站、端口、进程、API 接口)同时进行状态检查,脚本几乎是为这个场景量身定做的。

脚本实现批量监控的常见思路

脚本的核心优势在于循环(Loop)条件判断,你可以定义一个监控目标列表(如 IP 地址、URL、端口号),然后让脚本逐一检查。

以下是几个不同场景下的典型脚本示例:

批量 Ping(网站/服务器连通性监控)

这是最基础的批量监控,用于检查多台机器是否在线。

Bash 脚本示例 (Linux/macOS):

#!/bin/bash
# 文件名: ping_monitor.sh
# 要监控的目标列表(可以是IP或域名)
HOSTS=("192.168.1.1" "google.com" "example.com" "10.0.0.5")
LOG_FILE="ping_monitor.log"
# 循环检查每个主机
for host in "${HOSTS[@]}"; do
    # 发送一个ping包,超时2秒,静默模式
    ping -c 1 -W 2 "$host" &> /dev/null
    if [ $? -eq 0 ]; then
        echo "$(date) - $host - OK" >> "$LOG_FILE"
    else
        echo "$(date) - $host - FAIL (UNREACHABLE)" >> "$LOG_FILE"
        # 可选:发送告警(例如发送邮件或钉钉消息)
        # echo "Alert: $host is down" | mail -s "Monitoring Alert" admin@example.com
    fi
done

批量 HTTP API / 网页状态监控

检查一批网站的 HTTP 状态码是否正常(如 200 OK),或者检查 API 返回的 JSON 数据。

Python 脚本示例 (更强大、更灵活):

#!/usr/bin/env python3
# 文件名: http_monitor.py
import requests
import logging
from datetime import datetime
# 配置日志
logging.basicConfig(filename='http_monitor.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')
# 监控目标列表(URL 和期望的状态码/关键字)
TARGETS = [
    {"url": "https://www.baidu.com", "expected_status": 200, "name": "Baidu"},
    {"url": "https://github.com/status", "expected_status": 200, "name": "GitHub Status"},
    {"url": "https://httpbin.org/status/500", "expected_status": 200, "name": "Expected Fail Test"} # 这个会失败
]
def check_target(target):
    try:
        # 超时设置,防止卡死
        response = requests.get(target['url'], timeout=5)
        status_ok = response.status_code == target['expected_status']
        if status_ok:
            logging.info(f"{target['name']} ({target['url']}) - OK - Status: {response.status_code}")
        else:
            logging.error(f"{target['name']} ({target['url']}) - FAIL - Expected: {target['expected_status']}, Got: {response.status_code}")
            # 触发告警逻辑
    except requests.exceptions.RequestException as e:
        logging.error(f"{target['name']} ({target['url']}) - FAIL - Exception: {str(e)}")
if __name__ == "__main__":
    print(f"Starting batch HTTP monitor at {datetime.now()}")
    for target in TARGETS:
        check_target(target)
    print("Monitor check complete.")

批量端口监控 (使用 nc 或 /dev/tcp)

检查远程服务器上的特定端口(如 80, 443, 22, 3306)是否开放。

Bash 脚本示例 (利用 Bash 内置能力):

#!/bin/bash
# 文件名: port_monitor.sh
# 定义监控目标: "IP 端口"
MONITOR_LIST=(
    "192.168.1.10 80"
    "192.168.1.10 443"
    "google.com 22"
)
check_port() {
    local host=$1
    local port=$2
    # 使用 /dev/tcp (Bash 内置) 或 nc
    timeout 2 bash -c "echo >/dev/tcp/$host/$port" &> /dev/null
    if [ $? -eq 0 ]; then
        echo "$(date) - $host:$port - OPEN"
        return 0
    else
        echo "$(date) - $host:$port - CLOSED/FILTERED"
        return 1
    fi
}
# 主循环
while read -r line; do
    # 跳过空行和注释
    [[ -z "$line" || "$line" == \#* ]] && continue
    host=$(echo $line | awk '{print $1}')
    port=$(echo $line | awk '{print $2}')
    check_port $host $port
done <<< "$(printf '%s\n' "${MONITOR_LIST[@]}")"

如何实现自动化与告警?

脚本只是第一步,要形成真正的批量监控系统,通常需要结合以下工具:

  1. 定时执行(Cron Job / Task Scheduler)

    • Linux:使用 crontab -e 设置脚本每 5 分钟运行一次。
      • 示例:*/5 * * * * /home/user/ping_monitor.sh
    • Windows:使用“任务计划程序”定时运行 .bat.ps1 脚本。
  2. 告警通知

    • 脚本内集成:检查到故障后,自动调用 API 发送通知。
    • 邮件:mail 命令或 Python 的 smtplib
    • 即时通讯:发送消息到钉钉/企业微信/飞书机器人(通过 Webhook)。
    • 短信/电话:集成 Twilio、阿里云短信等 API。
  3. 数据记录与展示(进阶):

    • 将监控结果写入数据库(如 InfluxDB、MySQL)。
    • 配合可视化工具(如 Grafana、Prometheus + Grafana)生成监控仪表盘。
  • 可以批量监控:是的,脚本是实现批量监控的基础方法。
  • 优点高度定制轻量级无额外依赖学习成本低
  • 缺点:对于大规模、分布式、高可用的复杂监控需求,原生脚本可能不够健壮(缺乏分布式协调、数据持久化、自愈功能),此时应考虑专业的解决方案:
    • Prometheus + Grafana:云原生监控的事实标准。
    • Zabbix:企业级传统监控平台。
    • Nagios / Icinga:老牌开源监控系统。
    • 商业 SaaS:Datadog, New Relic, Better Uptime。

建议

  • 小规模(<50个目标):用脚本 + Cron + 简单告警(邮件/短信)完全足够。
  • 中规模(50-500个目标):脚本 + 数据库(如 InfluxDB)+ 可视化(Grafana)。
  • 大规模(>500个目标):建议直接采用 Prometheus 或 Zabbix 等专业监控系统。

抱歉,评论功能暂时关闭!