最近某个时间服务器有一台内网网卡流量跑满,查了一晚上,才找到原因,其实问题很明显。
我们有自己的日志后台,各种监控图,但是因为不知道要怎么看,
花了额外的时间才得到想要的结果。
所以想整理一下,当出现异常的时候,该怎么看日志。
1. 被DDOS了,特征就是流量跑满或者负载过高
但是不能反过来推断就是DDOS
2. 先了解公司内部是否有进行某种促销或者其他类型活动,导致用户量激增
- 整点秒杀
- 活动刚上线
- 游戏服务器维护、宕机导致用户前往论坛、社区
- 在大访问量的页面投放了广告
这些信息不需要查日志,直接通过内部沟通就能得到,应该比较快,除非你认识的人较少。
3. 检查不同的url的访问量
比如公司有几个项目
通过日志系统,统计每个项目日志产生量的百分比,比如平时是1:1
出问题的时候,可能是4:1
先定位到出问题的项目,缩小范围
4. 检查来访IP和userAgent
一般来说,如果是基于HTTP 协议的DDOS攻击,IP 和 userAgent是比较难看出问题的,不过正巧我们就碰到一个有特征的。
利用WordPress的漏洞进行攻击,来访ua中会包含WordPress。
IP 一般比较难看出什么问题,不过也观察一下,是否有大量重复ip或者同一IP在1秒内访问了多个页面(这种多数是机器人在刷,比如增加访问量等等)。
以上的几个方法可以很快的排除一些常见问题,帮助快速定位问题,不过有的时候,是代码错误或者服务器、机房异常造成,他们的表现方式有所不同。
一般来说,访问量会降低,比例不变,ua、ip也是正常的。
5. 检查慢查询日志
慢查询可谓是隐蔽杀手,逻辑正确,量少的时候也不出问题。
6. 检查错误日志
这里是语言级别的错误日志,比如网站可能是java 或者 php asp写的,他们都有自己的日志
错误日志一般比较明显,数量激增。一般发生在刚发布代码后,所以一般都能发现。除非发布后一群人去聚餐,没人盯着。
7. 没有慢查询、没有错误日志,但是数据库负载增加
- 看下缓存,很多时候可能是:缓存(redis,memcache)将内存写满后,写不进去了,请求直接到达mysql
- 缓存服务器是否失效,或者被人清空(人为造成这个问题)甚至可能是有人在dump缓存内容,导致连接不上
- 机房问题:这些问题包括
- 网线松动、误操作(拔错线~):一般流量监控直接掉到0,好判断
- 其他服务器被DDOS,影响内网或者出口带宽,一般是网站特别慢,有时候好,有时坏
- 运营商问题也可能导致类似症状,这些都是开发人员难以控制的
- 遇到机房问题或者运营商问题,如果你只有一个机房,那么一般整个机房服务器负载下降,如果你有多机房,异地机房并有做负载均衡,有可能是某些机器没负载了,另外一些负载很高。
- 当然也遇到过机房交换机问题导致负载上升,外部访问量在内部出现问题后,也增加(可以想象,当你打不开一个页面,你可能会想我刷新一下,这种普遍的用户习惯操作给故障机器雪上加霜)
8. 其他小经验
- 新装的服务器,默认有安装PHP5.3,人为给服务器装了一个PHP5.4。直接在服务器跑php脚本的时候,使用php指令,默认指向5.3。这导致一个问题就是:出错的时候,一般会去看5.4的日志,而忽略部分定时任务脚本,可能是5.3的日志。