rsyslog系统管理日志

常见的日志文件: 日志文件:二进制日志,文本日志,数据库日志 /var/log/下的文件: boot.log 系统引导日志,记录开机启动信息 开机的时候,可以按F2 dmesg 核心的启动日志 messages 系统的日志文件 maillog 邮件服务日志 secure 网络连接及系统登录的安全信息 cron 定时任务日志 btmp 记录失败的登入尝试 wtmp 记录所有的登录和登出 last -f /var/log/wtmp 查看二进制

日志管理程序rsyslog 将日志写入数据库,并可以利用模块和插件控制输出

rsyslog 管理本地和远程管理:

man syslog 日志级别: "<0>" /* system is unusable / ----emerg 系统不可用 "<1>" / action must be taken immediately / ----alert 特别留意的警告 "<2>" / critical conditions / -----crit 非常严重的状况 "<3>" / error conditions / ----err 错误信息 "<4>" / warning conditions / ----warning 警告信息 "<5>" / normal but significant condition / ----notice 稍微注意信息 "<6>" / informational / ----info 正常信息 "<7>" / debug-level messages */ ----debug 调试信息。开发人员 ----none 不记录日志 我们一般关注 4级别以上的

日志配置 日志定义相关符号: 配置文件中的: . 分隔服务和级别 * 任何服务的任何级别 = 等于某一级别,没有等于号表示大于或等于某一级别 ! 排除操作,两个级别去交集 ; 分隔不同的服务.级别组合 , 分隔不同的服务 - 指定目标文件,代表异步写入 注意:mail.info mail.=info

				cron.info;cron.!=err
				0123456    0124567 = 012456
	同步
	异步
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
上面的严格意义上都是载体,一些相关的服务配置会配置载体是谁
  载体服务的日志
  
可以man rsyslog.conf 查看载体名称

本地日志管理 需求1:将本地邮件服务日志记录到/var/log/test_mail.log 里 思路: 1软件安装 2查看配置文件,启动脚本 3修改文件 4启动服务 5测试验证 环境:[root加CentOS6油 ~]$ ------192.168.31.62 修改配置文件 [root加CentOS6油 ~]$cp /etc/rsyslog.conf /etc/rsyslog.conf.bak [root加CentOS6油 ~]$vim /etc/rsyslog.conf mail.info /var/log/test_mail.log

	启动服务
	service rsyslog restart 
	注意:重启后默认添加/var/log/test_mail.log 
	
	测试验证
		方法1:		发送邮件
		[root加CentOS6油 log]$echo "hhahaecho "hhaha" |mail -s "test_mail_log" root
		[root加CentOS6油 log]$cat /var/spool/mail/root
		方法2:		发一个log测试
			logger 用于系统中写入日志,提供了一个shell命令接口syslog系统模块
			
			logger -t "loggertest"  -p mail.info  "test_mail_log" 
				-t 指定标记记录
				-p	指定输入消息的优先级,优先级可以是数字或者 服务.级别 格式
		[root加CentOS6油 log]$logger -t "quanzhiqiang" -p mail.info "test_mail_log"
		[root加CentOS6油 log]$tail -1 test_mail.log 
			Apr 13 08:26:36 CentOS6 quanzhiqiang: test_mail_log

需求2 把ssh服务日志记录到/var/log/ssh下
	思路:	本来的ssh记录到系统安全里面,ssh的默认记录载体为authpriv
			1修改ssh配置文件的默认记录载体  /etc/ssh/sshd_config
			2修改日志配置文件,指定设备载体的日志到指定的文件(/etc/rsyslog.conf)
			3测试验证
	
	1[root加CentOS6油 log]$cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
	 [root加CentOS6油 log]$vim /etc/ssh/sshd_config
					#SyslogFacility AUTHPRIV
					 SyslogFacility LOCAL6		用local6 载体来记录sshd的服务日志
	 [root加CentOS6油 log]$service sshd restart

	2[root加CentOS6油 log]$vim /etc/rsyslog.conf
		# Save sshd 
		local6.*                                                /var/log/ssh
	root加CentOS6油 log]$service rsyslog restart
	
	3 ssh IP 
		
		注意: 如果不想记录到原来的/var/log/messages 
	*.info;mail.none;authpriv.none;cron.none;local6.none        /var/log/messages

远程管理日志; 目的:把多台服务器端的日志远程记录到其中一台日志服务器集中化管理,方便对其统一管理 环境; log_server: [root加CentOS6油 ] 192.168.31.62 应用服务器:root@CentOS6-1 ~] 192.168.31.140 ssh服务——其他人远程访问该服务器——产生的日志——远程记录到log_server上 client :[root加CentOS7油~] 192.168.31.41

