1 系统日志介绍
什么是日志:
通俗理解 可以说是“日记” ,linux系统当中就是记录系统中发生的事情,按时间先后顺序,分门别类的记载到不同文中称为记录日志,文件就是日志文件
日志的作用:
排错问题
网络方面问题
记录历吏事件
安全问题
功能:
日志功能:记录计算机在运行过程中的发生的各种事件,从而为安全防范、故障排查等工作,提供历史记录数据。
默认位置:/var/log 目录
日志的类别
1. 系统信息日志
由<rsyslog系统日志服务>统一进行管理,<日志格式>基本相似。
记录<系统>在运行过程中的发生的<方方面面的各种事件>,从而为故障排查提供蛛丝马迹的数据。
可cat查看
/var/log/messages ## 系统消息日志,记录所有<info级别>或<更高级别>的<系统信息>,内容最多,最常用。
/var/log/secure ## 验证和授权日志,例如,sshd会将所有信息记录(包括:失败登录)在这里,比如创建用户等待操作记录
/var/log/maillog ## 本机邮件系统日志,记录<Postfix mail本机邮件系统>的信息
/var/log/cron ## 计划任务日志,记录计划任务<crontab守护进程>及其<派生的子进程>的动作信息
/var/log/spooler ## uucp(UNIX至UNIX的拷贝)日志,在Internet兴起之前,这是Unix系统之间连网的主要方式。
## news.crit(新闻组.危机消息)日志
/var/log/boot.log ## boot引导日志,记录:系统<boot引导过程>的信息
2. 用户信息日志
记录系统用户登录及退出系统的相关信息。
由系统内置程序生成,不由<系统日志服务rsyslog>统一管理。
不可cat查看
/var/log/lastlog ## 记录最近成功登录的事件和最后一次不成功的登录事件
## 该日志由login登录生成
## lastlog日志文件是二进制文件
## 需要使用 lastlog命令 查看
/var/log/wtmp ## 记录/var/run/utmp的历史数据
## 包括终端、注销、系统事件和系统当前状态、系统启动时间(正常运行时间)等
## wtmp日志文件是二进制文件
## 需要使用 last命令 查看
## 常用于发现非法登录的行为
/var/log/btmp ## 记录所有<失败的登录信息>
## btmp日志文件是二进制文件
## 需要使用 lastb命令 查看
## 常用于发现暴力破解密码的行为
## 二进制文件只能使用特殊命令进行查看,不能使用 cat 和 vim 查看
3. 程序信息日志
由各种<应用程序>独立管理的<日志文件>,<记录格式>不统一。
/var/log/httpd/access_log ## <httpd程序>的<访问日志>
/var/log/httpd/error_log ## <httpd程序>的<错误日志>
/var/log/vsftpd.log ## <vsftpd程序>的<日志>
/var/log/firewalld ## <firewalld防火墙程序>的<日志>
/var/log/yum.log ## <yum程序>的<日志>
/var/log/chrony ## <chrony时间程序>的<日志>
/var/log/dmesg ## <系统内核 ring buffer 环型缓冲区>的<日志>,可以使用<dmesg命令>查看
/var/log/audit/audit.log ## <Linux审计程序>的<日志>
/var/log/anaconda/* ## <系统安装过程>的<日志>
/var/log/tuned/tuned.log ## <tuned系统调优程序>的<日志>
查看用户信息日志
通常情况下,我们可以直接使用<cat 命令>来查看<系统日志>和<程序日志>,但不能直接查看<用户日志>。
针对用户日志,需要使用 lastlog、last、lastb 命令
lastlog ## 读取/var/log/lastlog日志文件内容
## 列出用户最后登录的时间和登录终端的地址
## 如果此用户从来没有登录,则显示 Never logged in
last ## 读取/var/log/wtmp日志文件内容)
## 列出用户所有的登录时间和登录终端的地址。
lastb ## 读取/var/log/btmp日志文件内容)
## 查看<用户登陆失败>的日志记录
例子 查看恶意 IP 试图登录次数:
lastb | awk '{print $3}' | sort | uniq -c | sort -n
## $3是ip,看相同ip登录失败的次数 -n是按字符串排序
查看系统信息日志
功能概述:
功能:记录<系统和程序>在运行过程中的发生的<方方面面的各种事件>,从而为<安全防范、故障排除>等工作,提供蛛丝马迹的数据。
服务:syslog/rsyslog系统日志服务
位置:/var/log 目录
应用范围:
在<Unix类>的<操作系统>上,<syslog/rsyslog日志服务>广泛应用于<系统日志>。
**rsyslog只能看本机 一般看多机器日志使用 elk **
网络管理工具、安全管理系统、日志审计系统
系统信息日志 的管理模式
本地管理模式:记录保存在<本地文件>
集中管理模式:接收<多个syslog日志客户端的syslog日志消息>,进行<统一的存储>
系统信息日志 的日志规范
系统信息日志的内容:产生日志的程序模块(Facility)、严重性(Severity或Level)、时间、主机名或IP、进程名、进程ID、正文。
系统信息日志的含义:x时间(Timestamp),在x地方(Hostname),是x谁(Facility设施),发生了x严重性(Severit)的 x事情(Message)
例如
cat /var/log/messages ## 查看格式
日志记录规范(BSD syslog 日志协议规范:http://www.ietf.org/rfc/rfc3164.txt)
<BSD syslog 日志协议规范>不是强制性的,很多都是<建议/约定>,因此,很多设备并不遵守或不完全遵守这个规范。
<BSD syslog 日志协议规范>的<建议/约定>
<syslog日志消息>的<UDP报文>不能超过<1024字节>,并且全部由<可打印的字符>组成。
<完整的syslog日志消息>可以由3部分 ,分别是: PRI + HEADER+ MSG
PRI部分 是一个:用 [<>尖括号] 包括的 [数字]
该 [数字] 用于表示:<Facility程序模块>和<Severity严重性>。
例如:<165>Aug 24 05:34:00 1987 my_machine my_proc[10]: %% It's ...
HEADER部分 包括两个[字段]:<时间>和<主机名或IP>。
例如:<165>Aug 24 05:34:00 1987 my_machine my_proc[10]: %% It's ...
MSG部分 分为两个[部分]:<TAG标签>和<Content内容部分>
<TAG部分>是可选的,它包含了<进程名称>和<进程PID>,<进程PID>放在"[] 方括号"中,也可以没有。
例如:<165>Aug 24 05:34:00 1987 my_machine my_proc[10]: %% It's ...
<TAG标签>后面用一个 [ : 冒号] 隔开<Content内容部分>,<Content内容部分>是应用程序自定义的。
例如:<165>Aug 24 05:34:00 1987 my_machine my_proc[10]: %% It's ...
日志级别
`debug` ## 最详细的日志级别,用于调试和排查问题,通常不建议在生产环境中使用。
`info` ## 默认的日志级别,提供一般性的信息,如服务器启动、停止等事件。
`notice` ## 更重要的信息级别,用于报告重要的系统事件,如配置文件加载、重启等。
`warn` ## 警告级别,用于报告一般性的警告信息,如请求超时、磁盘空间不足等。
`error` ## 错误级别,用于报告错误事件,如请求错误、连接超时等。
`crit` ## 临界级别,用于报告临界错误,可能导致系统崩溃或不可用的问题。
`alert` ## 警报级别,用于报告需要立即采取行动的问题,如内存耗尽、磁盘故障等。
`emerg` ## 紧急级别,用于报告系统不可用的严重错误,通常会导致系统崩溃。
Syslog 消息级别总结
级别编号 | 名称 | 描述 |
---|---|---|
0 | Emergency | 系统不可用,紧急情况 |
1 | Alert | 需要立即处理的紧急事件 |
2 | Critical | 严重错误,系统关键功能受影响 |
3 | Error | 错误情况,影响功能但不至于崩溃 |
4 | Warning | 警告,系统运行中潜在问题 |
5 | Notice | 正常操作中的通知消息 |
6 | Informational | 信息日志,记录常规操作 |
7 | Debug | 调试日志,详细记录系统状态或问题排查信息 |
不同的 Syslog 实现可能会在具体的消息记录和格式上有所不同,但这个级别的定义是广
一般不会使用 debug 而是 info 或者 info 往上的级别
2 管理 rsyslog 日志服务
2.1 简介
rsyslog是一个高性能、高安全性和模块化设计的<日志服务>,用来代替syslog,并兼容syslog。
rsyslog的<接收端口>默认为: 514/UDP,<服务进程名>为: rsyslogd
rsyslog可以接收<来自各种来源>的<输入信息>,然后转换它们,并将结果<输出>到<不同的目的地>。
rsyslog可以每秒向<本地目标>传送超过一-百万条的消息。
收发<日志消息>的<设备名称 与 通信端口>
rsyslog 的语法格式
语法理解我们要结合配置文件才行,我们先简单了解一下语法
服务名称,有很多
了解facility设施
facility设施:它可以是<操作系统内核进程>、<各种服务进程(如:mail、httpd)>、<其它设备(如:路由器)>等等
常用的<facility设施>有以下几种:用<整数>来表示不同的Facility设施
Syslog 设施
设施用于分类日志消息,以下是一些常见的设施:
整数 别名 备注说明
0 kern 内核相关的<内核消息>
1 user 用户相关的<用户级别消息>
2 mail 邮件相关的<邮箱系统消息>
3 daemon 守护进程相关的<系统守护进程消息>
4 security|auth 被大多数系统用于<安全|授权>相关的<消息>,security是<auth代名词>,但被弃用
5 syslog 由Syslogd自身产生的消息
6 lpr 打印相关的<打印子系统消息>
7 news 新闻组日志
8 uucp uucp(UNIX至UNIX的拷贝)日志,在Internet兴起之前,这是Unix系统之间连网的主要方式。
9 cron 被大多数系统用于<cron/at计划任务的消息>
10 security|auth 被大多数系统用于<安全|授权>相关的<消息>,security是auth代名词,但被弃用
11 ftp FTP守护进程的<消息>
12 ntp NTP子系统的<消息>
13 security|auth 被大多数系统用于<安全|授权>相关的<消息>,security是<auth代名词>,但被弃用
14 security|auth 被大多数系统用于<安全|授权>相关的<消息>,security是<auth代名词>,但被弃用
15 cron 被大多数系统用于<cron/at计划任务的消息>
## alert 被大多数系统用于<报警>相关的<消息>
## authpriv 被大多数系统用于<敏感的安全信息>的<消息>
## 16-23保留给本地使用,厂商可自定义
16 local0 保留给本地使用,厂商可自定义
17 local1 保留给本地使用,厂商可自定义
18 local2 保留给本地使用,厂商可自定义
19 local3 保留给本地使用,厂商可自定义
20 local4 保留给本地使用,厂商可自定义 例如:Cisco就用local4发送PIX防火墙的syslog
21 local5 保留给本地使用,厂商可自定义
22 local6 保留给本地使用,厂商可自定义
23 local7 保留给本地使用,厂商可自定义 例如:CentOS用local7发送<启动消息>,Cisco就用local7发送3000VPN集中器的syslog
常用以下的服务名称
authpriv(auth) ## 用户授权相关的,认证等 ssh、login、su等
cron ## 和计划任务相关的服务
mail ## 邮件相关的
news ## 新闻相关的 uucp
kern ## 内核相关的
lpr ## 打印机相关的
syslog ## 和rsyslogd进程相关的
local0~local7 ## 自定义服务名称
了解 priority优先级
常用的<priority优先级>有以下几种:用<整数>来表示<不同的Severity严重等级>
整数 别名 备注说明
0 emerg (紧急):系统无法使用。
1 alert (警报):应立即采取行动。
2 crit (关键):临界状态,需要马上解决。
3 err (错误):错误条件。
4 warning (警告):警告条件。
5 notice (通知):正常但重要的条件。
6 info (信息):一般信息。
7 debug (调试):调试信息。
priority优先级注意:
* ## 表示:所有<priority优先级> 即什么都记录
none ## 表示:未指定<priority优先级>(即:什么都不记录)
举例:
local7.* ## 表示:local7设施的所有优先级
*.* ## 表示:所有的设施的所有的优先级
mail.none;authpriv.none;cron.none ## 表示:不接收<mail、authpriv、cron设施>的<消息>
2.2 管理 rsyslog 日志服务
*主配置文件 /etc/rsylog.conf 辅助配置文件 /etc/rsylog.d/ .conf
1 安装 默认已安装
yum install rsyslog -y
systemctl enable rsyslog
systemctl start rsyslog
systemctl status rsyslog
2 了解主配置文件 /etc/rsylog.conf
后面写入 是 服务名称 + priority优先级 + 辅助配置文件(自定义)
[root@server logs]# cat /etc/rsyslog.conf | egrep -v "^\s*(#|$)"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
解析如下
$ModLoad imuxsock ## 加载imuxsocl模块,支持:通过<UNIX套接字>接收<本机应用程序>发来的<日志消息>
$ModLoad imjournal ## 加载imjournal模块,支持:将<systemd的journal日志内容>导入到<syslog日志>
$WorkDirectory /var/lib/rsyslog ## 设置rsyslog的工作目录
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat ## 设置默认的时间戳格式
$IncludeConfig /etc/rsyslog.d/*.conf ## 导入/etc/rsyslog.d/目录中的配置文件
$OmitLocalLogging on ## 开启/dev/log 日志套接字设备文件,接收本地日志消息
$IMJournalStateFile imjournal.state ## 设置日志状态文件名,默认位置在/var/lib/rsyslog/目录
*.info;mail.none;authpriv.none;cron.none /var/log/messages ## 在 /var/log/messages 日志文件中,保存众多日志消息
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
## 最后一行为接收locak7设施发来的所有等级的日志消息,并保存在 /var/log/boot.log 日志文件中
## .* 不是正则表达式 , 而是 .全部的意思 * 就是什么都写入,none 是 什么都不写入
## *.info;mail.none;authpriv.none;cron.none 意思是除了这几个服务,别的日志都写入 /var/log/messages 该文件
2.3 配置rsyslog日志服务的服务端,网络远程接收日志消息
需要一台服务端和一台客户端作测试,创建辅助配置文件测试
注意:服务端和客户端都要安装并启动 rsyslog 服务
服务端:
vim /etc/rsyslog.d/dj.conf
####################################
## 加载:指定的<MODULES模块>
## imxxxxxx 表示:input输入模块
## omxxxxxx 表示:output输出模块
####################################
## 加载 imudp 模块,用于支持:通过<UDP协议>接收<日志消息>
$ModLoad imudp
## 设置<UDP端口>为:514/udp
$UDPServerRun 514
## 加载imtcp模块,用于支持:通过<TCP协议>接收<日志消息>
$ModLoad imtcp
## 设置<TCP端口>为:514/tcp
$InputTCPServerRun 514
systemctl restart rsyslog
firewall-cmd --permanent --add-port=514/tcp --add-port=514/udp
firewall-cmd --reload
netstat -tunlp | grep rsyslogd
客户端:
vim /etc/rsyslog.d/cl.conf
##############################################################################
## 设置:<rsyslog queue 队列>中的<动作队列>相关参数
## <rsyslog queue 队列>分为:<消息队列> 和 <动作队列>
## ┌──进──> 消息队列 ──出/进──> 动作队列 ──出──┐
## 产生消息 发送消息
##############################################################################
## 定义:动作队列的内存队列类型,<LinkedList类型>采用<动态内存分配机制>,推荐使用
$ActionQueueType LinkedList
## 定义:<动作队列>的<磁盘辅助队列文件>的<前缀名>,仅当<内存队列>被填满,或者,主机关闭的时候,才会被激活使用
## 磁盘辅助队列文件的位置:/var/lib/rsyslog/ 目录
$ActionQueueFileName action_queue_file
## 定义:<动作队列>的<磁盘辅助队列文件>占用的<最大磁盘空间>,否则就尽可能使用<所有可用的磁盘空间>
$ActionQueueMaxDiskSpace 1g
## 定义:在<关机>时,针对<动作队列>的<内存队列内容>,执行<落盘保存>
$ActionQueueSaveOnShutdown on
## 定义:遇到<动作队列>中断时,将执行<无限次重试>
$ActionResumeRetryCount -1
## 设置:采用TCP方式,将<所有设施.所有级别>的<日志消息>,都发送给<指定的rsyslog服务端> tcp 要两个 @@
*.* @@192.168.58.100:514
## 或设置:采用UDP方式,将<所有设施.所有级别>的<日志消息>,都发送给<指定的rsyslog服务端> udp 要一个 @
## *.* @192.168.58.100:514
systemctl restart rsyslog
firewall-cmd --permanent --add-port=514/tcp --add-port=514/udp
firewall-cmd --reload
测试
可在 客户端创建一个用户
useradd ll
到服务端查看 /var/log/secure 是否有日志
cat /var/log/secure
Aug 15 05:13:37 192 useradd[8428]: new group: name=ll, GID=1004
Aug 15 05:13:37 192 useradd[8428]: new user: name=ll, UID=1004, GID=1004, home=/home/ll, shell=/bin/bash
最后两行如图所示
若想更清晰看到 , 可以在主配置文件定义一个文件,将所有日志内容都放到里面
vim /etc/rsyslog.conf
在最后一行加上
*.* /test/test1
保存退出刷新即可,然后继续在客户端进行操作 ## 什么日志内容都写入 /test/test1
到服务端
cat /test/test1 查看日志
3 管理 logrotate 日志切割
日志的轮替、日志的轮转
为什么要轮转?
1)防止日志文件过大
2)定期清除日志
达到固定大小 或者 天数 就切割成几个文件,定时清空,因为日志内容都都放在同一个文件内容太多会变卡
日志轮转的配置文件
# vim /etc/logrotate.conf
# grep -v ^# /etc/logrotate.conf | grep -v ^$
weekly ## 轮转的周期,一周一轮转
rotate 4 ## 保留几个旧的日志文件,类似于备份
create ## 旧日志轮转后是否创建新的空白日志
dateext ## 使用日期作为旧日志的后缀
include /etc/logrotate.d ## 包含该路径下的所有配置文件
/var/log/wtmp { ## 针对特定的日志进行定制设置
monthly ## 轮滚周期,一个月 daily 是一天,即一天切割一次
create 0664 root utmp ## 创建新的日志文件 权限664所有者root所属组utmp
minsize 1M ## 轮滚的最小大小是1M
## 大于1M或者超过一个月就轮转(切割)
rotate 1 ## 保留一个备份,原文件变新,轮转之前的日志内容到备份里面
}
/var/log/btmp {
missingok ## 丢了也没关系
monthly
create 0600 root utmp
rotate 1
}
小实验:
1、修改配置文件,添加一行自己定义的内容,重启服务
# vim /etc/rsyslog.conf
authpriv.* /var/log/anquan
# systemctl rsyslog restart
2、自己编写轮转配置文件
# vim /etc/logrotate.d/anquan ## authpriv(auth):用户授权相关的,认证等 ssh、login、su等
/var/log/anquan {
missingok
daily
create 0600 root root
rotate 4 ## 4个备份
}
3、手动轮转日志文件
# logrotate -vf /etc/logrotate.d/anquan
# cd /var/log
# ls anquan*
anquan anquan.1
相关的参数 功能
compress 通过gzip压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和~
size size 当日志文件到达指定的大小时才转储,Size 可以指定bytes (缺省)以及KB (sizek)或者MB