今天压了一下日志接口,发现只有大概400qps,其中一定有环节出现性能瓶颈,一个字 查~
接口服务使用openresty写的,服务本身不存在吞吐量瓶颈,应该是elk的配置问题。
elk环节比较长filebeat->logstash->es
,如何找到哪个环节存在瓶颈?
首先查看es的线程池信息,reject数为0,故es不存在瓶颈
filebeat只是简单读取文件并发送数据,应该也不存在问题,那么重点就在logstash
打开logstash配置文件,发现logstash中存在stdout {codec=>rubydebug}
,该语句表示将过滤内容输出到标准输出,通常是调试时使用的,我们将该语句去除后,吞吐量增长至4500左右。此时吞吐量已经比较接近openresty接口的qps,暂时算是满足需求了。
如何进一步提高吞吐量?
- 横向扩展openresty接口
- 部署多logstash,实现负载均衡(filebeat支持)
- 当前情况是logstash与es同机部署,该机器在压测试,cpu占用率远超100%,将logstash与es拆开部署可进一步提升性能
- es集群化
- es使用ssd
- 大数据量时从按天划分索引改为按小时
- 优化logstash的grok,尽可能少的采用DATA
|
|