需求:把应用服务器:[root加CentOS7油~]的ssh日志 ,远程记录到log_server上
	思路:
	应用服务器上的操作
			1.应用服务器的ssh服务的日志单独记录
				1.1指定载体
				1.2重启服务
		  2.指定载体上的日志远程发送到log_server
		  
		操作  
		[root@CentOS6-1 ~]# vim /etc/ssh/sshd_config   
			#SyslogFacility AUTHPRIV
			SyslogFacility LOCAL0		修改载体为local0
		[root@CentOS6-1 ~]# service sshd restart  
		 [root@CentOS6-1 ~]# vim /etc/rsyslog.conf
			#*.* @@remote-host:514
			# ### end of the forwarding rule ###
			local0.*        @192.168.31.62:514	转发到
			注意: 一个@代表udp协议传输
					两个@代表tcp协议传输
		
		  
		  
	log_server上的操作
		1.修改配置文件,打开日志传输的端口
				1.1加载模块tcp(重要信息) udp()
				1.2打开接受端口。默认为514端口
		2.重启服务  日志默认保存到/var/log/messages
		
		[root加CentOS6油 log]$vim /etc/rsyslog.conf
		# Provides UDP syslog reception
		$ModLoad imudp				把井号去掉
		$UDPServerRun 514				把井号去掉

		# Provides TCP syslog reception
		$ModLoad imtcp				把井号去掉
		$InputTCPServerRun 514			把井号去掉
		[root加CentOS6油 log]$service rsyslog restart

[root加CentOS6油 log]$netstat -tunlp | grep 514 查看端口有无开通 tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 25656/rsyslogd
tcp 0 0 :::514 :::* LISTEN 25656/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 25656/rsyslogd
udp 0 0 :::514 :::* 25656/rsyslogd

注意: ssh服务端的传输类型,和log——server端 的开启传输类型应该一致 若上述都完成。验证无法管理。查看selunx是否关闭和,防火墙是否514端口打开。或全部关闭

日志轮转: :切割,备份,归档 作用:避免日志过大沾满/var/log的文件系统 方便日志查看 将丢弃的系统中最旧的日志,节省空间 日志轮转的程序是logrotate logrotate本身不是系统守护进程,通过计划任务crond每天执行

配置文件格式

weekly 全局轮转周期为每一周 rotate 4 轮转保留多少个单位周期的问价,轮转到四次之后的文件删除 create 创建新的文件用于记录,其权限和旧的文件一样 dateext 用日期来做轮转之后的文件后缀名 include /etc/logrotate.d 加入自配置文件 /var/log/wtmp { 轮转日志文件 monthly 没月 create 0664 root utmp 创建新问价,权限为0664 所属root用户和utmp组 minsize 1M 文件大于1M 且周期到了才轮转,size 1M 只要文件大于1m就会轮转 rotate 1 } /var/log/btmp { missingok 如果日志不存在,不会报错 monthly create 0600 root utmp rotate 1 }

[root加CentOS6油 etc]$cat /etc/logrotate.d/syslog 

/var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts 不管有多少个文件轮转,只执行一次prerotate和postrotate代码 postrotate 轮转后执行postrotate和endscript之间的代码 和prerotae 轮转前执行 /bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true #注释:kill -HUP钟的HUP是一个信号来的,默认操作是终止进程 endscript }

需求:ssh服务日志单独保存/var/log/ssh 轮转 要求:每天轮转,保留5天的日志文件 文件大小大于5M进行轮转 思路: 1.修改logrotate的主配置文件,增加ssh日志文件的轮转 2.在logrotate.d目录下创建一个配文件ssh

	1.[root加CentOS6油 log]$vim /etc/logrotate.conf
	/var/log/ssh {
		daily
		rotate 5
		size 5M
		create
		missingok
	}
	
	2.[root加CentOS6油 log]$cat /etc/logrotate.d/ssh.conf 
/var/log/ssh {
		daily
		nodateext		不用日志做后缀,默认是1 2 3 四做后缀
		rotate 5
		size 5M
		create
		missingok
	}
fing ./ -type f |xargs rm -f 
强制轮转:logrotate -f /etc/logrotate.conf 

linux系统寻找文件是按节点号进行寻找的,所以要刷新PID号

/var/log/cron

/var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { sharedscripts postrotate /bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true endscript }

/bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null 2> /dev/null || true 用于刷新PID 所以。不刷新的时候,日志还是会找到以前的老文件进行写入 刷新之后,才会找新的文件写入

man 1

1 用户命令, 可由任何人启动的。

2 系统调用, 即由内核提供的函数。

3 例程, 即库函数。

4 设备, 即/dev目录下的特殊文件。

5 文件格式描述, 例如/etc/passwd。

6 游戏, 不用解释啦!

7 杂项, 例如宏命令包、惯例等。

8 系统管理员工具, 只能由root启动。

9 其他(Linux特定的), 用来存放内核例行程序的文档。

n 新文档, 可能要移到更适合的领域。

o 老文档, 可能会在一段期限内保留。

l 本地文档, 与本特定系统有关的。