【原創】Nxlog日誌收集中的函式替換日期
阿新 • • 發佈:2018-12-14
如題所述,關於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。