MongoDB對日誌文件進行歸檔的方法

一、MongoDB logRotate命令

在MongoDB數據庫admin數據庫下執行logRotate命令手動觸發日誌切換,切換後會將原日誌文件以時間爲後綴重命名並創建一個全新且爲空的日誌文件供MongoDB使用。

  • shard1.log.2019-10-31T06-09-03
mongo> use admin
mongo> db.adminCommand({ logRotate: 1 })

二、操作系統層kill信號

可通過對MongoDB運行的進程pid發送-SIGUSR1的kill操作實現與logRotate命令相同的功能

  1. 找到MongoDB運行的pid文件或使用ps -ef|grep mongod查看進程ID號
  2. 執行kill -SIGUSR1 pid
## 查看MongoDB進程ID
shell> cat /data/mongodb/shard1.pid
57070

shell> ps -ef|grep mongod|grep shard1|grep -v grep
mongodb  57070     1  0 Oct29 ?        00:14:44 /usr/local/mongodb/bin/mongod --config /data/mongodb/conf/shard1.conf

## 觸發日誌切換
shell> kill -SIGUSR1 57070

## 驗證日誌切換
shell> ls -ltr shard1.log*
-rw-rw-r-- 1 mongodb mongodb   7344355 Aug 29 09:38 shard1.log.2019-08-29T01-38-15
-rw------- 1 mongodb mongodb 853458949 Oct 31 14:09 shard1.log.2019-10-31T06-09-03
-rw------- 1 mongodb mongodb      6679 Oct 31 14:13 shard1.log.2019-10-31T06-13-30
-rw------- 1 mongodb mongodb      8579 Oct 31 14:20 shard1.log

三、使用操作系統logrotate功能

Linux logrotate被設計用來對各服務產生的大日誌文件進行歸檔處理,默認情況下logrotate每天基於cron job自動觸發觸發,以下是logrotate功能特點

  • 支持自動日誌歸檔
  • 支持對歸檔的日誌進行壓縮
  • 支持對歸檔操作發送郵件提醒
  • 支持基於每天、每週、每月、每年等維度進行歸檔策略
  • 支持日誌達到指定大小的歸檔策略
  • 支持在日誌歸檔期間進行額外的操作(如重啓某服務)
  • 支持歸檔過程中的常見錯誤處理機制(如文件不存在、文件爲空等)

1. 常用參數說明

weekly                      每週進行切換
rotate                      保留12份歸檔日誌文件
olddir                      指定歸檔的目錄
missingok                   如不存在該文件也不報錯且進入下一輪
minsize                     指定日誌多大時進行切換,單位字節,可與weekly、monthly一起使用
dateext                     對歸檔的日誌文件增加日期後綴,默認格式'%Y%m%d'
copytruncate                
notifempty                  如果日誌文件爲空,不會進行日誌歸檔切換
compress                    對歸檔的日誌進行壓縮,默認用gzip壓縮,文件名以'.gz結尾'

2. copy與copytruncate的差異

copy

  • 原樣拷貝一份相同的日誌文件後,不清空原日誌文件

copytruncate

  • 原樣拷貝一份相同的日誌文件後,清空原日誌文件,該方式不同於將文件先move後新建一個同名文件的方式,主要是針對一些程序在文件的inode改變後無法正常寫入日誌的情況,對於大日誌文件,通過這種方式進行日誌的truncate操作期間,會有短暫的處理時間,在這端時間內產生的日誌將不會輸出到原本的日誌文件,所以會有少量數據丟失情況。

3. 配置示例

場景需求說明

  • 每週進行切換
  • 保留10份歷史日誌
  • 歷史日誌保留在/data/mongodb/log/目錄下
  • 如果文件不存在也不報錯
  • 歸檔的日誌增加時間擴展名
  • 指定需要達到1G才進行歸檔
  • 使用先拷貝日誌在清空的方式進行歸檔
  • 對歸檔的日誌進行gzip壓縮
shell> vim /etc/logrotate.d/mongodb-shard1
	/data/mongodb/log/shard1.log
	{
	    weekly
	    rotate 10
	    olddir /data/mongodb/log/
	    missingok
	    dateext
	    minsize 104857600
	    copytruncate
	    notifempty
	    compress
	    create 0644 mongodb mongodb
	}

## 手動觸發
shell> logrotate -vf /etc/logrotate.d/mongodb-shard1


## 驗證
shell> ll /data/mongodb/log/*.gz
-rw------- 1 mongodb mongodb 2670 10月 31 15:18 /data/mongodb/log/shard1.log-20191031.gz

四、參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章