Mongodb日志切割

Mongodb日志切割

依据客户端查询来设计集合的片键及索引,最近几天突然需要查询历史数据进行分析,我们的有些集合count达到亿条以上,每个文档几百个字段。突如其来的查询分析,数据库非常的卡,尤其这几天刚刚加入一个新的分片。前天上午来看,发现主分片竟然奔溃了,至于为什么查询量大,数据库会奔溃,需要后续进行分析。

遇到问题第一反应是看日志文件,拿到notepad之后由于文件太大无法打开,只能采用重启,然后开始查询mongodb日志管理的文档。Mongodb官网提出可以对日志进行切换。这种切换方式为:对当前的mongod或者mongos的当前日志文件进行重命名,加入当前时间,然后打开一个新的log文件,告诉所有的log写入到新的文件中。(注意千万不要自己在没有停止mongod的时候,直接mv然后再重新生成一个新的文件)。在mongodb中切换日志文件可以采用几种方式:

1.logRotate 默认情况下,Mongodb是开启--logRotaterename选项的,在rename的情况下,可以在log文件中添加UTC时间戳的后缀。在admin数据库中,执行命令db.runCommand({logRotate:1})告诉数据库进行日志切换。会生成:log_rout.log.2017-02-22T02-10-09 类似的日志文件。这里有8个小时的时区问题。

2.syslog 利用syslog选项,使用系统的logrotate,这种情况下不再需要开启logpath选项,还没有进行深入的了解。

3.SIGUSR1 在linux下,可以使用kill –SIGUSR1(pid of mongod),对mongos及mongod都适用。

如果希望定时生成日志文件,而不是人工的每天执行命令。因为我们的当前的集群方式为:mongos+mongod(配置副本集)+mongod(分片),所以如果可以ps –aux|grep mongod可以得到数组,然后直接使用kill –SiGUSR1命令就可以了。编写完sh命令之后,无法识别-SIGUSR1。

选择第一种方式进入mongodb中,编写js脚本,然后sh命令调用这个js命令,指定一个linux的任务。Linux的任务分为当前用户任务,系统用户。最好选择crontab –e直接进行编辑,00 59 * * * /bin/sh mongo_log_mgr.sh,制定了一个定时的10点30分钟执行的sh脚本,但是没有执行。

是的,任务是已经启动,有执行的。单独执行该shell命令,没有问题。测试一个hello.sh命令好了,是的,加上绝对路径就ok了:任务改为:

0 59 ** * /bin/sh /root/shell_script/mongodb/mongo_log_mgr.sh

在sh中,mongo中有一个选项可以直接运行js文件,sh中命令如下:

/usr/local/bin/mongo -u XXX -p XXX--authenticationDatabase admin ip:27017/admin --quiet /root/ shell_script/mongodb/mongo_log.js

如果希望将日志文件分为若干个文件夹,以便于查找某一天的日志,先睡眠,因为日志的移动可能需要时间,然后根据当天的日期创建文件夹.

sleep 30m

CURRENT_MONTH=$(date +%Y-%m) CURRENT_DAY=$(date +%d) LAST_DATE=$(date -d last-day +%Y-%m-%d) #如果是第一天则创建一个新的文件夹 if [ $CURRENT_DAY = 01 ] then mkdir /mongodb/log/$CURRENT_MONTH LAST_MONTH=$(date -d last-month +%Y-%m) mkdir /mongodb/log/$LAST_MONTH/$LAST_DATE mv *.log.* /mongodb/log/$LAST_MONTH/$LAST_DATE else mkdir /mongodb/log/$CURRENT_MONTH/$LAST_DATE mv *.log.* /mongodb/log/$CURRENT_MONTH/$LAST_DATE fi

1、 在js中使用while进行循环,运行sh命令执行js文件。当kill -2时,程序没有被杀死,直接使用kill -9 ,进程进入了僵尸状态,该进程就无法再接收任何的信号。这种情况下必须 ps –ef 得到ppid然后先杀掉父进程,作为子进程将会随后死亡

2、 在mongodb查询过程中可以使用maxTimsMS来限制查询的时间,避免长时间的查询造成数据库的死亡。或者使用KillOperator来杀掉某个正在进行的操作。但是必须非常的注意,这个操作的命令必须只是客户端的,不能是系统的命令,比如shard正在迁移之类的命令。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Centos7.5安装配置MongoDB4.0.4

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数...

    拓荒者
  • mongodb日志过大问题处理

    icenycmh关注0人评论 1256人阅读 2017-09-11 11:06:15

    拓荒者
  • Mongodb忘记密码重置方法

    下午刚设置的密码,当时忘记保存,晚上去吃了个晚饭回来就忘记了。研究了一会发现也不难,不过网上没有直接搜到就记录一下。

    拓荒者
  • 那个敢叫板苹果的华米,2019的智能穿戴财报如何?

    华米科技董事长兼CEO黄汪2018年9月在接受媒体采访时曾表示:“目前来看,我们除了苹果之外,其实也没有什么特别大的竞争对手。全世界以后可能只有两家可穿戴的公司...

    刘旷
  • MongoDB分片集群搭建

    /root/release/mongodb-linux-x86_64-rhel62-3.2.21/bin/mongod --configsvr --dbpath...

    球球
  • springboot实战之mongodb事务支持

    有玩过mongodb的朋友大概会知道mongodb4.0版本已经可以支持多文档副本集事务。而最新版本4.2更是支持分片事务,即真正的支持分布式事务。不过当时我使...

    lyb-geek
  • JAVA金额转换,阿拉伯数字的金额转…

         return sb.reverse().toString().replaceAll("零[拾佰仟]","零").replaceAll("零+万","...

    用户2192970
  • [剑指offer题解][Java]最小的k个数

    有多高,以我目前不多的面试来看,在所有遇到的面试算法题中,出现原题的概率大概能有6成,如果把基于原题的变种题目算上,那么这个出现概率能到达9成,10题中9题见过...

    后端技术漫谈
  • 单机版MongoDB的zabbix监控

    最近公司新上了几个mongodb的项目(单机版MongoDB),需要坐下监控。之前有一个监控模板,但是效果不好。于是重新去google了一把,有了如下记录。

    二狗不要跑
  • python : html 调用本地py

    py3study

扫码关注云+社区

领取腾讯云代金券