如何解决linux SSH log 中不带年份的问题

简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.


这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处: http://blog.csdn.net/gamer_gyt
博主微博: http://weibo.com/234654758
Github: https://github.com/thinkgamer


玩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 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即可


看了上边有哪点不懂的,可以留言或者加我微信。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
20天前
|
Web App开发 存储 Linux
Linux(33)Rockchip RK3568 Ubuntu22.04上通过SSH运行Qt程序和关闭Chrome的密钥提示
Linux(33)Rockchip RK3568 Ubuntu22.04上通过SSH运行Qt程序和关闭Chrome的密钥提示
59 0
|
1月前
|
运维 监控 安全
在Linux系统中,认证日志
Linux系统中的认证日志对于安全监控和故障排查至关重要,常见的日志文件包括:`/var/log/auth.log`(Debian、Ubuntu)、`/var/log/secure`(RPM发行版)、`/var/log/lastlog`、`/var/log/faillog`、`/var/log/wtmp`和`/var/run/utmp`。这些文件记录登录尝试、失败、当前用户等信息。日志管理可通过文本编辑器、日志查看工具或`rsyslog`、`syslog-ng`等工具进行。注意日志位置可能因发行版和配置差异而变化,应确保日志文件的安全访问,并定期轮转归档以保护敏感信息和节省空间。
26 3
|
21天前
|
Linux 网络安全 数据安全/隐私保护
SSH工具连接远程服务器或者本地Linux系统
SSH工具连接远程服务器或者本地Linux系统
21 0
|
1月前
|
Linux 网络安全
linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf
linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf
34 1
|
9天前
|
存储 安全 Linux
|
15天前
|
监控 安全 Linux
【专栏】Linux SSH 的安全对于远程管理至关重要,这几个小妙招安排上!
【4月更文挑战第28天】在数字化时代,Linux SSH 的安全对于远程管理至关重要。增强 SSH 安全包括:使用强密码,调整 SSH 配置文件,尤其是端口号和认证方式;采用密钥认证代替密码;限制登录用户,禁止密码登录;使用防火墙限制访问;定期更新系统和软件。此外,通过日志监控、入侵检测系统及及时应对攻击来提升安全监控。保持对安全知识的学习和更新,结合最佳实践,是保障 SSH 安全的关键。记得安全是个持续过程,时刻保持警惕!
|
21天前
|
Linux 网络安全
Linux(16)ssh_exchange_identification: read: Connection reset by peer问题
Linux(16)ssh_exchange_identification: read: Connection reset by peer问题
19 0
|
7天前
|
存储 监控 安全
Linux ContOS7 日志管理(rsyslog)
Linux ContOS7 日志管理(rsyslog)
|
7天前
|
安全 Linux 网络安全
|
15天前
|
监控 Linux 开发者
【专栏】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件
【4月更文挑战第28天】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件。基本用法包括指定查看行数(如`head -n 10 file.txt`)和与其他命令(如`grep`)结合使用。高级用法涉及动态查看日志、过滤内容、管道操作及在脚本中的应用。实际应用案例包括监控系统日志、排查错误和分析应用日志。使用时注意文件存在性、行数选择及权限问题。熟练掌握head命令能提升工作效率,结合其他工具可实现更多功能,助力Linux用户提升技能。