Linux系统中的日志文件通常遵循特定的格式,不同日志文件可能有不同的列属性。以下是常见Linux日志文件格式的详细解析:
典型格式:
月 日 时间 主机名 进程名[PID]: 消息内容
示例:
Jan 12 14:30:22 server1 sshd[1234]: Accepted password for user1 from 192.168.1.100 port 54321 ssh2
列属性解析: 1. 时间戳:通常包含月、日和时间(24小时制) 2. 主机名:生成日志的系统名称 3. 进程名:生成日志的应用程序或服务名称 4. 进程ID:方括号中的数字,表示进程的PID 5. 消息内容:具体的日志信息
专门记录用户认证相关事件,如SSH登录、sudo使用等。
示例:
Jan 12 14:30:22 server1 sshd[1234]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
特殊列属性:
- pam模块:如pam_unix
表示使用的PAM认证模块
- 操作类型:如session opened
表示会话开始
- 用户信息:包括用户名和UID
常见格式(Combined Log Format):
远程主机 远程登录名 认证用户名 [日期时间] "请求" 状态码 字节数 "来源URL" "用户代理"
示例:
192.168.1.100 - user1 [12/Jan/2023:14:30:22 +0800] "GET /index.html HTTP/1.1" 200 1234 "http://example.com/referrer" "Mozilla/5.0"
列属性解析:
1. 远程主机:客户端IP地址
2. 远程登录名:通常为-
(未使用)
3. 认证用户名:HTTP认证的用户名
4. 日期时间:请求时间,带时区
5. 请求:HTTP方法、URI和协议版本
6. 状态码:HTTP响应状态码
7. 字节数:返回给客户端的字节数
8. 来源URL:Referer头部信息
9. 用户代理:客户端浏览器/设备信息
类似Apache但可自定义格式,常见格式:
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
记录系统启动过程中的事件,格式通常与通用系统日志类似。
记录内核相关消息,格式:
月 日 时间 主机名 kernel: 消息内容
记录cron任务执行情况,格式:
月 日 时间 主机名 CRON[PID]: (用户) CMD (命令)
grep:过滤特定内容
grep "error" /var/log/syslog
awk:提取特定列
awk '{print $1,$2,$3,$5}' /var/log/messages
cut:按分隔符提取列
cut -d' ' -f1-5 /var/log/auth.log
journalctl:systemd日志查看工具
journalctl -u nginx.service --since "2023-01-12 14:00:00"
logrotate:日志轮转配置工具
许多服务允许自定义日志格式,例如在Apache中:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
理解日志文件的列属性对于有效监控和故障排查至关重要。不同发行版和服务的日志格式可能略有差异,建议查阅相关文档获取确切信息。