日志多了会很烦,少了你观察不到会更烦,出了事不知道哪里会抑郁死
目录
rsyslog 系统日志服务
rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式
- 适用于企业级中继链
rsyslog 相关文件
- 程序包:rsyslog
- 主程序:/usr/sbin/rsyslogd
- CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
- CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
- 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
- 库文件: /lib64/rsyslog/*.so
1.2.3 rsyslog配置文件
- /etc/rsyslog.conf 配置文件格式:由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
priority格式:
- *: 所有级别
- none:没有级别,即不记录
- PRIORITY:指定级别(含)以上的所有级别
- =PRIORITY:仅记录指定级别的日志信息
vim/etc/rsyslog.cong - 异步存放,先放缓冲区,在存文件 可以减少io(中国式过马路)
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages 立即写磁盘
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog -异步存放,先放缓冲区,在存文件
ubuntu改日志 级别
[root@ubuntu2004 rsyslog.d]#vim /etc/rsyslog.d/50-default.conf
systemctl restart rsyslog.service 重启
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog 再次改,*。info级才提醒
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log
改ssh的日志归在那个类里应用级别是什么(通用为什么区别)
1 vim /etc/ssh/sshd_config
# Logging
#SyslogFacility AUTH
#LogLevel INFO
SyslogFacility LOCAL6 在这里加上一行 ,等级可以自行制定
# Authentication:
2 vim /etc/rsyslog.d/50-default.conf 在这里加路径
#daemon,mail.*;\
# news.=crit;news.=err;news.=notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn /dev/tty8
local6.* /var/log/sshd.log 加上指定路径
3 [root@ubuntu2004 ~]#systemctl restart sshd rsyslog.service 因为改其文件所以需要重启文件
指定服务器存日志文件
1 开启注释掉的协议 vim /etc/rsyslog.conf
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
[root@ubuntu2004 ~]#systemctl restart rsyslog.service 重启加载服务
[root@ubuntu2004 ~]#ss -unl 查看UDP协议要写U
3 在客户端指定将日志发送到远程的TCP、UDP的日志服务器 双开也行
[root@centos7 ~]#vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @@10.0.0.18:514 #TCP
*.info;mail.none;authpriv.none;cron.none @10.0.0.18:514 #UDP[root@rocky8 ~]#systemctl restart rsyslog.service 重启
[root@rocky8 ~]#logger "This is a test lig" 测试命令权限等级大可能看不见注意
lastb 查看ssh失败登录的记录
last -x 查看关机记录
cat /var/log/boot.log 操作系统启动信息
dmesg 操作系统启动插入的硬件信息
常见日志文件
- /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 系统服务启动的相关信息,文本格式
- /var/log/messages :系统中大部分的信息
- /var/log/anaconda : anaconda的日志
#显示系统关机项和运行级别更改
last -x, --system
日志管理工具 journalct
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用
journalctl一个命令,查看所有日志(内核日志和应用日志)。
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago#查看某个 Unit 的日志
journalctl -u nginx.service以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
利用rsyslog日志服务,将收集的日志记录于MySQL中
[root@ubuntu2004 ~]#apt -y install rsyslog-mysql
[root@ubuntu2004 ~]#ls /usr/lib/x86_64-linux-gnu/rsyslog/ im为进,om为出
[root@ubuntu2004 ~]#vim /etc/rsyslog.d/mysql.conf 看看是否自己配好,里面有下面就不用
server="10.0.0.18" 相关数据需要自己改下 重启
vim /etc/rsyslog.conf
####MODULES####
#在 MODULES 语言下面,如果是 CentOS 8 加下面行
module(load="ommysql")
#在 MODULES 语言下面,如果是 CentOS 7,6 加下面行
$ModLoad ommysql[root@ubuntu2004 ~]#vim /etc/rsyslog.d/50-default.conf
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
*.*;auth,authpriv.none :ommysql:10.0.0.18,Syslog,rsyslog,123456 指定密码[root@ubuntu2004 ~]#systemctl restart rsyslog.service 生效
准备 MySQL
root@centos8 ~]#yum install mysql-server
#在MySQL数据库服务器上创建相关数据库和表,并授权rsyslog能连接至当前服务器
[root@centos8 ~]#mysql -u
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@rocky8 log]#systemctl enable --now mysqld; mysql -e "create database Syslog"
[root@rocky8 ~]#mysql Syslog
mysql> CREATE USER 'rsyslog'@'10.0.0.%' IDENTIFIED BY '123456';
mysql> GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' ;
网上也与有别的·软件可以
[root@ubuntu2004 ~]#find /var/log -mtime +30 -ok rm -rf {} /; 删除30天的,删一下问一下
设置nginx的日志转储
cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 100
missingok
compress
delaycompress
notifempty
create 644 ngnix nginx
postrotate
if [ -f /app/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /app/nginx/logs/nginx.pid`
fi
endscript
}