本文目录导读:

- 使用 Linux 内核审计系统(Auditd)
- 使用 inotify(文件系统事件)
- 监控系统日志(Syslog / Journald)
- 使用 eBPF(现代高性能监控)
- 跨平台方案(使用 Python 的 watchdog)
- Windows 事件日志监控(PowerShell)
- 通用脚本设计最佳实践
- 完整监控框架结构(Bash 版)
编写监控系统事件的脚本通常涉及操作系统级的事件追踪(如文件变更、进程创建、登录日志)或应用程序级的事件(如日志异常、性能指标超标),具体实现方式取决于操作系统和目标事件类型。
以下分场景介绍核心方法和示例脚本:
使用 Linux 内核审计系统(Auditd)
适合监控文件访问、系统调用、进程执行等底层事件。
步骤:
- 安装 auditd:
sudo apt install auditd -y - 添加规则:
sudo auditctl -w /etc/passwd -p rwxa -k passwd_changes - 编写脚本轮询日志:
#!/bin/bash # 监控 /etc/passwd 的写操作 tail -Fn0 /var/log/audit/audit.log | while read line; do if echo "$line" | grep -q "passwd_changes"; then echo "[ALERT] 文件被修改: $(date)" # 可发送告警(如 mail/curl) # echo "$line" | mail -s "Security Alert" admin@example.com fi done
使用 inotify(文件系统事件)
适合监控特定目录的文件创建、修改、删除。
Python 示例(依赖 inotify):
#!/usr/bin/env python3
import pyinotify
import logging
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CREATE(self, event):
logging.warning(f"文件创建: {event.pathname}")
def process_IN_DELETE(self, event):
logging.warning(f"文件删除: {event.pathname}")
def process_IN_MODIFY(self, event):
logging.warning(f"文件修改: {event.pathname}")
wm = pyinotify.WatchManager()
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch('/var/log', pyinotify.IN_CREATE | pyinotify.IN_DELETE | pyinotify.IN_MODIFY, rec=True)
notifier.loop()
监控系统日志(Syslog / Journald)
适合监控 SSH 登录失败、sudo 使用等安全事件。
Bash 示例(监控 SSH 暴力破解):
#!/bin/bash
journalctl -f -u sshd -n 0 | while read line; do
if echo "$line" | grep -qi "Failed password"; then
ip=$(echo "$line" | grep -oP 'from \K[0-9.]+')
count=$(grep -c "Failed password for.*$ip" /var/log/auth.log 2>/dev/null)
if [ "$count" -gt 5 ]; then
echo "检测到 SSH 爆破攻击,IP: $ip 失败次数: $count"
# 可追加到防火墙黑名单
# iptables -A INPUT -s $ip -j DROP
fi
fi
done
使用 eBPF(现代高性能监控)
适合自定义内核级跟踪,如监控特定系统调用。
Python 示例(使用 bcc 库监控 openat 系统调用):
#!/usr/bin/env python3
from bcc import BPF
bpf_text = """
int trace_openat(struct pt_regs *ctx, int dfd, const char __user *filename) {
bpf_trace_printk("Open file: %s\\n", filename);
return 0;
}
"""
b = BPF(text=bpf_text)
b.attach_kprobe(event="do_sys_openat2", fn_name="trace_openat")
b.trace_print()
跨平台方案(使用 Python 的 watchdog)
安装依赖: pip install watchdog
#!/usr/bin/env python3
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_any_event(self, event):
print(f"[{time.ctime()}] 事件类型: {event.event_type} 路径: {event.src_path}")
# 可在此发 HTTP 回调、写数据库等
observer = Observer()
observer.schedule(MyHandler(), path='/data/monitor', recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Windows 事件日志监控(PowerShell)
# 监控安全日志中的登录失败(EventID 4625)
$logName = 'Security'
$eventId = 4625
$watcher = New-Object System.IO.FileSystemWatcher
Register-ObjectEvent -InputObject (Get-WmiObject -Class Win32_NTLogEvent -Filter "LogFile='$logName' AND EventCode=$eventId") -EventName "InstanceCreationEvent" -Action {
$event = $EventArgs.NewEvent
Write-Host "登录失败 - 用户: $($event.UserName) 时间: $($event.TimeGenerated)"
# 可触发动作:发送邮件、写入文件
}
# 保持会话运行
while ($true) { Start-Sleep -Seconds 5 }
通用脚本设计最佳实践
- 持久化运行:使用 systemd 服务或后台进程(nohup / &)
- 告警机制:集成邮件(sendmail)、即时通讯(Slack Webhook)、钉钉机器人
- 日志去重与限流:避免高频事件刷屏,使用状态缓存(如 redis)
- 错误恢复:遇到异常后尝试重启(try-except / trap)
- 性能优化:对高频事件使用批量处理,避免长时间阻塞
完整监控框架结构(Bash 版)
#!/bin/bash
MONITOR_DIR="/data/critical"
LAST_STATE_FILE="/tmp/monitor_state.txt"
# 获取当前快照
find "$MONITOR_DIR" -type f -printf '%s %p\n' | sort > /tmp/current_state.txt
if [ -f "$LAST_STATE_FILE" ]; then
diff "$LAST_STATE_FILE" /tmp/current_state.txt | while read line; do
if echo "$line" | grep -q "^>"; then
echo "新增文件: ${line:1}"
elif echo "$line" | grep -q "^<"; then
echo "文件被删除: ${line:1}"
fi
done
fi
cp /tmp/current_state.txt "$LAST_STATE_FILE"
根据具体场景选择合适的技术栈:
- 内核级/安全审计 → Auditd / eBPF
- 文件变化监控 → inotify / Watchdog
- 日志文本监控 → journalctl / tail + grep
- Windows 系统 → Event Log + PowerShell
建议优先使用成熟的监控系统(Prometheus + Node Exporter、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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播