进程和操作系统内核需要能够为发生的事件记录日志,这些日志可用于系统审核和问题的故障排查。依照惯例,这些日志永久存储在/var/log目录中。
Redhat 7
中系统的日志消息由两个服务负责处理,它们是system-journald
和rsyslog
。
systemd-journald
守护进程提供一种改进的日志管理服务,可以收集来自内核,启动过程的早期阶段,标准输出,系统日志,以及守护进程启动和运行期间错误消息。它将这些消息写入到一个结构化事件日志中,默认情况下不在重新启动之间保留。这允许系统日志错过的系统日志消息和事件收集到一个中央数据库中。
rsyslog
服务随后根据类型(或者设备)和优先级排列系统日志消息,将它们写入到/var/log
目录内的永久文件。
/var/log
目录保管由rsyslog
维护的各种特定系统和服务的日志文件。
日志文件 | 用途 |
---|---|
/var/log/messages | 服务信息日志 |
/var/log/secure | 系统登陆日志 |
/var/log/cron | 定时任务日志 |
/var/log/maillog | 邮件日志 |
/var/log/boot.log | 系统启动日志 |
1.rsyslog服务
rsyslog
是一个开源工具 , 被广泛用于 Linux 系统以通过 TCP/UDP 协议转发或接收日志消息
rsyslog
服务的主配置文件为 /etc/rsyslog.conf
,指定日志保存位置修改配置文件 , 修改后重启 rsyslog
服务生效
注意:此服务用来采集系统日至,本身不产生日至,只起到采集作用
2.指定日志采集路径
vim /etc/rsyslog.conf ##在RULES下添加:
什么类型的日志.什么级别的日志 /var/log/file ##日志采集规则,将日志保存到/var/log/file
修改后重启 rsyslog
服务生效
其中,日志类型有:
日志类型 | 含义 |
---|---|
auth | pam产生的日志 |
authpriv | ssh,ftp等登陆信息的验证信息 |
cron | 时间任务相关 |
kern | 内核 |
lpr | 打印 |
邮件 | |
mark(syslog)-rsyslog | 服务内部的信息,时间标识 |
news | 新闻组 |
user | 用户程序产生的相关信息 |
uucp | unix to unix copy,unix主机之间相关的通讯 |
local 1~7 | 自定义的日志设备 |
日志的级别有:
日志级别 | 含义 |
---|---|
debug | 调试信息的日志,日志信息最多 |
info | 一般信息的日志,最常用 |
notice | 最具有重要性的普通条件的信息 |
warning | 警告级别 |
error | 错误级别,阻止某个功能或者模块不能正常工作的信息 |
crit | 严重级别,阻止整个系统或者整个软件不能正常工作的信息 |
alert | 需要立刻修改的信息 |
emerg | 内核崩溃等严重信息 |
none | 不记录任何信息 |
注意: 从上到下级别越来越高,记录的信息越来越少
更详细的信息可查看手册:man 3 syslog
实验:
修改配置文件/etc/rsyslog.conf
,加入收集规则:
auth.info /var/log/westos
之后重启服务:
在没有认证之前没有westos文件,认证后该文件建立且包含认证信息:
3.日志的远程同步
发送端:在/etc/rsyslog.conf
文件中添加规则(这里使用udp协议,若使用tcp协议则用@@接受端ip )
*.* @接受端ip
接受端:在/etc/rsyslog.conf
文件15、16行中打开插件和udp514接口,之后关闭火墙
将
改为:
更改完配置文件重启rsyslog
服务
使用命令 systemctl stop firewalld.service
关闭火墙(也可以使用firewall-cmd --add-port 514/udp
命令调整防火墙规则)
测试:
清空日志文件后,在发送端输入 logger 1111111111111
查看接受端日志文件/var/log/messages
发现有从发送端主机client发送的日志:
4.日志采集格式设定
在接受端修改配置文件/etc/rsyslog.conf
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
下填入:
$template NEWFORM,"%FROMHOST-IP% %timegenerated% %syslogtag% %msg%\n"
其中内容的含义为:
内容 | 含义 |
---|---|
%FROMHOST-IP% | 显示主机ip |
%timegenerated% | 显示日志时间 |
%syslogtag% | 日志记录目标 |
%msg% | 日志内容 |
\n | 换行 |
在要更改日志类型的规则后写入新规则的名字:
之后查看日志发现格式以更改:
若要将全部日志的格式全部修改,则更改配置文件为:
#### GLOBAL DIRECTIVES ####
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$ActionFileDefaultTemplate NEWFORM
1.timedatectl命令
使用timedatectl命令
可以查看系统当前时间:
[kiosk@foundation63 ~]$ timedatectl
Local time: Fri 2019-10-25 02:34:47 CST #本地时间
Universal time: Thu 2019-10-24 18:34:47 UTC #世界时间
RTC time: Thu 2019-10-24 18:34:48 #硬件时间
Time zone: Asia/Shanghai (CST, +0800) #时区
NTP enabled: yes #是否开启网络时间的同步
NTP synchronized: no #时间是否和网络时间同步过
RTC in local TZ: no
DST active: n/a #夏令制时间
2.更改时区
timedatectl list-timezones #列出所有时区
timedatectl set-timezone Asia/Shanghai #更改时区为上海
timedatectl set-ntp ture #打开网络同步 false为关闭
注意:该命令需在使用utc时间的基础上使用
4.修改时间
timedatectl set-time "2019-10-24 18:55:00" #修改时间为2019-10-24 18:55:00
timedatectl set-local-rtc 0 #不使用utc时间,1表示使用
1.chronyd服务
使用chronyd服务可以实现时间同步
2.在服务端
vim /etc/chrony.conf #打开配置文件
22 allow 172.25.254.116/24 #允许哪些客户端来同步本机时间
将29行:
改为:
systemctl restart chronyd.service #重启服务
3.在客户端
vim /etc/chrony.conf #打开配置文件
将
改为:
其中 server 172.25.254.216 iburst
表示本机立即同步216主机的时间,之后:
systemctl restart chronyd.service #重启服务
4.测试
在客户端输入:
chronyc sources -v
journalctl
命令用来查询 systemd-journald
服务收集到的日志。systemd-journald
服务是 systemd init
系统提供的收集系统日志的服务。默认不会将内存中的日志采集到硬盘中。
用法:
journalctl #查看日志
journalctl -n 3 #查看最近的三条日志
journalctl --since 17:50 #查看从17:50到现在的日志
journalctl --since 17:50 --until 17:52 #查看从17:50到17:52的日志
journalctl -o verbose #查看日志详细信息
journalctl _PID=82 _COMM=systemd-journal #指定日志信息查看日志
journalctl -p err #查看错误日志
默认systemd-journald
不保存日志到硬盘,关机后再次开机只能看到开机后的日志,上次关机之前的日志无法查看
通过以下命令即可实现系统日志的保存:
mkdir /var/log/journal #建立目录
chgrp systemd-journal /var/log/journal #更改目录组
chmod g+s /var/log/journal/ #增加目录及其包含文件的权限
killall -1 systemd-journald #在服务不关闭的情况下刷新服务
ls /var/log/journal #发现有一个机器码