天天看點

linux SSH log 中不帶年份問題的實戰解決方法,絕對可行!場景介紹環境說明檔案說明配置說明

轉載請注明出處: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進行測試,産生的日志如下圖

linux SSH log 中不帶年份問題的實戰解決方法,絕對可行!場景介紹環境說明檔案說明配置說明

上邊我們說了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即可

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

【技術服務】,詳情點選檢視: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

linux SSH log 中不帶年份問題的實戰解決方法,絕對可行!場景介紹環境說明檔案說明配置說明

掃一掃 關注微信公衆号!号主 專注于搜尋和推薦系統,嘗試使用算法去更好的服務于使用者,包括但不局限于機器學習,深度學習,強化學習,自然語言了解,知識圖譜,還不定時分享技術,資料,思考等文章!

繼續閱讀