运维分析问题方法和思路

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 运维分析问题方法和思路

这是写给初入运维小伙伴的,大佬们勿喷。许多初入运维的小伙伴在遇到问题时,会显得很慌乱,随便拿着少许报错,就上必应、百度等,在服务器上狂操作,既浪费了时间,又没有解决问题,本篇文章,可以和大家分享一下,小弟我是如何分析问题方法和思路。



从基础监控入手


遇到问题,最好花接近一分钟查查服务器基础环境,例如: cpu负载情况、内存情况、磁盘使用率、磁盘inode等、确定这些没问题后,再查询其他的服务。


这里举个小栗子:


本小学生刚毕业不久,还在一家小型游戏公司做运维,具体的业务是卡牌类休闲游戏,游戏架构是及其标准的微服务,各个服务之间使用我们自建的RabbitMQ进行通信,在某个午间遇到了问题,所有用户在登录成提示登录成功,但是卡在登录界面,进不去大厅。收到消息后,立即将跳板机权限下放到开发,然后查询了接近1个小时,终于弄清楚了,登录服在用户登录成功后,向mq发布了消息,而大厅服务器没收到! 最后发现,自建RabbitMQ那台机器磁盘满了导致MQ拒绝接收新请求,但是MQ进程还是存在的,于是乎手动清理部分日志后,问题得以恢复。


如上问题,映射出一个问题,良好的监控系统至关重要,若没有,请在发生问题后,手动确认基础环境是否有问题,有些问题明明5分钟就可以解决问题的,却闹了接近2个小时得以解决,最后还要背锅。哦,这家公司后来倒闭了。



基础监控命令


内存

free -h

使用如上命令,可以看到目前服务器内存情况,注意,在centos 7.*中需要关注的点为available而非free,例如

image.png


cpu负载

uptime

如上命令,请关注load average即可,三个值,分别是 1分钟负载 、 5分钟负载 、 15 分钟负载。

image.png


而该值,取决于cpu线程数,例如线程 ,最理想的负载情况应该是 16 * 0.8 = 12.8 ,超过该值,就应该去找下具体原因了。


cpu线程数可以使用cat /proc/cpuinfo | grep -c processor来看。

image.png


磁盘使用率

查看磁盘相关信息,可以使用df -hdf -i进行查询,前者查看磁盘使用率,而后者查询inode使用率。


这里再补充一个小点

在遇到磁盘满了的情况下,需要删除日志,请不要使用rm -f进行删除,请使用>将文件重定向空即可。




巧用日志查询


遇到问题后,在查询基础监控还是无法入手情况下,一定要查询下系统日志,目录在/var/log/,当你发现出问题后,监控系统查询那段时间,都没任何数据上报,记得查询一下message,查询下,是否是因为某些进程导致系统OOM了。


这里也举个例子:


也是刚毕业不久,开发在抱怨,测试服务器登录不上去了,于是乎,手动尝试后,发现也不行,再次期间登录云平台准备查询监控,而后在等待3分钟后,又可以登录了,在查询监控后发现有一段监控是“空白”的,而机器又没有被重启,当时第一反应是系统“宕机”了(因为再次之前,这个云账号下有机器陆续在“宕机”,每隔几分钟又好了)。于是乎联系云厂商进行分析查看,最后分析的结果是某个进程OOM了,而后在询问开发过程中,发现,有个程序大哥某段逻辑写错了,写成了死循环,既费cpu又耗内存,最后导致OOM了。


查询是否有进程oom

grep -i 'out of memory' message




最后才是应用日志


其实,在我遇到的绝大多数问题,都是我们自己的程序的Bug或者异常引起的,那么为什么要先查询基础服务和系统日志呢? 傻孩子,晒过谷子么,当看天不好的时候,都是先收自家谷子,确保自家谷子收完了,有空了再去隔壁帮忙收别家的谷子呀,我们定位问题也是类似的。


这个时候一般就要下放权限,或者提供相关日志给程序,请他们帮忙协助定位问题,这个就没有什么技巧提供了,关键是看项目架构理解程度了,顺着看日志会方便的多。



总结


