1. 程式人生 > >【原創】Nxlog日誌收集中的函式替換日期

【原創】Nxlog日誌收集中的函式替換日期

如題所述,關於Nxlog的日誌採集過程中的一些問題,當我們對複雜伺服器日誌進行收取時,一些我們認為的規則和規律會被狠狠的踐踏,在各行各業的技術人的隨機命名,或者無序命名的手段下,目前學到的一些Nxlog的皮毛遠遠不夠用了。

我們知道Nxlog的採集可以使用正則匹配日誌名,但是僅限於日誌名,對路徑中出現的可匹配項就無能為力了,這時候,我們通常使用遞迴採集,加上無腦*.log去進行匹配。

<Input in>
    Module	im_file
    File    "/var/log/*.log"
    SavePos TRue
    ReadFromLast    TRUE
    Recursive    TRUE
    RenameCheck    TRUE
    PollInterval  1
</Input>

<Output out>
    Module	om_file
    File    "/app/test.log"
</Output>

<Route 1>
    Path	in => out
</Route>

雖然大部分情況下都會有很好的效果,但是日誌的繁雜度越高,此方式問題就越多,目前本篇文章只是講解了怎麼使用函式替代日期,至於其他的函式有什麼功效,大家可以去官網看一下文件。

路徑:/var/log/20181008/xxx.log
每天會生成一個資料夾,資料夾下會有很多的以log結尾的,當我們對log進行匹配時可以使用正則,很容易就把各類日誌區分開來,但是
當我們對目錄名進行操作時,就會發現有些束手無策的感覺,如果使用上面的全部採集,那麼時間一長監控的檔案數,必然會不斷上升,
消耗資源,做無用功。

 而官方文件中的後半部分記載了一種函式,strftime(),下面就是我對這種函式的一些學習心得。

strftime(now(), "%Y%m%d%H%M%S") ==> 20181008185515
strftime(now(), "%Y%m%d") ==> 20181008
用法類似date命令,此外還發現了幾個好用的時間函式:

year(now()) 年
month(now()) 月
day(now()) 天

 下面是我對這個函式進行一些小例子:

<Input in>
    Module	im_file
    File    "/var/log/"+strftime(now(),"%Y%m%d")+"/cron-"+strftime(now(),"%Y%m%d")+".log"
    SavePos TRue
    ReadFromLast    TRUE
    Recursive    TRUE
    RenameCheck    TRUE
    PollInterval  1
</Input>

<Output out>
    Module	om_file
    File    "/app/test.log"
</Output>

<Route 1>
    Path	in => out
</Route>

這樣就可以把當天的cron日誌取出來,路徑為:/var/log/20181008/cron-20181008.log。