1.系统日志默认分类
/var/log/messages # 系统服务日志,包括服务的信息,报错等等
/var/log/secure # 系统认证信息日志
/var/log/maillog # 系统邮件服务日至
/var/log/cron # 系统定时任务日志
/var/log/boot.log # 系统启动日志
[[email protected] Desktop]# > /var/log/messages # 清空desktop的messages日志
[[email protected] Desktop]# cat /var/log/messages
[[email protected] Desktop]# systemctl restart sshd.service # 可以任意重启一个服务
[[email protected] Desktop]# cat /var/log/messages # 会生成日志

2.日志管理服务rsyslog(rsyslog负责采集日志和分类存放日志)
(1)日志设备(可以理解为日志类型)
auth # pam产生的日志
authpriv # ssh,ftp等登录信息的验证信息
cron # 时间任务相关
kern # 内核
lpr # 打印
mail # 邮件
mark(syslog)–rsyslog # 服务内部的信息,时间标识
news # 新闻组
user # 用户程序产生的相关信息
uucp # unix to unix copy, 即unix主机之间相关的通讯
local 1~7 # 自定义的日志设备
(2)日志级别
debug # 有调式信息的,日志信息最多
info # 般信息的日志,最常用
notice # 最具有重要性的普通条件的信息
warning # 警告级别
err # 错误级别,阻止某个功能或者模块不能正常工作的信息
crit # 严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert # 需要立刻修改的信息
emerg # 内核崩溃等严重信息
none # 什么都不记录
注意:从上到下,级别从低到高,记录的信息越来越少,详细的可以查看手册: man 3 syslog连接符号
(3)修改主配置文件中日志采集规则(/etc/rsyslog.conf )
格式:
日志类型.日志级别 日志处理方式
注:如果有多个规则可以用分号隔开
举例:
*.* /var/log/westos # 所有级别,所有类型的日志都存放在/var/log.westos里
*.*;authpriv.none /var/log/westos # 在所有级别,所有类型中除了authpriv.none日志,其余的都放在/var/log/westos里
[[email protected] Desktop]# vim /etc/rsyslog.conf
55 *.* /var/log/westos # 所有类型所有级别的日志都记录在/var/log/westos中
[[email protected] Desktop]# ll /var/log/westos # 查看自己刚才定义的日志文件,发现不存在,因为没有重启服务,更改文件还没有生效
ls: cannot access /var/log/westos: No such file or directory
[[email protected] Desktop]# systemctl restart rsyslog.service # 改完配置文件之后记得重启服务
[[email protected] Desktop]# ll /var/log/westos
-rw-r--r-- 1 root root 487 Oct 13 03:51 /var/log/westos
3.日志同步
udp协议 # 快(类似于发短信),不需要回应
tcp协议 # 慢,但稳定(类似于打电话),需要回应
在日志发送方
vim /etc/rsyslog.conf
*.* @172.25.254.1 # 通过udp协议把日志发送到1主机
*.* @@172.25.254.1 # 通过tcp协议把日志发送到1主机
在日志接收方
vim /etc/rsyslog.conf # 日志规则的主配置文件
15 $ModLoad imudp # 日志接收插件
16 $UDPServerRun 514 # 日志接收插件所使用的端口
[[email protected] ~]# vim /etc/rsyslog.conf # 在server端(日志发送方)设定日志同步对象(以udp协议的方式同步)
55 *.* @172.25.254.138
[[email protected] ~]# systemctl restart rsyslog.service
# 在desktop端(日志接收方)打开接收日志的接口(server端开启的是哪个接口,desktop端就开哪个接口,即此处开启udp的接口)
[[email protected] Desktop]# vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp
16 $UDPServerRun 514

[[email protected] Desktop]# systemctl restart rsyslog.service # 重启服务
[[email protected] Desktop]# systemctl stop firewalld # 关闭防火墙
# 在客户(server)端测试:
[[email protected] ~]# logger hello # 在server端生成测试日志
[[email protected] ~]# logger hello
[[email protected] ~]# logger hello
[[email protected] ~]# logger hello
[[email protected] ~]# cat /var/log/messages # 先在本机查看是否生成