是不是有发现,始终没有提及网络分析,有了网络原因,这个有点复杂,所以就不在本篇讨论范围之类。


各位可能发现了,运维在遇到问题的时候,一般而言都是从底层慢慢网上查询,而程序遇到问题后,一般都是以顶层根据报错,或者猜想,慢慢向下查询,总之,目的都是解决该问题。前者适用于已经发布数月或者数年的系统,因为逻辑基本上都跑过了,报错基本上是因为某些底层、中间件抛错引起的,而后者主要是查询一些刚发布不久或者是正在开发中的项目。报错大部分是代码引起的。


其实想写的东西很多,但是不知道如何下笔,问题的呈现也是各种各样,但是万变不离其宗,其实还有一点,让我思考很久的,与其到处救火,不如做好防范措施。该监控的监控,该写程序自动管理的,就写程序。


怎么样,好玩吧,快来动动小手指,额,今天这个这个好像动不了小手指,今天,你学废了么?




相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
运维 Shell
运维(15)-shell脚本的调试方法
运维(15)-shell脚本的调试方法
84 0
|
运维 监控 Linux
Linux系统中实现便捷运维管理和远程访问的1Panel部署方法
Linux系统中实现便捷运维管理和远程访问的1Panel部署方法
|
11天前
|
机器学习/深度学习 数据采集 运维
机器学习在运维中的实时分析应用:新时代的智能运维
机器学习在运维中的实时分析应用:新时代的智能运维
55 12
|
4月前
|
机器学习/深度学习 运维 算法
【2021 高校大数据挑战赛-智能运维中的异常检测与趋势预测】1 赛后总结与分析
对2021高校大数据挑战赛中智能运维异常检测与趋势预测赛题的赛后总结与分析,涉及赛题解析、不足与改进,并提供了异常检测、异常预测和趋势预测的方法和模型选择的讨论。
129 0
【2021 高校大数据挑战赛-智能运维中的异常检测与趋势预测】1 赛后总结与分析
|
5月前
|
运维 监控 Devops
DevOps(Development和Operations的组合)是一种强调软件开发(Dev)和信息技术运维(Ops)之间协作与沟通的文化、方法和实践。
DevOps(Development和Operations的组合)是一种强调软件开发(Dev)和信息技术运维(Ops)之间协作与沟通的文化、方法和实践。
|
5月前
|
运维 监控 容灾
智能化运维场景分析
【7月更文挑战第12天】智能运维目标是解放运维人员,提高效率,确保业务连续性和优化资源利用。
|
5月前
|
运维
好的运维,自媒体运营,好的商业模式,好的形势,良好的展示,利用一个域名,展示做好的项目,好的商业模式,星球直播课程,带项目在线地址,管理员账号:aaa 123,文章下面填上一句话可以涨粉的方法
好的运维,自媒体运营,好的商业模式,好的形势,良好的展示,利用一个域名,展示做好的项目,好的商业模式,星球直播课程,带项目在线地址,管理员账号:aaa 123,文章下面填上一句话可以涨粉的方法
|
5月前
|
运维 前端开发 数据库
快,文本,需求,痛点,添加快捷链接,必不可少--------运维之提升运维速度的方法,一个简单的快捷链接添加页面添加写法+视频播放速度一定要能够设置5px 15px的样式,.exe文件可以提升快捷
快,文本,需求,痛点,添加快捷链接,必不可少--------运维之提升运维速度的方法,一个简单的快捷链接添加页面添加写法+视频播放速度一定要能够设置5px 15px的样式,.exe文件可以提升快捷
|
7月前
|
缓存 运维 安全
运维:推荐一款非常专业好用的磁盘空间分析神器TreeSize
【2月更文挑战第16篇】Optimizer 是一个多功能系统优化清理工具,它支持垃圾清理、注册表修复、启动项管理,关闭视窗系统中不需要的功能,帮您恢复您的隐私与增加您的安全性,建议在全新、干净的Windows安装之后进行优化,以实现最大的隐私性与安全性,根据您的Windows版本,Optimizer还允许您执行一些
运维:推荐一款非常专业好用的磁盘空间分析神器TreeSize
|
运维 Shell Python
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)
138 0

热门文章

最新文章