一、总结日志分类, 优先级别。图文并茂解释应用如何将日志发到rsyslog,并写到目标。
facility:设施,从功能或程序上对日志进行归类:
auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user(default), uucp, syslog
local0-local7
Priority 优先级别,从低到高排序:
debug,info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
应用如何将日志发到rsyslog,并写到目标:
启用网络日志服务,打开对外接收日志的端口,udp监听端口514,把应用上发生的所有info级别及以上的设施都发送到日志服务器上,514收到后就会写到/var/log/syslog文件中
二、完成功能,sshd应用将日志写到rsyslog的local6分类,过滤所有级别,写入到/var/log/ssh.log。
修改sshd服务的配置
[20:06:03 root@rocky88 ~]vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
[20:07:01 root@rocky88 ~]systemctl restart sshd
修改rsyslog的配置
[20:10:02 root@rocky88 ~]vim /etc/rsyslog.conf
local6.* /var/log/ssh.log
[20:12:31 root@rocky88 ~]systemctl restart rsyslog
logger测试
[20:15:12 root@rocky88 ~]logger -p local6.info "hello sshd"
[20:16:49 root@rocky88 ~]tail /var/log/ssh.log
Dec 16 20:14:02 rocky88 sshd[25937]: Accepted password for root from 192.168.31.175 port 51350 ssh2
Dec 16 20:15:23 rocky88 root[26004]: hello sshd
三、完成功能,将3个主机(要求主机名为ip)的ssh日志,通过rsyslog服务将ssh日志写入到集中的主机上的rsyslog服务,写入到/var/log/all-ssh.log文件
日志服务器上打开对外接收日志的端口
[root@192.168.31.179 ~]vim /etc/rsyslog.conf
module(load="imudp")
input(type="imudp" port="514")
重启服务
[root@192.168.31.179 ~]systemctl restart rsyslog.service
可以看到udp监听端口514
[root@192.168.31.179 ~]ss -nul
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
UNCONN 0 0 192.168.31.179%ens33:68 0.0.0.0:*
UNCONN 0 0 0.0.0.0:514 0.0.0.0:*
UNCONN 0 0 [::]:514 [::]:*
UNCONN 0 0 [fe80::20c:29ff:fe93:2339]%ens33:546 [::]:*
客户端1配置:
[root@192.168.31.163 ~]vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
[root@192.168.31.163 ~]systemctl restart sshd
[root@192.168.31.163 ~]vim /etc/rsyslog.conf
local6.info;mail.none;authpriv.none;cron.none /var/log/all-ssh.log
local6.info @192.168.31.179:514
[root@192.168.31.163 ~]systemctl restart rsyslog.service
客户端2配置:
[root@192.168.31.55 ~]vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
[root@192.168.31.55 ~]systemctl restart sshd
[root@192.168.31.55 ~]vim /etc/rsyslog.conf
local6.info;mail.none;authpriv.none;cron.none /var/log/all-ssh.log
local6.info @192.168.31.179:514
[root@192.168.31.55 ~]systemctl restart rsyslog.service
可以在客户端上触发生成日志来测试一下
[root@192.168.31.55 ~]
此时,在日志服务器上就能看到两台客户端发送过来的日志了
[root@192.168.31.179 ~]tail -f /var/log/all-ssh.log
四、总结/var/log/目录下常用日志文件作用。
/var/log/secure,/var/log/auth.log:系统安全日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行 查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化 将不再记录,也可以通过专用命令
dmesg查看,可持续记录硬件变化的情况
/var/log/boot.log:系统服务启动的相关信息,文本格式,Ubuntu无此文件
/var/log/messages(红帽系统),/var/log/syslog (Ubuntu) :系统中大部分的信息
/var/log/anaconda:anaconda的日志,Ubuntu无此文件
五、总结journalctl命令的选项及示例
日志管理工具 journalctl
journalctl命令格式:
journalctl [OPTIONS...] [MATCHES...]
选项说明:
如果字段内容超长则以省略号(...)截断以适应列宽。 默认显示完整的字段内容(超长的部分换行显示或者被分页工具截断)。
老旧的 -l/
-a,
完整显示所有字段内容, 即使其中包含不可打印字符或者字段内容超长
-f,
只显示最新的日志项,并且不断显示新生成的日志项。 此选项隐含了 -n 选项。
-e,
在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000,以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n 选项覆盖。 注意,此选项仅可用于 less(1) 分页器。
-n,
限制显示最新的日志行数。
此选项的参数:若为正整数则表示最大行数; 若为 "all" 则表示不限制行数;若不设参数则表示默认值10行。
显示所有日志行, 也就是用于撤销已有的
-r,
反转日志行的输出顺序, 也就是最先显示最新的日志。
六、完成将多个主机(要求主机名为ip)的nginx日志集中写入到mysql表中
安装MySQL和创建相应账号
[root@centos8 ~]
[root@centos8 ~]
mysql>source /data/mysql-createDB.sql
mysql>CREATE USER 'rsyslog'@'10.0.0.%' IDENTIFIED BY '123456';
mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' ;
配置日志服务器将日志发送至指定数据库
[root@centos8 ~]
module(load="ommysql")
$ModLoad ommysql
*.info :ommysql:10.0.0.18,Syslog,rsyslog,123456
[root@centos8 ~]
[root@ubuntu2004 ~]
module (load="ommysql")
*.* action(type="ommysql" server="10.0.0.18" db="Syslog" uid="rsyslog"
pwd="123456")
验证
[root@centos8 ~]
mysql>SELECT COUNT(*) FROM SystemEvents;
七、尝试使用logrotate服务切割nginx日志,每天切割一次,要求大于不超过3M, 保存90天的日志, 旧日志以时间为后缀,要求压缩。
[root@rocky8 ~]cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 90
missingok
compress
delaycompress
notifempty
create 644 ngnix nginx
size 1M
postrotate
echo `date +%F_%T` >> /data/test1.log
if [ -f /app/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /app/nginx/logs/nginx.pid`
fi
endscript
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步