LinuxAMIを使用する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
100msの値。 MongoDB 3.2と同様に、このコンテキストはクエリが遅い理由を理解するのに役立つため、遅いクエリでどの詳細をログに記録するかについての構成はありません。
slowOpThresholdMs
構成ファイルのmongod
を増やすことで、遅い挿入/コマンドのログを回避できます。たとえば、250ミリ秒の高いslowOpThresholdMs
を設定することで、ほとんどの挿入がログに記録されないようにするのに十分な場合があります(ただし、本当に遅い挿入はログに記録される場合があります)。
operationProfiling:
slowOpThresholdMs: 250
遅い操作がログに記録されないようにしたい場合は、はるかに高い値を設定できますが、これにより、デプロイメントのパフォーマンスに関連する詳細が抑制される可能性があります。
有用なログを保持しながら、ドキュメントがログに書き込まれないようにする方法はありますか?
一般に、トラブルシューティングに役立つログには、低速クエリの詳細と、接続/レプリケーション/認証情報( quiet:true
)。
これらの詳細をログに記録しないと、実稼働環境の調整とサポートが困難になる可能性があります。
mongod
ログファイル内の個人情報へのアクセスについて懸念がある場合は、O/Sおよびファイルシステムのアクセス許可を介してログファイルへのアクセスを適切に制限し、バックアップを暗号化するか、機密性の高いログファイルを除外します。 mongod
サーバーログを表示するためのアクセスには、mongo
シェルを介してログインするだけでなく、より多くのアクセス許可が必要です。サーバーログを表示するアクセス許可を持っている人は、おそらくデータファイルをコピーするためのアクセス権も持っている可能性があります。
デプロイはAWSで行われるため、 Amazon EBS Encryption を検討できます。これにより、ボリューム内で保存されているデータ、ボリュームとインスタンス間を移動するデータ、およびボリュームから作成されたすべてのスナップショットが暗号化されます。
考慮すべきもう1つのオプションは、アプリケーションの機密フィールドを暗号化して、送信、ログ記録、またはクリアテキストで保存されないようにすることです。
デプロイメントのセキュリティ保護の詳細については、 MongoDBセキュリティチェックリスト を参照してください。