Log Rotate意思是當log隨著時間擴大後,能夠自動打包壓縮或是清除掉舊log,以免系統空間被log吃光。
ELK Filebeat並無支援log rotate
的功能,Beats主要功能是做log shipping
,不包含log rotate
,因此需要透過額外的方式做。
在此文章中測試環境為 Ubuntu Server 18.04 LTS
方法1: logrotate
Tool
網路上查到大部分幾乎都是採用Linux內建的logrotate
工具來配合Filebeat,一般Linux系統的套件如syslog, apt-get等等其實都已經有使用logrotate
這個工具來做管理,這個工具可以設定定期或是根據大小來做rotate
。
以下為一個小範例:
- 在
/var/log
底下建立一個pohsien.log
。 ```bash $ cd /var/log; vim pohsien.log $ ls -l pohsien.log
-rw-r–r– 1 root root 204 Aug 20 09:47 pohsien.log ```
- 將
/var/log/pohsien.log
加到logrotate設定檔裡面。1
$ vim /etc/logrotate.conf
新增以下內容
1 2 3 4 5 6 7 8 9
/var/log/pohsien.log{ # 大小超過500KB就執行log rotate maxsize 500K # 將舊的檔案壓縮,並創建新的pohsien.log檔 # 如果沒壓縮的話,舊檔會改名,然後一樣會創建新的pohsien.log檔 compress # 做超過兩次log rotate就把最舊的資料砍掉,也就是最多只會留兩個壓縮檔 rotate 2 }
-
測試log rotate 重複寫入
pohsien.log
然後手動執行logrotate
,可以發現當檔案超過500KB,就會自動產生pohsien.log.x.gz
,且最多只會有兩個壓縮檔,最舊的會一直被砍掉。手動執行logrotate
1
$ logrotate -v /etc/logrotate.conf
- 查看結果
1
$ ls -l /var/log
注意事項
在此範例中只有使用到一些功能,實際上logrotate
可用的功能相當多,可視各種情境做調整。
另外logrotate
是使用cronjob執行的,在Ubuntu預設是15分鐘執行一次,如果想要自訂執行時間可以自己另外寫cronjob執行logrotate,另外要注意的是如果要跟filebeat一起使用,需要配合好兩個的執行時間。
參考資料
- 鳥哥的Linux私房菜 Logrotate - http://linux.vbird.org/linux_basic/0570syslog.php#rotate
- How to Use logrotate to Manage Log Files - https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-files/
相關討論
- Log rotation and filebeat - https://discuss.elastic.co/t/log-rotation-and-filebeat/140285
方法2: 檢查filebeat registry
Elasticsearch staff在討論區 文章1跟文章2有提到一個比較tricky的方式:
- filebeat每次成功傳送完檔案後會把記錄寫在
/var/lib/filebeat/registry/filebeat/data.json
- 寫一隻
cronjob
或是其他程式檢查data.json
裡的offset
是否跟log檔案大小一樣,如果一樣就代表傳輸完了,然後刪掉傳輸完的log檔案。
相關討論
- Delete processed log entries - https://discuss.elastic.co/t/delete-processed-log-entries/75960
- FileBeats -Are there any ways we can delete the log files after file beat harvest the data to logstash - https://discuss.elastic.co/t/filebeats-are-there-any-ways-we-can-delete-the-log-files-after-file-beat-harvest-the-data-to-logstash/177997
文章內容的轉載、重製、發佈,請註明出處: https://blog.phshih.com/