如何解决linux SSH log 中不带年份的问题
来源:互联网 发布:上海惠灵顿学校知乎 编辑:程序博客网 时间:2024/06/14 00:39
转载请注明出处:http://www.voidcn.com/blog/gamer_gyt/
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
S打开微信扫一扫,关注微信公众号【码农故事多】
玩linux的人都知道他有个syslog这个东西,新版的linux操作系统中升级为了rsyslog,具体的rsyslog这里就不多说了,感兴趣的可以参考之前的一篇文章:http://www.voidcn.com/blog/gamer_gyt/article/p-6225856.html,今天我们聊一聊怎么自定义rsyslog的日志输出格式
场景介绍
在做日志分析的过程中,我们往往要记录每条日志产生的时间,当然这个对于绝大部分的软件或者系统都是支持的,对于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 timestamp1483719436.8>>> import datetime>>> d = datetime.datetime.fromtimestamp(timestamp)>>> print d2017-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即可
看了上边有哪点不懂的,可以留言或者加我微信。
- 如何解决linux SSH log 中不带年份的问题
- 如何解决linux的ssh连接自动断开的问题
- 如何解决Tomcat服务器的stdout.log大文件问题
- ssh问题的解决
- LINUX 解决SSH慢问题
- SSH如何解决clob字段读写的问题
- 如何解决ssh总是掉线的问题
- Linux中的SSH终端乱码问题的解决
- 解决Linux系统ssh连接太慢的问题
- ssh无法连接VM下Linux问题的解决
- 解决Putty ssh到Linux 太慢的问题
- Linux中的SSH终端乱码问题的解决
- 解决SUSE Linux无法使用SSH登录的问题
- 解决 Linux 下 ssh 登陆慢的问题
- [Linux] 解决ssh登录速度慢问题
- ssh 连接linux中文乱码问题,解决
- 解决Linux ssh登录立即退出问题
- linux中解决SSH连接慢问题
- PROCEDURE-201701
- Hadoop下Hbase启动
- 为什么在Spring的配置里,最好不要配置xsd文件的版本号
- 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法
- 线程的基本概念、线程的基本状态以及状态之间的关系
- 如何解决linux SSH log 中不带年份的问题
- Block
- Linux Mysql5.7.10修改root初始密码
- jQuery学习笔记——奇怪的问题
- 语义分析的一些方法(三)
- synchronized和java.util.concurrent.locks.Lock的异同
- 打造漂亮实用的Interllij Java Style
- Flask-Celery使用说明
- Android 用adb pull或push 拷贝手机文件到到电脑上