CentOS系统日志分析指南
CentOS系统的日志文件集中存储在/var/log/目录下,核心日志文件及用途如下:
/var/log/messages:系统通用日志,记录内核、服务及应用程序的常规信息(如启动过程、IO错误、网络异常),是系统故障诊断的基础入口。/var/log/secure:安全相关日志,记录SSH登录、sudo使用、用户认证等安全事件,用于审计潜在的安全威胁(如暴力破解)。/var/log/boot.log:系统启动日志,记录开机过程中的内核初始化、服务启动状态(如失败的服务)。/var/log/cron:定时任务日志,记录cron任务的执行情况(如任务失败、执行时间)。/var/log/maillog:邮件服务日志,记录Postfix/Sendmail等邮件服务器的收发、错误信息。/var/log/dmesg:内核启动日志,记录硬件检测、设备驱动加载等内核级信息(如USB设备识别、磁盘错误)。/var/log/httpd/access_log(访问日志,记录HTTP请求详情)、/var/log/httpd/error_log(错误日志,记录服务器故障),Nginx的对应日志路径为/var/log/nginx/。命令行工具是日志分析的基础,适合快速筛选、统计和实时监控:
grep:搜索特定关键词,支持正则表达式。例如,查找/var/log/secure中SSH登录失败的记录:grep "Failed password" /var/log/secure;统计错误日志中的错误数量:grep -c "ERROR" /var/log/messages。tail:实时查看日志末尾内容,适合监控动态日志。例如,实时监控系统日志:tail -f /var/log/messages;监控安全日志的实时变化:tail -f /var/log/secure。awk:提取日志中的特定字段(如时间、IP、状态码)。例如,从Apache访问日志中提取访问时间、请求路径和状态码:awk '{print $4, $7, $9}' /var/log/httpd/access_log;提取SSH登录失败的IP地址:awk '/Failed password/ {print $11}' /var/log/secure | sort | uniq -c(统计每个IP的失败次数)。sed:文本替换或提取,适合处理复杂格式的日志。例如,删除日志中的注释行:sed '/^#/d' /var/log/messages;提取包含“error”的行:sed -n '/error/p' /var/log/messages。journalctl:CentOS 7及以上版本用于管理systemd日志的工具,支持查看所有日志(内核+应用)。常用命令:查看系统启动日志:journalctl -b;实时查看日志变化:journalctl -f;搜索包含“error”的日志:journalctl -g "error";查看指定服务的日志(如nginx):journalctl -u nginx。对于复杂的日志管理需求(如集中存储、可视化、高级搜索),可使用以下工具:
yum install logwatch -y;查看当日报告:logwatch --output mail --mailto your_email@example.com(替换为实际邮箱)。yum或官方文档),配置Logstash收集/var/log/messages等日志,启动服务后在浏览器访问http://服务器IP:5601查看Kibana界面。yum install graylog-server graylog-web-interface -y;配置:修改/etc/graylog/server/server.conf中的密码secret和绑定IP,启动服务后访问http://服务器IP:9000登录。yum install goaccess -y;使用:goaccess /var/log/httpd/access_log --log-format=COMBINED(--log-format根据日志格式调整,如COMBINED为通用格式),支持生成HTML报告(--output=report.html)。为防止日志文件过大占用磁盘空间,需使用logrotate工具进行自动轮转:
/etc/logrotate.conf是全局配置文件,/etc/logrotate.d/目录下是各服务的具体配置(如/etc/logrotate.d/httpd对应Apache日志)。/etc/logrotate.d/custom,添加以下内容(以/var/log/myapp.log为例):/var/log/myapp.log {
daily # 每天轮转
rotate 7 # 保留7个旧日志
compress # 压缩旧日志(如.gz格式)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
postrotate # 轮转后执行的命令(如重启服务)
systemctl restart myapp > /dev/null 2>&1 || true
endscript
}
logrotate -vf /etc/logrotate.d/custom(-v显示详细信息,-f强制轮转)。tail -f /var/log/secure监控SSH登录,tail -f /var/log/messages监控系统错误,及时发现异常(如频繁的登录失败)。/var/log/secure、/var/log/messages)备份到远程服务器或云存储,防止数据丢失。