linux系统的日志文件是记录系统运行状态、服务行为、错误信息的核心文件,默认由rsyslog服务负责收集和存储,不同日志文件的列数会根据日志类型和配置略有不同,但通用的核心列结构是固定的。

linux系统日志的通用列结构
以最常见的/var/log/messages通用系统日志为例,默认配置下每行日志包含6列核心内容,各列的含义如下:
| 列序号 | 列内容 | 说明 |
|---|---|---|
| 1 | 时间戳 | 记录日志产生的具体时间,格式为 月 日 时:分:秒,例如 Jan 5 10:30:22 |
| 2 | 主机名 | 产生日志的linux系统主机名称,用于区分多台服务器的日志 |
| 3 | 服务/进程名 | 产生日志的服务或进程名称,例如sshd、nginx、kernel等 |
| 4 | 进程PID | 产生日志的进程ID,部分日志如果没有关联进程会显示短横线 |
| 5 | 日志标识 | 日志的级别标识,例如info、error、warning等,说明日志的重要程度 |
| 6 | 日志具体内容 | 日志的详细描述信息,说明具体的事件或错误原因 |
不同日志文件的列数差异
除了通用系统日志外,部分特殊类型的日志列数会有所调整:
- auth.log(认证日志):会在通用6列的基础上增加认证相关的用户名字段,总列数为7列,额外列记录执行认证操作的用户名。
- 自定义业务日志:如果用户通过rsyslog自定义了日志格式,列数会根据配置增加或减少,例如可以额外添加日志来源IP、请求路径等字段。
- 内核日志(dmesg输出):默认列数较少,通常只有时间戳和内核事件描述两列,不包含主机名、进程PID等内容。
查看日志列内容的方法
可以直接使用cat、less等命令查看日志文件,也可以通过awk命令提取指定列的内容,方便分析。以下是提取/var/log/messages前3列内容的示例:
# 查看/var/log/messages日志,提取前3列内容
awk '{print $1,$2,$3}' /var/log/messages
# 输出示例
Jan 5 10:30:22
Jan 5 10:30:23
Jan 5 10:30:24
自定义日志列配置
如果需要调整日志的列数和内容,可以修改rsyslog的配置文件/etc/rsyslog.conf,通过模板定义日志格式。以下是一个自定义日志格式的示例,增加日志来源IP列:
# 在rsyslog.conf中添加自定义模板 $template CustomFormat,"%timegenerated% %hostname% %syslogtag% %msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%n" # 应用模板到所有日志 *.* /var/log/custom.log;CustomFormat # 重启rsyslog服务生效 systemctl restart rsyslog
修改后生成的自定义日志会按照配置的模板输出列内容,用户可以根据实际需求调整模板中的字段,灵活控制日志的列数和内容。