[[email protected] Desktop]# cat /var/log/messages # 再在desktop端查看是否同步成功

4.日志采集
(1) 定义日志采集格 (方便对日志进行分析)
$template 格式名称 ,"日志采集格式"
%timegenerated% # 日志生成时间
%FROMHOST-IP% # 日志来源主机的ip
%syslogtag% # 日志生成程序
%msg% # 日志内容
\n # 换行
# 在服务(desktop)端
[[email protected] ~]# vim /etc/rsyslog.conf
47 $template WESTOS,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages;WESTOS
[[email protected] ~]# systemctl restart rsyslog.service
[[email protected] ~]# > /var/log/messages
# 在客户(server)端
[[email protected] ~]# logger test # 生成日志
[[email protected] ~]# logger test
[[email protected] ~]# logger test
[[email protected] ~]# cat /var/log/messages # 先查看是否在本机生成日志

# 在服务(desktop)端
[[email protected] ~]# cat /var/log/messages # 查看同步过来的日志,格式是否改变

5.时间同步
# 在服务端(desktop端)设置时间同步
[[email protected] ~]# vim /etc/chrony.conf
22 allow 172.25.254/24 # 允许谁看
172.25.254 # 所属网段
24 # 子网掩码
注:如果设置成0.0.0.0,则表示任何人都可以访问
29 local stratum 10 # 自己作为时间源
[[email protected] ~]# systemctl restart chronyd.service
# 在客户端(server端)查看同步
[[email protected] ~]# vim /etc/chrony.conf # 设置同步138这台主机的时间
3 server 172.25.254.138 iburst # iburst表示使得设定立即生效
[[email protected] ~]# systemctl restart chronyd.service
[[email protected] ~]# chronyc sources -v # 检测时间是否同步成功

^ # 表示138这台主机是一个服务器
* # 表示已经同步过了
watch # 监控进程
tail # 监控文件
6.日志分析工具journalctl
journalctl主要保证日志的时效性和详细性,保存,备份,以及定时删除日志不是他的特长,但是,他也可以实现
注:journalctl查到的是系统当前生成的日志;系统重启之后,内存断过电,保存的日志就会丢失,用journalct就查看不到日志;而/var/log/messages文件里记录的是被采集过的日志,系统重启不影响其对日志的记录
journalctl # 查看系统当前的所有日志
journalctl -n 3 # 查看最新的三条日志
journalctl -p err # 查看报错日志
journalctl -f # 监控日志
journalctl --since --until # -从什么时间到什么时间的日志
journalctl -o verbose # 显示日志能够使用的详细进程参数
[[email protected] ~]# journalctl # 查看所有日志
[[email protected] ~]# journalctl -n 3 # 查看最新的三条日志
[[email protected] ~]# journalctl --since 9:00 # 查看从9点开始的日志
[[email protected] ~]# journalctl --since 9:00 --until 9:01 # 查看9点到9:01的日志,但是发现并没有9:01的日志

[[email protected] ~]# journalctl --since 9:00 --until 9:01:50 # 此时就可以看到9:01的日志

[[email protected] ~]# journalctl -p err # 查看错误日志

# 当有两个相同的进程,但是进程的PID不同,想要查找其中一个进程的日志时,/var/log/messages就不能满足我们
[[email protected] ~]# systemctl status sshd

[[email protected] ~]# systemctl restart sshd.service
[[email protected] ~]# systemctl status sshd

[[email protected] ~]# journalctl -o verbose # 查看日志的详细信息,包括PID等
[[email protected] ~]# journalctl _PID=1254 _COMM=sshd # 根此时就可以据自己的需求来查找特定的日志
[[email protected] ~]# journalctl _PID=2426 _COMM=sshd

