至此,我们可以看到,在写入的过程中,ES的性能主要merge、flush、reflush,还有translog的flush的阶段被消耗。了解到这个过程,我们就可以参照ES的官方文档,去对相应的各个阶段进行调优。当然首先要知道企业的性能状态,如果IO有问题就调merge,如果CPU的问题可以考虑在reflush方面做调整。
然后就是调优的方向,merge官方默认参数是按照SSD的磁盘来做的调优,实际它是不太适合机械磁盘这种服务的。因此,我建议如果涉及到IO问题,可以考虑把merge的进程数调低。在数据写入特别大时,采取网络限流。在内核层面,ES配置文件里含有了一些系统提供的很好的参数。
◆Rsyslog的调优
如图所示,这是Rsyslog一个内部队列,Rsyslog的内部也是比较复杂的。首先是input的这个进程,接着是预处理的阶段,比如它会进行一些分类,把你的某一个日志tag按照一个什么分类写到一个什么地方。再往后就是filter Engine,在这之前会有一个Queue,就是说这个数据在内部会维护一个队列,然后Filter到这个队列里主动拉取数据。后面是Action processor,它在前面也有每一个事件的队列,Action的进程会从相应的队列当中写数据。这就是的内部的结构。
Rsyslog主要有Main queue和Action queue两种类型的队列,四种队列设置,分别是:Direct queue、Disk queue、In-memory queue(LinkedList、FixdArray)、Disk-assisted memory queue。
总结
日志量就是成本,所以不要以花了多少钱而自豪,而是要以做了多少事作为目标。要传输有价值的数据!要多注意业务优化。此外,一定要记住:选择哪一种架构由具体的场景决定,不要过度设计,但要尽量快速迭代。
【讲师简介】
于炳哲,现就职于新浪微博-手机微博移动服务保障部,任系统开发工程师,负责手机微博服务端和客户端的日志收集、传输等工作,以及目前新浪网&新浪微博最大的Elasticsearch集群的维护与相关中间件的开发维护工作。主要专注于日志相关技术,关注日志处理,传输,存储;等相关领域,对大规模数据量下的日志治理有一定的经验。曾就职于北京问日科技(365日历)从事Java服务端开发和日志处理,运维监控报警等相关工作。
本文由于炳哲于2016年8月,在WOT2016移动互联网技术峰会运维与安全专场《日志漫谈-不同规模下的日志运维与优化》主题演讲整理而成。WOT2016大数据峰会将 于2016年11月25-26日在北京粤财JW万豪酒店召开,届时,数十位大数据领域一线专家、数据技术先行者将齐聚现场,在围绕机器学习、实时计算、系统架构、NoSQL技术实践等前沿技术话题展开深度交流和沟通探讨的同时,分享大数据领域最新实践和最热门的行业应用。了解WOT2016大数据技术峰会更多信息,请登陆大会官网:http://wot.51cto.com/2016bigdata/
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】