澄清与定位
如果你指的是 Linux 的 strings 命令,它是用来从二进制文件中提取可打印字符串的工具,并非系统监控程序;在 Ubuntu 上做系统状态监控应使用专门的监控命令或平台。若你确实想“用字符串匹配做监控”,常见做法是结合日志关键字进行告警(见下文“字符串关键字监控”与“进程字符串监控”)。
快速可用的监控方案
- 命令行即时查看
- 资源总览:top、htop(交互更友好)、vmstat、iostat(需安装 sysstat:sudo apt install sysstat)、nmon、free -h、df -h。
- 专项工具:iotop(按进程看磁盘 I/O)、atop(综合资源与历史)、glances(跨平台,支持客户端/服务器模式远程监控)。
- 图形化与 Web
- 桌面:GNOME 系统监视器(系统自带)。
- Web/综合:Glances(可浏览器访问)、Prometheus + Grafana(指标采集与可视化)、Zabbix(企业级监控平台)。
用字符串关键字做监控
-
日志关键字告警(Shell + mail)
- 思路:在系统日志中匹配关键字(如 error、warning、critical),发现即发邮件;配合 cron 定时执行。
- 示例(检查昨天的 /var/log/messages,适配不同发行版可将日志路径换为 /var/log/syslog):
- 保存为 /opt/scripts/os-log-alert.sh
- #!/bin/bash
prev_count=0
注意:部分系统日志为 /var/log/syslog
logfile=“/var/log/messages”
count=$(grep -i “$(date --date=‘yesterday’ ‘+%b %e’)” “$logfile” | egrep -wi ‘warning|error|critical’ | wc -l)
if [ “$prev_count” -lt “$count” ]; then
SUBJECT=“WARNING: Errors found in log on $(date --date=‘yesterday’ ‘+%b %e’)”
MESSAGE=“/tmp/logs.txt”
TO=“admin@example.com”
echo “ATTENTION: Errors are found in $logfile. Please check.” > “$MESSAGE”
echo “Hostname: $(hostname)” >> “$MESSAGE”
echo “----------------------------------------” >> “$MESSAGE”
grep -i “$(date --date=‘yesterday’ ‘+%b %e’)” “$logfile” | awk ‘{$3=“”;print}’ | egrep -wi ‘warning|error|critical’ >> “$MESSAGE”
mail -s “$SUBJECT” “$TO” < “$MESSAGE”
rm -f “$MESSAGE”
fi
- 赋权并加入定时任务(每天 07:00 运行):
- chmod +x /opt/scripts/os-log-alert.sh
- crontab -e → 0 7 * * * /bin/bash /opt/scripts/os-log-alert.sh
- 说明:邮件发送依赖本地 mail 命令配置;若失败可改为写入日志或接入企业告警通道。
-
进程“字符串”监控(按进程名/命令行特征)
- 思路:用 ps -ef | grep “[p]attern” 精确匹配进程,不存在则告警或重启。
- 示例(检测 nginx 是否在运行):
- #!/bin/bash
if ! ps -ef | grep -q “[n]ginx”; then
echo “Nginx 未运行,尝试启动…”
systemctl start nginx || echo “启动失败”
fi
- 可扩展为阈值判断、自动重启、写入告警日志等。
进阶与自动化
- 集中化监控与可视化
- 小规模:用 Glances 的 -s 启动服务器模式,在其他机器用 glances -c 连接,统一查看多台主机状态。
- 中大规模:部署 Prometheus 采集指标,Grafana 做面板展示与告警规则配置,形成统一监控平台。