总结日志分类, 优先级别。图文并茂解释应用如何将日志发到rsyslog,并写到目标。
常见的分类包括:
内置分类:如auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security(auth), user(default), uucp, syslog等。
自定义分类:local0-local7,可以根据具体需求进行自定义设置。
优先级别从低到高排序为:debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)。这些级别帮助管理员快速识别日志的重要性。
将日志发到rsyslog并写到目标
- 启用网络日志服务:
- 确保rsyslog服务已安装并运行。
- 打开对外接收日志的端口,通常为UDP监听端口514。
- 配置应用以发送日志:
- 修改应用(如sshd)的配置文件(如/etc/ssh/sshd_config),设置SyslogFacility为所需的分类(如LOCAL6)。
- 重启应用服务以应用配置更改。
- 配置rsyslog以接收并处理日志:
- 编辑rsyslog的配置文件(如/etc/rsyslog.conf)。
- 添加规则以指定特定分类(如local6)的日志应写入的目标文件(如/var/log/ssh.log)。
- 示例配置行:
local6.* /var/log/ssh.log
- 示例配置行:
- 重启rsyslog服务以使配置生效。
- 测试配置:
- 使用logger工具发送一个测试日志条目,如
logger -p local6.info "hello sshd"
。 - 检查目标文件(如/var/log/ssh.log)以确认日志条目已正确写入。
- 使用logger工具发送一个测试日志条目,如
完成功能,sshd应用将日志写到rsyslog的local6分类,过滤所有级别,写入到/var/log/ssh.log。
#修改sshd服务的配置
vim /etc/ssh/sshd_config
syslogFacility local6
#重启sshd服务
systemctl reload sshd.service
#修改rsyslog的配置
vim /etc/rsyslog.conf
local6.* /var/log/sshd.log
#创建 sshd.log文件
touch /var/log/sshd.log
#重启rsyslog服务
systemctl restart rsyslog
#测试
ssh登录后,查看/var/log/sshd.log
#logger测试
logger -p local6.info "hello sshd"
tail /var/log/sshd.log
完成功能,将3个主机(要求主机名为ip)的ssh日志,通过rsyslog服务将ssh日志写入到集中的主机上的rsyslog服务,写入到/var/log/all-ssh.log文件
要实现这个功能,需要配置三个客户端主机将SSH日志发送到一台集中主机上。以下是详细的步骤:
1. 配置客户端主机
在客户端主机上,需要修改SSH服务的配置,使其使用rsyslog记录日志。编辑SSH的配置文件/etc/ssh/sshd_config
,找到#SyslogFacility AUTH
这一行,去掉注释并修改为:
SyslogFacility AUTHPRIV
重启SSH服务以应用更改:
sudo systemctl restart sshd
接下来,配置rsyslog将日志发送到集中主机。编辑客户端的rsyslog配置文件/etc/rsyslog.conf
,添加以下内容:
# 指定集中主机的IP地址和端口号
*.* @10.0.0.152:514
重启rsyslog服务:
sudo systemctl restart rsyslog
2. 配置集中主机
在集中主机上,配置rsyslog接收来自客户端的日志消息,将其写入到/var/log/all-ssh.log
文件中。
然后,编辑集中主机的rsyslog配置文件/etc/rsyslog.conf
,添加以下内容:
# 创建一个模板,用于格式化日志
$template SSHFormat,"%TIMESTAMP% %FROMHOST-IP% %syslogtag% %msg%\n"
# 指定使用上述模板的规则
:syslogtag, startswith, "sshd[" -?* |/var/log/all-ssh.log;SSHFormat
重启rsyslog服务:
sudo systemctl restart rsyslog
3. 测试配置
在客户端主机上,通过SSH登录或执行SSH操作,生成日志消息。检查集中主机上的/var/log/all-ssh.log
文件,查看是否正确记录日志消息。
总结/var/log/目录下常用日志文件作用。
在Linux系统中,/var/log/
目录是系统日志的集中存放地,包含了系统运行期间产生的各种日志文件。这些文件可以帮助识别和解决系统问题,监控系统的健康状况,以及审计系统的活动。以下是/var/log/
目录下一些常用日志文件及其作用:
- /var/log/messages
- 内容:这个文件包含了系统启动后的各种信息,包括内核消息、系统服务消息、应用程序日志等。
- 作用:用于监控系统的整体状态,是系统管理员经常查看的一个文件。
- /var/log/syslog
- 内容:在某些Linux发行版中用于记录与
/var/log/messages
相似的信息,但在其他发行版中可能不存在或具有不同的用途。通常记录系统级别的消息和事件。 - 作用:与
/var/log/messages
类似,但可能因发行版而异。
- 内容:在某些Linux发行版中用于记录与
- /var/log/auth.log
- 内容:记录与身份验证和授权相关的信息,如用户登录、注销以及sudo命令的执行等。
- 作用:对于安全审计和入侵检测来说,这个文件非常重要。
- /var/log/kern.log
- 内容:记录Linux内核的运行信息、错误信息等。
- 作用:帮助系统管理员了解内核的运行状态和问题。
- /var/log/cron.log
- 内容:记录与系统定时任务相关的日志。
- 作用:用于监控cron服务的运行情况和错误。
- /var/log/lastlog
- 内容:记录系统中所有用户最后一次的登录时间的日志(二进制文件)。
- 作用:用于审计和了解用户的登录历史。
- /var/log/wtmp
- 内容:永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件(二进制文件)。
- 作用:用于审计和了解用户的登录活动以及系统启动和关闭事件。
- /var/log/btmp
- 内容:记录错误的登录尝试(二进制文件)。
- 作用:用于安全审计和入侵检测,识别潜在的恶意登录尝试。
- /var/log/secure
- 内容:记录验证和授权方面的信息,如SSH登录、su切换用户等。
- 作用:与安全审计和入侵检测相关,确保系统安全性。
- /var/log/dmesg
- 内容:记录了系统在开机时内核自检的信息。
- 作用:帮助了解系统在启动过程中内核的状态和任何潜在问题。
总结journalctl命令的选项及示例
以下是journalctl
命令的一些常用选项及其示例:
选项 | 描述 | 示例 |
---|---|---|
-u 或 --unit=UNIT | 显示指定服务单元的日志 | journalctl -u sshd |
-p 或 --priority=PRIORITY | 根据日志的优先级来过滤日志 | journalctl -p err (显示错误级别的日志) |
-b 或 --boot=BOOT_ID | 显示指定启动ID的日志 | journalctl -b (显示当前启动的日志) |
-k 或 --dmesg | 仅显示内核消息 | journalctl -k |
-f | 实时跟踪日志输出(类似于tail 命令) | journalctl -f |
--since=DATE 和 --until=DATE | 显示指定日期范围内的日志 | journalctl --since "2023-01-01" --until "2023-01-02" |
-n NUMBER | 显示最近的NUMBER条日志 | journalctl -n 10 (显示最近的10条日志) |
-o export | 以可移植的事件日志格式导出日志 | journalctl -o export |
-r 或 --reverse | 反向输出日志,最新的日志会显示在最上面 | journalctl -r |
--grep=PATTERN | 只显示包含特定模式的日志行 | journalctl --grep "failed to" |
--disk-usage | 显示当前磁盘空间使用量(用于日志) | journalctl --disk-usage |
--vacuum-size=SIZE | 删除旧的日志,限制日志使用的磁盘空间 | journalctl --vacuum-size=1G (限制为1GB) |
--vacuum-time=TIME | 删除早于指定时间的日志 | journalctl --vacuum-time=2weeks (删除两周前的日志) |
--no-pager | 不使用分页器直接输出日志 | journalctl --no-pager |
尝试使用logrotate服务切割nginx日志,每天切割一次,要求大于不超过3M, 保存90天的日志, 旧日志以时间为后缀,要求压缩。
首先,创建一个新的logrotate
配置文件:
sudo nano /etc/logrotate.d/nginx
然后,添加以下内容到该文件中:
/var/log/nginx/nginx.log {
daily
size=3M
rotate 90
dateext
compress
missingok
notifempty
create 640 nginx adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
测试转储
#手动转储
logrotate /etc/logrotate.d/nginx
#查看结果
ll /var/log/nginx/
总结 LVS的NAT和DR模型工作原理,并完成DR模型实战。
LVS的NAT模型工作原理
- 客户端请求:客户端发送请求,目标地址是LVS(Linux Virtual Server)的公共IP地址(VIP)。
- LVS接收与转发:LVS监听特定端口,接收客户端请求,并根据预设的负载均衡算法选择一个后端真实服务器(Real Server)来处理该请求。然后,LVS会修改请求报文的源IP地址和端口号为自身的VIP和相应端口号,再将请求转发给选定的真实服务器。
- 真实服务器处理:真实服务器接收到请求后进行处理,并将响应发送回LVS。
- LVS响应转发:LVS接收到真实服务器的响应后,会修改响应报文的目标IP地址和端口号为客户端的IP地址和端口号,然后将响应转发给客户端。
NAT模式的关键在于LVS作为中间代理,对客户端和真实服务器之间的通信进行了地址转换,使得客户端无需知道真实服务器的具体地址。
LVS的DR模型工作原理
- 客户端请求:客户端向LVS发送请求,目标是LVS的VIP。
- LVS接收与转发:LVS接收到请求后,根据负载均衡算法选择一个后端真实服务器。然后,LVS仅修改请求数据包的目的MAC地址为选定真实服务器的MAC地址,并将数据包发送到同一子网内。
- 真实服务器处理:真实服务器直接接收到请求(因为数据包的目的MAC地址已被修改为真实服务器的MAC地址),进行处理后,直接向客户端发送响应。响应数据包的源IP地址是真实服务器的IP地址。
DR模式的特点在于负载均衡器仅修改数据包的MAC地址,而不进行IP地址的转换,因此效率更高。真实服务器直接响应客户端,减少了网络延迟和处理开销。