场景介绍
	在做日志分析的过程中,我们往往要记录每条日志产生的时间,当然这个对于绝大部分的软件或者系统都是支持的,对于linux的rsyslog也不例外,但是Linux的rsyslog产生的日志这是携带了月-天 时:分:秒,并没有年份,假设在2017年,给你一份16年或者15年的log日志,让你去分析,你怎么知道是哪个年份呢?因此,接下来我们要讨论的就是这个问题。
	环境说明
	操作系统 :ubuntu 16.04
	ELK:elasticsearch 2.4.1 / logstash 2.4.0 / kibana 4.6.1
	以下介绍以ubuntu16.04的auth.log为例,不同的操作系统或者版本会有稍微的差异
	文件说明
	/etc/rsyslog.conf :主配置文件
	/etc/rsyslog.d/*.conf :辅助配置文件
	/lib64/rsyslog/*.so : rsyslog的功能扩展模块位置,I开始的文件表示,从那收集, O开始的文件表示,将日志记录到那
	配置说明
	其实单纯的在rsyslog中添加年份这个熟悉很简单,但是为了便于我们的logstash进行解析,所以这里进行了自定义template文件,后边会结合不考虑logstash的解析做出说明。
	方法1:修改原有的rsyslog文件
	自定义template控制输出的日志格式,先是修改/etc/rsyslog.d/50-default.conf文件,控制写入auth.log的日志格式
	$template myFormat,"%timegenerated:1:19:date-rfc3339%%timegenerated:27:32:date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n"
	$ActionFileDefaultTemplate myFormat
	同时修改
	auth,authpriv.*                 /var/log/auth.log
	为
	auth,authpriv.*                 /var/log/auth.log;myFormat
	date-rfc3339 :一种日期格式
	>>> import time
	>>> timestamp = time.time()
	>>> print timestamp
	1483719436.8
	>>> import datetime
	>>> d = datetime.datetime.fromtimestamp(timestamp)
	>>> print d
	2017-01-07 00:17:16.799617
	>>> from rfc3339 import rfc3339
	>>> rfc3339(timestamp)
	'2017-01-07T00:17:16+08:00'
	>>> rfc3339(d)
	'2017-01-07T00:17:16+08:00'
	>>> rfc3339(d, utc=True)
	'2017-01-07T08:17:16Z'
	>>> rfc3339(d, utc=True, use_system_timezone=False)
	'2017-01-07T00:17:16Z'
	:1:19 :进行切片,类似于Python中的分片
	>>> str_a="thinkgamer"
	>>> str_a[0:5]
	'think'
	这个时候我们便可以进行测试查看auth.log的日志格式了,首先重启rsyslog服务
	sudo service rsyslog restart
	ok,执行ssh localhost进行测试,产生的日志如下图

	上边我们说了50-default.conf是控制输出到auth.log中的日志格式,那么如何将修改好的log格式也应用到rsyslog服务上呢,这个时候就需要对rsyslog.conf做配置了
	vim /etc/rsyslog.conf
	加入
	$template myFormat,"%timegenerated:1:19:date-rfc3339%%timegenerated:27:32:date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n"
	$ActionFileDefaultTemplate myFormat
	该文件中有一行为:
	$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
	其意思是使用RSYSLOG_TraditionalFileFormat这个模板格式的日志输出,这里先忽略掉,下面会进行说明,这里传输的几种方式:
	1:简单点的
	*.*  @localhost:5000
	*.*  @@localhost:5000
	这种情况要修改 上边那行中的RSYSLOG_TraditionalFileFormat为我们自定义的template name :myFormat
	这种情况是对应所有的日志都采用此template格式
	2:在配置向外传输时携带上template
	这种情况夏,不需要改动
	$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
	配置方式为:
	*.*  @localhost:5000;myFormat
	*.*  @@localhost:5000;myFormat
	3:自定义使用的文件
	*.*;syslog;auth action(
	type="omfwd"
	Target="localhost"
	Port="5000"
	Protocol="tcp"
	template="mytem"
	)
	type:linux自带的
	Target:ip,本地的话就是localhost
	port:端口
	Protocol:使用的协议方式,tcp或者udp
	template:自己定义的template_name
	这个时候便可以结合logstash进行解析
	es中的监听为:
	input {
	tcp{
	port => 5000
	type => syslog
	}
	udp{
	port => 5000
	type => syslog
	}
	}
	logstash的解析写法为:
	filter{
	if [type] == 'syslog' {
	grok {
	match => { 'message' => '%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTNAME:hostname} %{WORD:program}%{GREEDYDATA:msgsplit}'
	}
	}
	date {
	match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
	target => "syslog_timestamp"
	timezone => "UTC"
	}
	}
	方法2:将需要修改的写进一个conf文件
	我们也可以自己另外写一个rsyslog.conf,比如my_rsyslog.conf ,然后将其放进 /etc/rsyslog.d中,重启rsyslog服务即可,因为在rsyslog.conf有个include
	$IncludeConfig /etc/rsyslog.d/*.conf
	比如说我们将需要修改的写进一个my_syslog.conf
	$template myFormat,"%timegenerated:1:19:date-rfc3339%%timegenerated:27:32:date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n"
	$ActionFileDefaultTemplate myFormat
	*.*;syslog;auth action(
	type="omfwd"
	Target="localhost"
	Port="5000"
	Protocol="tcp"
	template="mytem"
	)
	放在/etc/rsyslog.d/ 目录下,然后重启rsyslog即可。

