本文目录导读:

是的,实用脚本完全可以批量监控。脚本化是实现批量监控最高效、最灵活的方式之一。
“批量监控”通常指对多个目标(如服务器、网站、端口、进程、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[@]}")"
如何实现自动化与告警?
脚本只是第一步,要形成真正的批量监控系统,通常需要结合以下工具:
-
定时执行(Cron Job / Task Scheduler):
- Linux:使用
crontab -e设置脚本每 5 分钟运行一次。- 示例:
*/5 * * * * /home/user/ping_monitor.sh
- 示例:
- Windows:使用“任务计划程序”定时运行
.bat或.ps1脚本。
- Linux:使用
-
告警通知:
- 脚本内集成:检查到故障后,自动调用 API 发送通知。
- 邮件:
mail命令或 Python 的smtplib。 - 即时通讯:发送消息到钉钉/企业微信/飞书机器人(通过 Webhook)。
- 短信/电话:集成 Twilio、阿里云短信等 API。
-
数据记录与展示(进阶):
- 将监控结果写入数据库(如 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 等专业监控系统。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播