一日一技:手动rotate MongoDB的日志

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一日一技:手动rotate MongoDB的日志

默认情况下,MongoDB的日志始终会写到同一个文件中。在Linux系统下,这个日志文件为 /var/log/mongodb/mongodb.log。随着时间的推移,这个文件会越来越大:

kingname@xxx:/var/log/mongodb$ ls -lh
total 43G
-rw------- 1 mongodb mongodb 43G Jun  6 17:54 mongod.log

这样的大日志占用了太多了储存空间。但由于此时MongoDB正在往里面写入数据,所以不应该直接删除它,否则可能会导致不可预料的问题。

现在需要让MongoDB把日志写到另一个文件中,从而释放当前文件,然后再删除这个大日志文件。

要实现这个目的,可以使用MongoDB的 rotate功能。在MongoDB的官方文档中写到:

When used with the --logpath option or systemLog.path setting, mongod and mongos instances report a live account of all activity and operations to a log file. When reporting activity data to a log file, by default, MongoDB only rotates logs in response to the logRotate command, or when the mongod or mongos process receives a SIGUSR1 signal from the operating system.

翻译过来就是,当你通过 --logpath参数指定了日志的位置以后,MongoDB会始终把日志写到这个文件中,除非你执行了 logRotate命令,或者MongoDB的进程收到了 SIGUSR1信号。

文档地址为:https://docs.mongodb.com/manual/tutorial/rotate-log-files/

文档中提到了两种办法:

执行 logRotate命令

进入MongoDB的shell中:

kingname@xxx:/var/log/mongodb$ mongo 
# 切换到admin库
> use admin
switched to db admin
# 执行命令rotate日志
> db.adminCommand( { logRotate : 1 } )

命令执行完成以后,退出MongoDB的Shell,重新查看日志文件夹,可以发现如下图所示:

此时, mongod.log文件变成了22KB,而多出一个 mongod.log.2019-06-06T09-54-03,这个文件有43GB,这就是之前的大日志文件。MongoDB在Rotate日志的时候,会首先把原来的日志改名为 mongod.log.日期,然后重新创建一个新的 mongod.log文件,并把新的日志写入进去。

现在就可以直接删除 mongod.log.2019-06-06T09-54-03从而释放硬盘空间了。

向MongoDB进程发送信号

第二种方式,就是向MongoDB的进程发送信号。为了实现这个目的,首先需要获得进程的 pid。在Linux或者mac中执行命令:

# 在Linux下用-aux
ps -aux | grep mongo
# 在mac下用-ef
ps -ef | grep mongo

从左数第二项就是MongoDB的PID,如下图所示:

此时,执行命令:

# kill -SIGUSR1 PID
kill -SIGUSR1 561

就可以实现rotate日志。这个地方的命令虽然是 kill,但是不用担心,这并不是杀死MongoDB的进程,只是给它发一个信号而已。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
6天前
|
存储 NoSQL 安全
【赵渝强老师】MongoDB的Journal日志
MongoDB通过Journal日志保证数据安全,记录检查点后的更新,确保数据库从异常中恢复到有效状态。每个Journal文件100M,存于--dbpath指定的journal子目录。默认已启用Journal日志,可通过--journal参数手动启用。WiredTiger存储引擎使用128KB内存缓冲区,异常关机时可能丢失最多128KB的数据。视频讲解和详细步骤参见附录。
36 17
|
8月前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第9天】mongoDB查看数据的插入日志
471 4
|
8月前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第2天】mongoDB查看数据的插入日志
383 0
|
8月前
|
存储 监控 NoSQL
【MongoDB 专栏】MongoDB 的日志管理与分析
【5月更文挑战第11天】MongoDB日志管理与分析至关重要,包括系统日志和操作日志,用于监控、故障排查和性能优化。合理配置日志详细程度、存储位置和保留策略,使用日志分析工具提升效率,发现性能瓶颈和安全性问题。日志分析有助于优化查询、调整配置,确保数据安全,并可与其他监控系统集成。面对日志量增长的挑战,需采用新技术如分布式存储和数据压缩来保障存储和传输。随着技术发展,不断进化日志管理与分析能力,以支持MongoDB的稳定高效运行。
186 2
【MongoDB 专栏】MongoDB 的日志管理与分析
|
8月前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第22天】mongoDB查看数据的插入日志
62 3
|
JSON 缓存 负载均衡
【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
【服务网格架构】Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
|
3月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
14天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
51 15
|
22天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。