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

四、參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM