`
猫耳呀
  • 浏览: 165505 次
社区版块
存档分类
最新评论

如何利用秒级监控进行mongodb故障排查

阅读更多
摘要: 在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba、运维、业务开发同学进行问题诊断、排查、分析有着重要的作用。并且一个监控系统的好坏,也很大程度上影响了能否精确的定位故障,以及是否能正确进行问题修复,避免下一次的故障。

在我们平时的数据库使用当中,监控系统,作为排查故障,告警故障的重要辅助系统,对dba、运维、业务开发同学进行问题诊断、排查、分析有着重要的作用。并且一个监控系统的好坏,也很大程度上影响了能否精确的定位故障,以及是否能正确进行问题修复,避免下一次的故障。而监控粒度、监控指标完整性、监控实时性是评价一个监控的三个重要因素。
在监控粒度上,目前很多的系统都只能做到分钟级监控,或者半分钟级监控。这样一个监控粒度,在针对当前高速运转的软件环境下,能力已经越来越捉襟见肘。对于一些瞬间爆发的大量异常更是无能为力。而提升监控粒度,带来的成倍增长的大数据量以及成倍降低的采集频率,对于资源的消耗将会是极大的考验。

在监控指标完整性上,当前绝大部分的系统采用的是预定义指标进行采集的方式。这种方式有一个极大的弊端,就是,如果因为一开始没有意识到某个指标的重要性而漏采,但是恰恰却是某次故障的关键性指标,这个时候这个故障便极有可能变成“无头冤案”。

而在监控的实时性上——“没有人关心过去是好是坏,他们只在乎现在”。

以上三个能力,只要做好一个,就可以称得上是不错的监控系统了。而阿里云自研的秒级监控系统inspector已经可以做到1秒1点的真秒级粒度,全量指标采集、无一疏漏——甚至对曾经没有出现过的指标进行自动采集,实时数据展示。1秒1点的监控粒度,让数据库的任何抖动都无处遁形;全量指标采集,给予了dba足够全面完整的信息;而实时数据展示,能第一时间知道故障的发生,也能第一时间知道故障的恢复。

今天就针对mongodb数据库,来聊一聊当遇到db访问超时时,如果利用秒级监控系统
inspector进行故障排查:

case 1

之前有一个线上业务,用的是mongodb副本集,并且在业务端进行了读写分离。突然有一天,业务出现大量线上读流量超时,通过inspector可以明显看到当时从库的延迟异常飙高

从库延迟飙高,则说明从库oplog重放线程速度追不上主库写入速度,而在主从配置一致的情况下,如果从库的响应速度比不上主库,那只能说明从库当时除了正常的业务操作之外,还在进行一些高消耗的操作。

经过排查,我们发现当时db的cache出现了飙升:


从监控中可以明显的看到,cache usage迅速从80%左右升到95%的evict trigger线,并且与此同时,dirty cache也有所攀升,达到了dirty cache evict的trigger线。

对于wiredTiger引擎,当cache使用率达到trigger线后,wt认为evict线程来不及evict page,那么就会让用户线程加入evict操作,然后此时就会大量引起超时。而这个想法通过application evict time指标也可以加以印证:


通过上图我们可以清晰的看到,当时用户线程花费了大量时间去做evict,然后导致了正常访问请求的大量超时

然后经过业务端排查,是因为当时有大量的数据迁移job导致cache打满,所以在对迁移job进行限流并且增大cache之后,整个db运行也开始变的平稳。

case 2

某日线上一个使用sharding集群的业务突然又一波访问超时报错,然后短暂时间后又迅速恢复正常。通过经验判断,当时多半有一些锁操作,导致访问超时。

通过inspector,我们发现在故障发生时刻某个shard上锁队列很高:


所以基本印证了我们之前对于锁导致访问超时的猜想。那么究竟是什么操作导致了锁队列的飙升呢?

很快,通过对当时命令的排查,我们发现当时shard上的鉴权命令突然飙高:


而通过查看代码,我们发现,mongos到mongod虽然使用keyfile进行认证,但是实际也是通过sasl命令的scram协议来进行认证,而这个在认证的时候会有一个全局锁,所以当时瞬间大量的鉴权导致了全局锁队列飙升,然后导致访问超时

所以,最后我们通过改小客户端的连接数,来减少这种突然激增的鉴权产生全局锁导致超时。
通过以上两个case,我们能看到,足够小的监控粒度,足够全面的监控指标项,对于故障发生的问题排查有多么重要,而实时性,在监控墙场景下的作用也十分明显。

最后,秒级监控已经在阿里云mongodb控制台开放,云mongodb的用户可以自主进行监控开启,体验秒级监控带来的高清体验。

原文地址:https://yq.aliyun.com/articles/559070?spm=a2c41.11181499.0.0
分享到:
评论

相关推荐

    收集的Mongodb资料

    7. MongoDB的运维:包含备份、恢复、日志分析和故障排查等运维实践。 8. 社区和生态:介绍MongoDB社区、工具生态系统和最佳实践案例。 通过这两份资料的学习,开发者可以全面了解MongoDB的基础知识,深入理解其核心...

    MongoDB可视化工具

    它们通过图形化的界面使得数据库管理任务变得更加简单,无论是在日常的查询、备份、性能优化,还是在故障排查等方面,都能发挥重要作用。 在实际使用中,可以根据团队的需求和个人喜好选择合适的工具。NosqlBooster...

    Mongodb Manual.rar

    9. **操作与监控**:如何使用 MongoDB 的命令行工具、监控工具以及日志管理,进行日常维护和故障排查。 10. **备份与恢复**:详细说明如何备份和恢复 MongoDB 数据,以防止数据丢失。 11. **驱动程序与连接**:...

    mongodb3.2.4说明文档

    - 故障排查指南 #### 三、MongoDB CRUD 操作 **3.1 MongoDB CRUD 介绍** CRUD 是 Create(创建)、Read(读取)、Update(更新)和 Delete(删除)的缩写,用于描述对数据库的基本操作。MongoDB 提供了一套完整的...

    mongodb 手册,帮助文件。

    - **日志记录**:启用详细的日志记录以进行故障排除。 - **性能监控**:使用内置工具监控性能指标。 - **内存诊断**:启用内存诊断功能。 #### 三、日志记录与备份 **4.1 日志记录流程** - **日志文件**:配置 ...

    mongodb-docs-2011-01-29_mongodb最新用户手册

    - **Mongo Administration Guide**:面向系统管理员,详细介绍了如何管理 MongoDB 实例,包括安装、配置、监控和故障排除等方面的知识。 #### 六、语言支持 - **Language Support**:MongoDB 支持多种编程语言。这...

    mongodb高可用所需yaml

    7. **健康检查与生命周期管理**:在YAML文件中,可以设置livenessProbe和readinessProbe来监控MongoDB的健康状态,确保服务的稳定性和可靠性。此外,还可以定义生命周期管理策略,如初始化容器,确保在主容器启动前...

    MongoDB最新版3.4.10

    此外,监控和调整MongoDB的性能,以及了解如何进行故障排查,也是日常运维中不可或缺的技能。 总之,MongoDB 3.4.10是一个功能强大且灵活的数据库解决方案,适用于需要处理大量非结构化数据的现代应用程序。通过...

    mongodb 3.4.2 java包

    10. **监控和诊断**:MongoDB提供了丰富的诊断工具,如`db.serverStatus()`和`db.stats()`,在Java应用中,开发者可以通过执行这些命令获取关于MongoDB实例的运行状态和统计信息,用于故障排查和性能调优。...

    MongoDB_参考手册

    18. **故障排查**:收集了常见问题及其解决方案,如连接问题、性能瓶颈等,帮助快速定位并解决问题。 19. **软件获取**:提供了MongoDB软件的下载链接,包括官方版本与第三方包管理器(如Ubuntu、Debian、CentOS、...

    mongoDB可视化工具

    5. 多服务器管理:对于运行多个MongoDB实例或分片集群的环境,可视化工具可以方便地管理多个连接,查看其状态,进行性能监控和故障排查。 6. 数据可视化:一些高级的可视化工具还提供了数据可视化功能,可以将...

    MongoDB简介及精进PDF

    对于有经验的开发者,它可能涵盖了一些高级主题,如性能优化和故障排除。 深入学习MongoDB.pdf可能会进一步探讨MongoDB的高级特性和最佳实践。这可能涉及到分布式计算、数据分析、安全策略、监控与诊断,以及如何在...

    MongoDB在京东的使用

    - **监控与运维**:对MongoDB集群的性能监控和故障排查是关键,京东会使用专业的工具进行监控和维护,确保系统的稳定运行。 5. **未来发展趋势** - **云原生**:随着云技术的发展,京东可能会进一步将MongoDB迁移...

    mongodb集群安装手册

    此外,对于生产环境,建议配置监控和日志记录,以便于故障排查和性能优化。MongoDB提供了丰富的监控工具和日志选项,如MMS(MongoDB Management Service,现已被MongoDB Cloud Manager替代)和Oplog日志。 总之,...

    mongoDB说明文档

    MongoDB管理指南涵盖了数据库的日常管理和运维,包括备份恢复、性能调优、故障排查等,是数据库管理员的必备手册。 ### **20. 在Ruby中处理Mongo对象和类(Working with Mongo Objects and Classes in Ruby)** ...

    mongodb-linux-x86_64-2.2.6.tgz

    4. 故障排查:当遇到问题时,检查日志信息,使用`db.currentOp()`查看当前操作。 总结来说,MongoDB 2.2.6版在Linux x86_64平台上提供了高效、可靠的数据存储解决方案。了解并掌握MongoDB的安装、运行、管理和维护...

    slf4j输入日志到mongodb

    总的来说,通过SLF4J将日志输入到MongoDB,不仅可以实现日志的集中管理和持久化,还能够利用MongoDB的灵活性和高性能进行日志数据的深度挖掘和分析,这对于大型系统的监控、故障排查和性能优化具有重要价值。...

    mongodb的java驱动3.2版本

    9. **监控和诊断**:Java驱动3.2允许应用程序监听MongoDB的事件,如连接状态变化、操作结果等,以便进行故障排查和性能分析。 10. **兼容性和升级**:Java驱动3.2版本与MongoDB 3.x系列服务器兼容,但请注意,随着...

    mongodb数据库分离和系统切换方案

    定期监控MongoDB的运行状态,如CPU使用率、内存占用、磁盘I/O和网络流量,以便及时发现并解决问题。启用日志记录,分析异常行为,有助于故障排查和性能调优。 7. **安全与备份**: 设置访问控制和身份验证,保护...

    阿里云 专有云企业版 V3.8.1 云数据库 MongoDB 版 运维指南 20190910

    这将帮助运维团队更好地维护和监控MongoDB数据库。 知识点5:MongoDB数据库故障排除 该指南提供了MongoDB数据库的故障排除指南,包括常见故障的解决方法、错误日志的分析等内容。这将帮助运维团队快速排除MongoDB...

Global site tag (gtag.js) - Google Analytics