Linux之日志文件
1. Linux常用的日志文件名
1. /var/log/cron 记录定时任务信息
2. /var/log/dmesg 记录系统在开机的时候内核检测过程中产生的各项信息
3. /var/log/lastlog 记录系统上所有账号最近一次登录系统时的相关信息-----lastlog
4. /var/log/maillog 记录邮件的往来信息
5. /var/log/messages 几乎系统发生的所有错误信息都记录在这个文件中
6. /var/log/secure 记录所有的登录信息,不管登录成功还是失败
7. /var/log/wtmp 记录正常登录系统的账号信息-----last (这个文件不能直接查看,需要使用命令)
8. /var/log/btmp 记录错误登录时所使用的账户信息-------lastb (这个文件不能直接查看,需要使用命令)
9. /var/log/boot 开机时候系统核心会侦测与启动硬件,接下来开始各种核心支持的功能启动。可以查看哪些服务启动,哪些服务没有启动。
10. /var/log/httpd/* /var/log/samba/* 不同网络服务会使用自己的日志文件来记录他们自己产生的各项信息
2. 日志文件所需的服务与进程
1. centos6.x
syslogd:统一管理日志文件,登录系统与网络等服务的信息
klogd:主要登录内核产生的各项信息
logrotate工具用来进行日志文件轮替
2. centos7.x
rsyslog.service:统一管理日志文件,登录系统与网络等服务的信息
logrotate工具用来进行日志文件轮替
systemd-journald.service:最主要的信息接受者,由 systemd 提供的;
基本上,系统由 systemd 所
管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的讯
息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个讯息发送给
rsyslog.service 作进一步的记载。
3. 日志文件的格式
-
-
- 事件发生的日期与时间
- 发生此事件的主机名
- 启动此事件的服务名称
- 该信息的实际数据内容
-
1. centos6.x
Aug 22 03:34:01 bastion rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1820" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
2. centos7.x
Aug 28 10:39:24 milanyi_docker_server systemd: Started Cleanup of Temporary Directories.
4. 配置文件
1. centos6.x
/etc/rsyslog.conf,可以指定对应的服务类型的存储路径
语法如下:
服务名称[.=!] 信息等级 信息记录的文件名或设备或主机

2. centos7.x
/etc/rsyslog.conf,可以指定对应的日志类型的存储路径
语法如下:
服务名称[.=!] 信息等级 信息记录的文件名或设备或主机

3. 信息等级

还有两个等级debug和none.
还需要留意下面三种:
"." 表示高于某个等级(包含当前等级)的信息都要记录
".=" 表示只记录当前等级的信息
".!" 表示除了当前等级,其它等级都记录
信息记录的文件名或设备或主机
文件的绝对路径:通常放在/var/log
打印机或其它:例如/dev/lp0这个打印机设备
远程主机:@192.168.1.10,当前也需要远程主机支持
4. 例子:
1. 记录单个服务日志
mail.info /var/log/maillog
2. 记录多个服务日志,并要求不同等级在不同文件中
news.*;cron.* /var/log/messages
news.warn;cron.warn /var/log/cronnews.warn
3. 记录多个服务日志,但是某个等级不需要记录
*.*;news,cron,mail.none /var/log/message 第一种
*.*;news.none;cron.none;mail.none /var/log/message 第二种
5. 自行添加日志文件
*.info /var/log/admin.log
重启一下rsyslog服务就可以了。
/etc/init.d/rsyslog restart
systemctl restart rsyslog
5. 日志文件的安全性
1. 如果手工修改了日志文件,并且保存了,就会导致日志文件无法继续记录,这个时候就需要重新启动rsyslog服务,才能继续记录日志。
2. 采用chattr,对日志文件进行隐藏权限,限制日志文件只允许增加,不能被删除。chattr +a即可。
6. 日志文件服务器的设置
1. server端
在/etc/rsyslog.conf配置文件中,
# Provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514
找到这几行,可以使用udp,也可以使用tcp,解除屏蔽,重启一下rsyslog服务就生效了。这样就可以看到,打开了514端口。
2. client端
在/etc/rsyslog.conf配置文件中,添加一行内容:
*.* @@remote-host:514
重启一下rsyslog服务即可。
6. 日志文件的轮替
1. logrotate的配置文件
/etc/logrotate.conf
/etc/logrotate.d/
配置文件分析:
# see "man logrotate" for details
# rotate log files weekly
weekly #默认按照一周进行轮替
# keep 4 weeks worth of backlogs
rotate 4 #默认保留四周的日志文件
# create new (empty) log files after rotating old ones
create #创建新的空的日志文件
# use date as a suffix of the rotated file
dateext #以日期作为轮替文件的后缀
# uncomment this if you want your log files compressed
#compress #是否要启用压缩
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d #包含的其它配置文件
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly #每月进行一次轮替
create 0664 root utmp 新建文件的权限,用户,属组
minsize 1M #超过1M才进行轮替,忽略时间参数
rotate 1 保留一个轮替文件
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
2. 查看一下/etc/logrotate.d/syslog的内容
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler #文件名可以有多个,并且用空格分开
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
说明:
1. 文件名可以有多个,必须是绝对路径,使用空格分隔符进行分隔
2. 参数使用{}进行包括
3. 执行脚本使用sharescripts...endscript的格式
4. prerotate:在启动logrotate之前的指令,例如修改日志文件的属性
5. postrotate:在启动logrotate之后的指令,例如重启服务kill -HUP
3. 加权限的例子
/var/log/spooler
{
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/messages
endscript
}
4. 实际测试logrotate的操作
-v 启动显示模式,会显示logrotate运行的过程
-f 强制执行rotate的操作
5. 自定义日志的轮替功能
/var/log/admin.log {
monthly <==每个月进行一次
size=10M <==文件容量大于 10M 则开始处置
rotate 5 <==保留五个!
compress <==进行压缩工作!
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/usr/bin/chattr +a /var/log/admin.log
endscript
}
6. nginx日志轮替
/usr/local/nginx/logs/*log {
daily
rotate 7
missingok #忽略错误
notifempty #如果日志文件为空,轮循不会进行。
create 0644 root root
compress
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
7. systemd-journald.service
1. 简介
systemd是第一个启动的软件,所以无法记录其它服务的启动过程,就需要systemd-journald.service来协助。
systemd-journald.service是记录在内存中,服务器重启就看不到了。
/run/log里面就是记录内存中的数据,直接查看会乱码
2. 如何查看systemd-journald.service的数据
使用journalctl命令
1. 不带任何参数
列出所有的日志数据,从最旧到最新
2. journalctl -n 10
列出最近10行的日志数据
3. journalctl -r
反向列出所有数据,从最新到最旧
4. journalctl -f
实时跟踪日志数据,类似于tail -f
5. journalctl --since "2021-08-31 00:00" --until "2021-08-31 01:00"
可以根据时间进行查询
3. 上面是查询systemd-journald.service的数据,那么如何往里面写入数据呢?
logger -p user.info "nihao"
4. systemd-journald.service的配置文件/etc/systemd/journald.conf
因为默认是放在内存中,如果想保存数据到硬盘中,做以下操作:
[root@study ~]# mkdir /var/log/journal [root@study ~]# chown root:systemd-journal /var/log/journal [root@study ~]# chmod 2775 /var/log/journal # 2. 重新启动 systemd-journald 并且观察备份的日志数据! [root@study ~]# systemctl restart systemd-journald.service [root@study ~]# ll /var/log/journal/ drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a
8. 使用一下鸟哥的logfile.sh文件,收集一下数据。

浙公网安备 33010602011771号