Ubuntu服务器跑久了,最怕两件事:一是被人偷偷摸进来改了文件你还不知道,二是半夜CPU跑满、磁盘撑爆却没人管。解决这两个痛点的核心思路,就是把日志审计和性能监控做成自动化闭环。不是装个工具看看图表就完事,而是要让它自动收集、自动分析、自动告警,甚至自动处置。下面直接讲实操方案,从工具选型到配置落地,一步到位。
日志审计自动化:让每一条操作都有迹可循
日志审计不是简单地看/var/log/auth.log,而是要完整记录谁、在什么时间、从哪个IP、执行了什么命令、改了哪些文件。Ubuntu自带auditd就能干这个,但很多人装完就放那儿了,规则没配等于白装。先安装auditd:
sudo apt install auditd -y
安装后立刻配置关键规则。监控/etc/passwd和/etc/shadow的修改,这是入侵者最爱动的文件:
sudo auditctl -w /etc/passwd -p wa -k passwd_changes sudo auditctl -w /etc/shadow -p wa -k shadow_changes
监控所有用户执行的命令,这需要在内核层面记录execve系统调用:
sudo auditctl -a exit,always -F arch=b64 -S execve -k command_exec
规则配好后用ausearch查看记录,比如查某个时间段内所有命令执行:
sudo ausearch -k command_exec -ts today
但光有记录不够,日志分散在本地,一旦服务器被攻破,日志也可能被清除。所以必须做集中化转发。用rsyslog把audit日志实时发送到远端日志服务器,在/etc/rsyslog.d/50-default.conf里加一条:
module(load="imfile") input(type="imfile" File="/var/log/audit/audit.log" Tag="audit_log") *.* @192.168.1.100:514
远端用Graylog或者Loki接收,配合Grafana做可视化。但更硬核的做法是直接用Wazuh,它把HIDS、日志分析、合规检查全打包了。在Ubuntu上部署Wazuh Agent,它会自动采集audit日志、系统日志、文件完整性变化,并且内置了异常检测规则。比如有人连续输错密码5次,Wazuh会自动触发告警,还能执行主动响应——直接封禁IP。这套组合下来,审计能力直接从被动记录升级到主动防御。
性能监控自动化:从数据采集到智能告警
性能监控的坑在于,很多人装个Prometheus加Node Exporter就觉得完事了,结果告警规则要么不配,要么配了一堆阈值,半夜被误报告警炸醒。正确的做法是分三层:采集层、存储层、告警分析层。采集层用Node Exporter没问题,但建议加上Process Exporter监控进程级指标,以及cAdvisor监控容器。Ubuntu上一条命令装完Node Exporter:
sudo apt install prometheus-node-exporter -y
然后修改/etc/default/prometheus-node-exporter,开启textfile collector,这样就能用脚本自定义指标:
ARGS="--collector.textfile.directory=/var/lib/node_exporter/textfile_collector"
写个简单的cron脚本,每分钟把需要监控的自定义数据写进去,比如检测某个服务进程数:
#!/bin/bash echo "custom_service_count $(ps aux | grep -c myservice)" > /var/lib/node_exporter/textfile_collector/custom.prom
存储层用VictoriaMetrics替代Prometheus,单机版就能撑住百万级指标,写入性能比Prometheus高好几倍,而且完全兼容PromQL。一条docker命令跑起来:
docker run -d -p 8428:8428 --name victoria-metrics victoriametrics/victoria-metrics
告警层是关键。不要只设静态阈值,比如CPU超过80%就告警。实际场景中,凌晨跑批任务CPU飙到90%是正常的,白天业务高峰期60%就可能有问题。用VictoriaMetrics的rollup函数做同比环比分析,比如当前负载比昨天同一时刻高出50%才告警。告警规则写在vmalert里,对接Alertmanager,再推送到企业微信或钉钉。这里有个独到经验:给告警分级。P0级是服务不可用,立刻电话通知;P1级是性能降级,发消息到群;P2级是趋势预警,只记录不打扰。这样既不会漏报,也不会被无效告警淹没。
自动化闭环:从发现问题到解决问题
日志审计和性能监控的真正价值,在于发现问题后能自动处置。比如Wazuh检测到暴力破解,自动调用iptables封IP;性能监控发现磁盘使用率超过85%,自动执行日志清理脚本。这套自动化编排可以用Ansible AWX或者干脆用Shell脚本配合cron来实现。举个例子,写一个磁盘自动清理脚本,当根分区使用率超过阈值时,自动清理旧的日志和临时文件:
#!/bin/bash
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt 85 ]; then
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
journalctl --vacuum-size=500M
echo "Disk cleanup executed at $(date)" >> /var/log/disk_cleanup.log
fi把这个脚本加到crontab每10分钟跑一次,再配合Node Exporter的textfile collector暴露清理次数指标,就能在Grafana上看到自动化处置的效果。更进一步,用Wazuh的command模块,在检测到特定日志事件时自动执行响应脚本。比如检测到/var/log/auth.log中出现“Failed password for root”超过10次,立刻执行:
iptables -A INPUT -s $SRCIP -j DROP
这套组合拳打下来,你的Ubuntu服务器就从被动挨打变成了主动防御加自愈。日志审计不再是事后追查的工具,而是实时威胁检测的触角;性能监控不再是看图的摆设,而是容量规划和自动伸缩的依据。日常运维里,真正省心的不是工具多,而是把工具串成链条,让它们自己跑起来。
