Ubuntu下Node.js日志审计的实施方法
日志库是日志审计的源头,需根据需求选择功能匹配的工具。Winston是最流行的日志库,支持多传输方式(文件、控制台、HTTP等)、多日志级别(info/warn/error等),灵活性强;Pino以高性能著称,采用JSON格式输出,适合高并发场景;Bunyan强调结构化日志,提供专用CLI工具查看日志,便于后续分析。这些库均能满足日志记录的基本需求,可根据应用规模选择。
将Node.js日志输出到系统日志服务(如rsyslog或systemd journal),实现集中化管理。配置Node.js应用将日志输出到stdout/stderr(例如使用Winston的Console传输),系统日志服务会自动捕获这些日志。这种方式便于统一收集和后续处理,避免日志分散在多个文件中。
使用logrotate工具定期轮转日志文件,避免单个文件过大占用磁盘空间。创建/etc/logrotate.d/nodejs配置文件,设置轮转规则(如每日轮转、保留7天、压缩旧日志、限制文件大小)。例如:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
此配置会每天轮转/var/log/nodejs/目录下的日志文件,保留最近7天的压缩日志。
grep搜索关键字(如grep 'ERROR' /var/log/nodejs/error.log)、awk统计日志数量(如awk '/Jun 17/ {count++} END {print count}' /var/log/nodejs.log)、sed替换文本内容,快速定位错误或异常。file输入插件),解析后存储到Elasticsearch,通过Kibana创建仪表板展示日志趋势、错误分布等。chmod设置日志文件权限(如640),限制仅授权用户(如root、adm组)访问。例如:sudo chmod 640 /var/log/nodejs/*.log
sudo chown root:adm /var/log/nodejs/*.log
gpg或OpenSSL加密敏感日志(如包含用户密码、信用卡号的日志),防止数据泄露。例如:gpg -c /var/log/nodejs/sensitive.log
Fail2Ban识别暴力破解行为(如SSH登录失败),自动封禁可疑IP;集成Prometheus+Grafana监控日志中的异常指标(如错误率飙升),设置告警规则(如错误数超过100次/分钟时发送邮件)。cron定时运行(如每天0点运行)。例如:#!/bin/bash
ERROR_COUNT=$(grep -c 'ERROR' /var/log/nodejs/error.log)
echo "Date: $(date), Error Count: $ERROR_COUNT" >> /var/log/nodejs/error_report.txt
mail -s "Node.js Daily Error Report" admin@example.com < /var/log/nodejs/error_report.txt
Watcher插件)实现实时异常检测,确保及时发现潜在安全问题。