为了防止mongodb的部分垃圾sql拖慢数据库,采集慢sql还是很有必要的。
官方文档有些可供参考: https://docs.mongodb.com/manual/reference/method/db.currentOp/
cat /root/scripts/monit_mongo_slowlog.sh
#!/bin/bash # 检查mongodb上查询执行超过2s的操作,并发送邮件 # 官方文档 https://docs.mongodb.com/manual/reference/method/db.currentOp/ source /etc/profile echo 'db.currentOp( { "active" : true, "secs_running" : { "$gte" : 2 } ,"op" : { "$in" : [ "insert", "update", "remove","query" ] } , "ns" : /^db1|db2|db3|db4\./ } )' | mongo 127.0.0.1:27017/admin -uroot -p123456 > /root/mongo_slowlog [ `wc -l /root/mongo_slowlog | awk '{print $1}' ` -eq 4 ] && exit || cat /root/mongo_slowlog | mailx -v -s "$(hostname -s) 出现超过2s的慢查" xxxxx@qq.com
然后,可以添加一个每2分钟一次的cronjob
*/2 * * * * sh /root/scripts/monit_mongo_slowlog.sh >/dev/null 2>&1
捕获到的慢sql 会自动通过邮件发送出来,类似如下: