文章目录
什么是日志文件
注意:系统版本信息。Linux ubuntu 4.15.0-112-generic
日志记录用户的操作。通过查看日志,解决服务器所出的问题,进行纠错。日志有法律依据,可用于处理法律纠纷。
常见日志文件:
/var/log/cron | 例行工作日志(cron:记录系统) |
/var/log/dmesg | 内核检测过程中分析的系统硬件信息 |
/var/log/lastlog | 记录系统上账号最近一次登录的信息 |
/var/log/mailog或/var/log/mail/* | 记录邮件往来信息 |
/var/log/messages | 系统发生的重要信息(比如错误信息) |
/var/log/secure | 记录涉及到输入用户账号密码时的信息 |
/var/log/wtmp,/var/log/failog | 记录正确/错误登录的用户信息 |
/var/log/httpd/,/var/log/news/,/var/log/samba/*… | 个别服务制定的日志文件 |
rsyslog:记录日志的服务
rsyslog是常驻内存的服务,用于记录系统各类信息,并输出到日志文件或者设备上。/etc/rsyslog.d下是两个配置文件(.conf)。
日志文件内容的一般格式
日志每行格式:时间 地点 人物 信息
rsyslog的配置文件目录/etc/rsyslog.conf和/etc/rsyslog.d/
/etc/rsyslog.conf 负责整体的配置信息
/etc/rsyslog.d/ 则是负责配置输出的日志信息与日志文件的对应。其下是两个配置文件:20-ufw.conf ,50-default.conf。
示例:
查看上图最后一行提示的目录,结果如下:
有效行的信息格式:事件.级别 输出文件
每个事件都有一个内置的级别。当时间发生高于或等于这个级别时,系统会把这个事件记录到后面的那个输出文件中。输出文件前有-符号,表示先写入内存,再写入硬盘。
如kern…行。事件处是*,表示任何事件;级别处是*,表示任何级别的事件都会记录。
示例:
sudo vim /etc/rsyslog.conf #编辑配置文件
在配置文件中加入如下行
local5.debug /var/log/aaa
sudo systemctl restart rsyslog #重启rsyslog服务
logger -p local5.debug "add message" #向日志写入信息。
ls /var/log #查看aaa的存在
cat /var/log/aaa #查看日志内容。
注意;只有向日志写入信息后,aaa才会存在。
日志信息的分类
类型名 | 含义 |
---|---|
auth(authpriv) | 主要与认证有关的信息,比如login,su,ssh登录时产生的信息 |
cron | 例行工作调度cron/at等信息 |
daemon | 与各个daemon有关的信息 |
kern | 内核产生的信息 |
lpr | 打印相关的信息 |
邮件相关的信息记录 | |
news | 新闻组信息 |
syslog | 就是syslog/rsyslog本身产生的信息 |
user,uucp,local0~local7 | 与机器相关的一些信息 |
日志信息的等级和连接符
等级 | 名称 | 说明 |
---|---|---|
0 | none | 不输出任何信息(不记录) |
1 | debug | 调试信息 |
2 | info | 基本信息说明 |
3 | notice | 注意事项说明 |
4 | waring(warn) | 警告信息,但不影响运行 |
5 | err(error) | 错误信息,已造成不能运行 |
6 | crit | 比err严重,到临界点了 |
7 | alert | 比crit还严重 |
8 | emerg(panic) | 通常是硬件出错,内核已经无法运行的程度 |
等级连接符是为了方便我们书写配置文件,产生的。有以下:
等级连接符是为了方便我们书写配置文件,产生的。有以下:
. 表示大于等于后接等级的日志信息都会记录
.* 任意等级
.= 表示只有等于后接等级的日志信息才记录
!= 表示不等于后接等级的日志信息都会记录
重要概念区分:syslog是函数,rsyslogd是进程(daemon),rsylog.service是服务
名称 | 解释 |
---|---|
syslog | 这个是 Linux 核心所提供的登录文件设计指引,所有的要求大概都写入到一个名为 syslog.h 的头文件案中。如果你想要开发与登录文件有关的软件, 那你就得要依循这个 syslog 函数的要求去设计才行!可以使用 man 3 syslog 去查询一下相关的数据! |
rsyslogd | 为了要达成实际上进行讯息的分类所开发的一套软件,所以,这就是最基本的 daemon 程序! |
rsyslog.service | 为了加入 systemd 的控制,因此 rsyslogd 的开发者设计的启动服务脚本设置! |
日志文件的安全性设置
1.方法一:给日志文件添加属性,防止修改。
lssattr /var/log/aaa #查看文件aaa属性
chattr +a /var/log/aaa #使得文件a只能添加,不能删除。
2.方法二:另外做一个中央日志服务器,专门保存别的机器的日志。
需要给设置和日志输出目录(换成ip)。
日志文件服务器设置
日志文件的轮替(logrotate)
logrotate的配置文件:/etc/logrotate.conf和/etc/logrotate.d/
日志的轮替规则:
如果配置文件中有"dateext"
参数,则日志会用日期作为文件后缀,日志文件名不会重叠,就不会发生旧文件改名;
如果无此参数,日志文件会发生改名。当启用新的文件时,例如messages,旧的文件会改为messages.1,原来的messages.1文件会变为messages.2,以此类推,过早的文件可能会被压缩,超过最大序号的旧文件会被删除。(每次轮替可类比整个数组元素后移一位:每个a[i]会后移一位,首部空出一个位置可存数据,超过数组长度的丢弃)
cat /etc/logrotate.conf #打开logrotate的配置文件:与默认配置和日志滚动有关
结果如下:
图片说明:
weekly #单位是周
rotate 4 #此两行说明保留四周的日志文件
create #日志文件跟新后,需要重新创建文件。如message更新为message1.
compress #说明生成日志文件的备份是否需要压缩,默认用gzip压缩成.gz文件。注释表示不压缩。compresscmd可以改变压缩方式。
注意:以上是默认设置。若上下冲突,2以下为准。
include /etc/logrotate.d #此logrotate的配置文件包含的文件,即从别处拉入配置文件。
/var/log/wtmp {
missingok#如果日志日志丢失了,不记录错误信息。
monthly #单位是月,上下冲突,以月为单位。
create 0664 root utmp #日志文件跟新后,原文件没有了,重新重创建文件。
#0664是权限说明,root是所有者,utmp是所属组。
rotate 1
}
#若有minsize 1M,则表示日志文件超过1M后,回滚(更新)
#若有notifempty 表示日志为空则不回滚。
综上logrotate的设置语法如下:
/var/log/xxx
/var/log/yy
... #含绝对路径的文件名,换行并列
{
weekly
rotate 3
...... #一些参数
}
logrotate的另一个配置文件
ll /etc/logrotate.d #查看logrotate的另一个配置文件
两个配置文件的关系:logrotate.d是一个目录,此目录下的所有文件会自动读入/etc/logrotate.conf中来进行。logrotate.d中没规定的,以logrotate.conf为准。
实际测试logrotate的操作
logrotate主要对日志做备份。操作如下:
logrotate --version #查看logrotate的版本
man logrotate #获取该命令的使用说明
自定义日志文件的轮替功能
日志文件的管理
Linux用systemd/rsyslog,klogd这两个服务和logrotate这个程序管理日志文件。
syslogd/rsyslog: rsyslog已经代替syslogd,它会把系统各种信息分类,放置到相应的日志文件中.
klogd: 记录内核产生的各项信息
logrotate:日志文件的轮替,由于时间久了,日志文件会越来越大,影响读取,故将旧文件替换
日志文件分析:logwatch
除了直接查看各日志文件信息外,也可用工具logwatch分析日志
vim /etc/logwatch/conf #进入logwatch的配置文件
logwatch #可以分析日志