对systemd-journald的管理
默认此程序只负责对日志进行查看而不对日志进行保存和采集,那么关机后再开机,对日志进行查看,
只能查看开机后的日志,系统之前的日志全部都保存在内存里,关机后内存释放后就被清空了,开机
后用journalctl看不到
# 如何让journalctl 采集日志,即系统重启之后还可以通过journalctl查看到日志(让systemd-journald保存日志到硬盘中)
[[email protected] ~]# mkdir /var/log/journal # 建立目录存放journalctl 采集的日志
[[email protected] ~]# ll -d /var/log/journal
drwxr-xr-x 2 root root 6 Oct 14 10:14 /var/log/journal
[[email protected] ~]# chgrp systemd-journal /var/log/journal/ # systemd-journal
[[email protected] ~]# ll -d /var/log/journal
drwxr-xr-x 2 root systemd-journal 6 Oct 14 10:14 /var/log/journal
[[email protected] ~]# chmod g+s /var/log/journal/ # 使得产生的日志全部属于systemd-journal组
[[email protected] ~]# ll -d /var/log/journal
drwxr-sr-x 2 root systemd-journal 6 Oct 14 10:14 /var/log/journal
[[email protected] ~]# ps aux | grep systemd-journal # 查看systemd-journal的进程号
root 358 0.0 0.2 40864 2160 ? Ss 09:00 0:00 /usr/lib/systemd/systemd-journald
root 2784 0.0 0.0 112640 940 pts/0 R+ 10:15 0:00 grep --color=auto systemd-journal
[[email protected] ~]# kill -1 358 # 为了让更改生效,但是不想重启系统,就用这条命令实现
[[email protected] ~]# cd /var/log/journal/
[[email protected] journal]# ls
946cb0e817ea4adb916183df8c4fc817
[[email protected] journal]# bootctl # 查看系统的id,可以看到与上面一致

[[email protected] journal]# ll 946cb0e817ea4adb916183df8c4fc817
total 8192-rw-r----- 1 root systemd-journal 8388608 Oct 14 10:16 system.journal
[[email protected] journal]# date # 查看重启之前的时间
[[email protected] journal]# reboot
[[email protected] ~]# cd /var/log/journal/
[[email protected] journal]# ls
946cb0e817ea4adb916183df8c4fc817
[[email protected] journal]# cd 946cb0e817ea4adb916183df8c4fc817/
[[email protected] 946cb0e817ea4adb916183df8c4fc817]# ls
system.journal user-42.journal
[[email protected] 946cb0e817ea4adb916183df8c4fc817]# journalctl # 此时就可以看到重启之前的日志了
注:user-42.journal采集的是日志数据,而不是文件,所以不能用cat user-42.journal来查看日志,直接进入到user-42.journal所在目录,用journalctl 命令直接查看日志即可
7…timedatectl命令 # 查看系统的时间信息
timedatectl status # 显示当前时间信息
timedatectl set-time # 设定当前时间
timedatectl set-timezone # 设定当前时区
timedatectl set-local-rtc 0|1 # 设定是否使用utc时间,可以解决双系统时间错乱问题,0表示开启,1表示不开启
timedatectl list-timezones # 查看支持的所有时区
UTC # 世界时间
RTC # 硬件时间(bios time)
CST # 本地时间
[[email protected] ~]# timedatectl

[[email protected] ~]# timedatectl list-timezones
[[email protected] ~]# timedatectl set-timezone Asia/Shanghai
[[email protected] ~]# timedatectl

[[email protected] ~]# timedatectl set-local-rtc 1 # 这个命令相当于修改/etc/adjtime文件
[[email protected] ~]# cat /etc/adjtime[[email protected] ~]# timedatectl

[[email protected] ~]# timedatectl set-local-rtc 0
[[email protected] ~]# cat /etc/adjtime

[[email protected] ~]# timedatectl set-time "2018-08-08 22:22:22" # 临时更改时间
[[email protected] ~]# date # 更改成功
Wed Aug 8 22:22:24 CST 2018