
业务需求场景
线上服务日志过多,为了方便监控系统运行状况,场景举例:
服务关系介绍
- A 服务网关
- B 具体服务
- C 拉取服务信息的集群(master work)
- 拉取信息(这里意为获取视频流 .h264)
运行逻辑概括
A服务网关
C服务调用网关,获取通行证
然后用C的work服务携带通行证去B 拉取信息存到消息队列,供下游算法执行相应的业务处理
目前存在问题
- 拉取信息超时错误代码(404,408…)
- 拉取信息失败(设置重试时间,一定时间后重试拉取)
- 获取网关通行证失败(c服务同一时间大量的去请求网关获取通行证,导致网关队列堵塞,处理不过来)
- c服务增加任务失败,无响应
拉取信息超时的原因总结
1.获取网关通行证失败,或者获取不到,为此设置失败重试,直到拿到通行证为止
以上方案导致 网关会莫名其妙的挂掉,后面优化了网关的服务
2.拉取信息失败
原因当视频流不完整的时候体现为糊化,卡顿,由于我们拉取信息的代码逻辑是,不要糊化的视频,所以一旦出现卡顿糊化现象,也就是一秒二十四帧,丢了一帧,我们会全部抛弃之后的所有,知道抓到下一个I帧,也就是所谓的关键帧才会往消息队列里面存,这就导致了,提供服务信息的B平台看到有一点卡顿,而C平台则直接跳好几秒的情况,而一旦超过三秒没有收到数据包,则认为断流,系统将会主动断开连接,重新请求获取通行证,这样主动断开的操作是为了节约内存消耗,让没有拉取到信息的任务不在占用运行空间,给其他任务使用
3.获取网关通行证失败
这个可能原因是网关承受不住那么大的并发访问,导致一直阻塞内存飙升,网关不是我负责的,我也不清楚具体什么原因但是大致是因为并发太大承受不住的问题
4.c服务增加任务失败,无响应
这个问题主要是由第三个问题影响的蝴蝶效应,网关处理不过来,C新加的任务需要请求网关,然后一直在A的等待队列里面,没有任何回应,也没有错误代码,就卡在网关这里了,最后导致C服务也挂掉了
以上问题的排查步骤,都需要去机器上grep一下日志,查看当前点位是什么状态,如果请求成功,还要去work机器上,看看是因为拉取失败,还是真的没有信息,步骤繁琐,还要查询任务分配到集群的那个机器上,排查时间长,效率低,所以考虑不熟elk集群进行监控任务
Elk 部署前提,需要jdk支持
以下默认你已成功安装jdk
Elasticsearch 安装最新版 logstash 最新版 kibana 最新版 (20190407日官网下载最新稳定版本)
首先安装Elasticsearch
这里需要注意几点,Elasticsearch默认不支持root用户运行,需要新建普通用户
1 | 新建用户 |
解压 Elasticsearch
进入 Elasticsearch/conf/Elasticsearch.yml
修改配置文件内容如下
1 | // 设置服务名称 |
剩下的直接拷贝写好的配置文件到其他机器上就可以了
1 | // 批量拷贝配置文件至其他机器的Elasticsearch |
然后到服务机器上安装logstash 解压之后配置文件如下内容
1 | input { |
1 | 步骤同上批量拷贝配置文件至其他服务机器上logstash/conf |
Kibana 直接解压启动,默认配置就可以 , nohup /home/kibana/bin/kibana &
访问IP:5601即可看到数据