Linux日志管理

Linux日志管理

日志文件的重要性

  • 及时发现系统中发生的错误
  • 便于解决网络服务的问题
  • 系统事件的记录

常见的日志文件

常见的日志文件:

ls -l /var/log/boot.log #内核检测与启动硬件的信息
ls -l /var/log/cron #crontab任务的相关日志信息
ls -l /var/log/dmesg #内核检测过程所产生的信息
ls -l /var/log/lastlog #最近一次登录系统时的相关信息
ls -l /var/log /maillog # /var/log/mail/* 邮件信息
ls -l /var/log/messages #系统发生的错误信息
ls -l /var/log/secure #用户登录时记录的信息
ls -l /var/log/wtmp #可记录用户与系统重新启动的时间与远程连接主机及用户登入时间
ls -l /var/log/faillog #登录系统失败的用户信息

日志文件所涉及的服务:

systemctl status systemd-journald.service # 日志管理服务,记录存储与内存中
systemctl status rsyslogd.service # 日志管理服务
logroate #日志文件的轮询功能;将旧的日志文件保留一段时间后删除;在cron服务下执行

日志文件格式:

  • 时间发生的时间与日期
  • 事件的执行者
  • 启动事件的服务名称或命令
  • 日志内容
    在这里插入图片描述

rsyslog.service

rsyslog.service 记录日志文件的服务
rsyslogd 主要还是透过 Linux 核心提供的 syslog 相关规范来设定数据的分类

ps aux | grep rsyslog #查看是否启动该服务
systemctl status rsyslog #查看该服务的状态信息
netstat -tnlp | grep rsyslog 

在这里插入图片描述
在这里插入图片描述

配置文件设置语法

rsyslog.conf日志配置文件语法:
​ 服务名称[.=!]信息等级 日志信息记录的文件名

  • 服务名称:man 3 syslog 查看相关信息
  • .点表示大于等于该信息等级的信息
  • .=表示等于该信息等级的信息
  • !表示不包含该信息等级的信息
    ​ 信息等级:等级数值越高代表越安全,等级靠近 0 则代表越危险
  • 7 debug排除错误的信息
  • 6 info基本信息说明
  • 5 notice正常的信息
  • 4 warning告警信息不影响服务运行
  • 3 err重大的错误信息
  • 2 crit更严重的错误信息
  • 1 alert严重警告信息
  • 0 emerg紧急信息
    ​例如:mail.info /var/log/maillog_info,mail产生的大于等于info等级的信息都存放在该文件中
    ​信息记录的文件名中若是以-开头的文件名,则表示先将日志信息保存在内存中,等到数据量足够大时才将日志信息保存到硬盘中,可能造成意外断电导致日志丢失
    rsyslog配置文件内容:
    在这里插入图片描述

rsyslog日志的安全性

# 日志文件的安全性设置
chattr +a /var/log/xxx.log #设置隐藏权限,该文件只能写入数据,无法被更改或删除
chattr -a /var/log/xxx.log #取消权限设置

rsyslog远程服务配置

rsyslog.conf服务端配置项:tcp/udp端口514
在这里插入图片描述
rsyslog.conf客户端配置项:

  • TCP:*.*@@remote-host
  • UDP:*.*@remore-host
    在这里插入图片描述

logrotate 日志轮询记录

rsyslogd 利用的是 daemon 的方式来启动的
logrotate 在 cron 底下按天执行进行,该服务程序的位置是/etc/cron.daily/
在这里插入图片描述
logrotate 的主要功能就是将旧的日志文件重命名成旧文件, 并且重新建立一个空的文件来记录日志信息
在这里插入图片描述

logrotate配置文件

# 配置文件信息
ls -l /etc/logrotate.conf #日志轮询logrotate的配置文件
ls -l /etc/logrotate.d/ #相关目录;该目录内的文件将会被读入/etc/logrotate.conf文件中
# 配置文件参数说明
[root@localhost ~]# more /etc/logrotate.conf | egrep -v '^#|^$'
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {					# 格式:日志文件的绝对/路径与文件名 ... {
    monthly						# monthly / weekly表示每月/周对日志文件进行一次轮询;
    create 0664 root utmp		# create表示日志文件被更名后,新建一个文件用于继续存储日志;
	minsize 1M					# minsize设置文件最小容量,超过该容量才会被轮询
    rotate 1					# rotate表示轮询次数;
    							# dateext表示轮询的文件名加上日期参数;
								# compress 是否压缩日志文件
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}
[root@localhost ~]# ls /etc/logrotate.d/

# 执行脚本参数设置
# 执行脚本:需与 sharedscripts .... endscript 设定结合

# 可用的环境为:
# prerotate:在启动 logrotate 之前进行的指令,例如修改登录文件的属性等动作
# postrotate:在做完 logrotate 之后启动的指令,例如重新启动 (kill -HUP) 某个服务
# Prerotate 与 postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序
vim /etc/logrotate.d/syslog 
/var/log/cron
/var/log/messages 
/var/log/secure 
{
    sharedscripts #调用外部命令进行额外的操作关键字
    prerotate #启动logrotate之前启动的命令
	/usr/bin/chattr -a /var/log/messages
    endscripts
    sharedscripts
    postrotate #启动logrotate之后启动的命令
	/bin/kill -HUP 'cat /var/run/syslogg.pid 2> /dev/null' 2> /dev/null || true 
	/usr/bin/chattr +a /var/log/messages 
    endscript   #调用外部命令进行额外的操作关键字
}

在这里插入图片描述

/etc/logrotate.d/syslog

只对 /var/log/ 内的 cron, maillog, messages, secure, spooler 有效
轮询执行完毕后, 获得syslog的pid后,重新启动syslog服务
在这里插入图片描述

配置包含隐藏属性a的日志轮询操作

#若是针对文件进行+a隐藏属性的操作,可以利用 prerotate 与 postrotate 来进行日志文件的轮替前、后所需的动作
vim /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/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
}

测试logrotate

# 测试logrotate
logrotate -v logfile #显示日志轮询的运行过程
logrotate -vf logfile #强制运行日志轮询功能并显示过程
logrotate -v /etc/logrotate.conf

在这里插入图片描述

systemd-journald.service

systemd-journald 是使用内存记录的方式记录日志信息,因此重新启动过后,开机前的日志文件信息不会被记录。
systemd-journald 用来管理与查询这次开机后的登录信息,而 rsyslogd 可以用来记录以前及现在的所以数据到磁盘文件中。
虽然 systemd-journald 所记录的数据其实是在内存中,但是系统还是利用文件的形式将它记录到 /run/log/
管理system-journald:

journalctl  #查看目前系统的所有journal日志数据
## 指定时间查看日志
journalctl --since "2020-08-29 00:00:00" --until "2020-08-30 00:00:00" #显示整天的日志数据
journalctl --since today #显示仅今天的日志数据
journalctl --since yesterday --until today #显示昨天的日志数据
## 指定服务名称查看日志
journalctl _SYSTEMD_UNIT=crond.service -n 10 #显示crond服务的10条最新的日志数据
journalctl _COMM=su _COMM=login -n 10 #显示su和login执行的登录文件的最新的10条日志数据
## 指定服务等级查看日志
journalctl -p err #查看信息严重登记为错误的日志数据
journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10 #找出跟登录服务 (auth, authpriv) 有关的登录文件讯息

## 类似tail -f的方式查看日志记录
journalctl -f #持续侦测系统的日志数据

## 往系统中写入日志
logger -p user.info "I will check logger command" #使用logger将登录信息传送到登录文件内

logwatch #直接执行登录文件的分析

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值