Logging

即使詳細程度最低,mongodb也會偶爾記錄整個文件

  • September 22, 2016

我們在帶有 Linux AMI 的 AWS 環境中使用 mongodb 版本 3。

最初 mongo 正在記錄整個文件。然後我們降低了 yaml 中的詳細程度。這似乎使大多數(99%)的文件沒有被記錄下來。但是我們仍然發現它偶爾仍然會記錄記錄。它似乎先做一個 WRITE 然後是一個 COMMAND 並且都包含整個記錄。

有沒有辦法確保文件永遠不會被寫入日誌,同時仍然有有用的日誌記錄?

謝謝

systemLog:
 quiet: true
 destination: file
 path: /var/log/mongodb.log
 logAppend: true
 logRotate: rename
 traceAllExceptions: false
 timeStampFormat: iso8601-utc
 verbosity: 1 # This will be inherited by any component with verbosity -1
 component:
   accessControl:
     verbosity: -1 # NOTE: Negative one (-1) means "inherit"
   command:
     verbosity: 0 # MUST BE ZERO!!! Otherwise, inserted/updated records (all the data) will get logged.
   control:
     verbosity: -1
   geo:
     verbosity: 0
   index:
     verbosity: -1
   network:
     verbosity: -1
   query:
     verbosity: -1
   replication:
     verbosity: -1
   sharding:
     verbosity: 0
   storage:
     verbosity: -1
   write:
     verbosity: 0 # MUST BE ZERO!!! Otherwise, inserted/updated records (all the data) will get logged.

版本和日誌看起來像這樣。請注意,我輸入了數據,因此任何無效的 json 或拼寫錯誤都是由於我而不是 mongo 造成的。

版本 3.0.6

TIMESTAMP I WRITE [conn0001] insert project.collection query {<insert our json document here>}
ninserted:1 
keyUpdates:0
writeConflicts:0
numYields:0
locks:{Global: {acquireCount: {r: 2, w: 2}}, MMAPV1Journal: {acquireCount: {w:2},aquireWaitCount: {w:2}, 
timeAquiringMicros: {w: 119326}}, Database: {acquireCount:w: 2}}, Collection" {acquireCount: {W:1}}, oplog: {acquireCount: {w: 1}}} 119ms



TIMESTAMP I COMMAND [conn0001] insert project.$cmd command:  insert {<insert our json document here>}
ninserted:1 
keyUpdates:0
writeConflicts:0
numYields:0
reslen: 80
locks:{Global: {acquireCount: {r: 2, w: 2}}, MMAPV1Journal: {acquireCount: {w:2},aquireWaitCount: {w:2}, 
timeAquiringMicros: {w: 119326}
timeAquiringMicros: {w: 119326}}, Database: {acquireCount:w: 2}}, Collection" {acquireCount: {W:1}}, oplog: {acquireCount: {w: 1}}} 119ms

正在記錄您的插入查詢,因為它們被認為是慢查詢——花費的時間超過了預設operationProfiling.slowOpThresholdMs值 100 毫秒。與 MongoDB 3.2 一樣,對於慢查詢應記錄哪些詳細資訊沒有任何配置,因為此上下文有助於理解查詢慢的原因。

您可以通過增加配置文件slowOpThresholdMs中的來避免記錄緩慢的插入/命令。mongod例如,設置更高slowOpThresholdMs的 250 毫秒可能足以確保不記錄大多數插入(儘管可能仍然很慢):

operationProfiling:
   slowOpThresholdMs: 250

如果您想確保永遠不會記錄緩慢的操作,您可以設置一個更高的值,但這可能會抑制與您的部署性能相關的細節。

有沒有辦法確保文件永遠不會被寫入日誌,同時仍然有有用的日誌記錄?

通常,對故障排除有用的日誌記錄包括慢查詢的詳細資訊以及連接/複製/身份驗證資訊(您已使用 隱藏quiet:true)。

如果不記錄這些詳細資訊,您可能難以調整和支持生產環境。

如果您擔心訪問mongod日誌文件中的私人資訊,我會確保您通過作業系統和文件系統權限正確限制對日誌文件的訪問,並加密您的備份或排除敏感日誌文件。訪問查看mongod伺服器日誌需要更多的權限,而不僅僅是通過mongoshell 登錄,任何有權查看伺服器日誌的人大概也可以訪問複製數據文件。

由於您的部署是在 AWS 上,您可以考慮使用Amazon EBS 加密,它將加密卷內的靜態數據、在捲和實例之間移動的數據以及從卷創建的所有快照。

另一個要考慮的選項是加密應用程序中的敏感欄位,這樣它們就不會以明文形式傳輸、記錄或保存。

有關保護部署的更多資訊,請參閱MongoDB 安全檢查表

引用自:https://serverfault.com/questions/782545