记一次ES日志系统的接入

Posted 架构师学习路线

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次ES日志系统的接入相关的知识,希望对你有一定的参考价值。


0 - 前言

近期接了一个新项目,某部门的日志要从HDFS迁移到ES中,每天15T,保留15天,每天有150亿条数据写入,这对于我们现有集群吞吐量是一个很大的挑战。


1 - 现状

目前默认ES集群采用3 master、3 data的结构。数据节点服务器:

CPU: 24 核、Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHzMEM:128GDisk: Intel 4510 * 4 单盘挂载

默认集群可承载25w/s的请求,index速度可以达到120w/s,吞吐量最大可到25MB/s。如果每天有150亿的写入,QPS在20w左右,默认的集群配置可以接受,但是,问题出在了Logstash上。

我们的离线日志接入流程是:
Log file -> Flume -> Kafka -> Logstash -> ES
我们使用40 Cores Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz的机器来做Logstash节点(内存> 64G),发现消费速度仅为1w/s,仅是实际值的5%。
于是,我们调整Logstash配置,加大pipeline参数:
pipeline.workers: 40pipeline.batch.size: 500pipeline.batch.delay: 10
此时,写入量达到了2w/s,但还是不够。 接下来,我们只好通过水平扩展Logstash节点来增加吞吐量,结果还是比较喜人的,机器数量和吞吐量呈线性增长。 但是耗费的机器数量也是巨大的,常态需要10台左右,为防止业务激增,需要准备至少20台服务器。 用这么多机器来做一个离线日志系统,显然不太合理。
于是,机器不够,人工来凑,我们开始对ES集群进行针对性优化。
  1. 日志数据允许丢失,我们关掉了副本,只保留主分片;
  2. 为了增加吞吐量,刷新间隔增加到了100s;
  3. 为了降低translog占用的资源,增大了缓存的日志大小、调整了刷新间隔和方法;

具体索引配置如下:
"index.refresh_interval":"100s","number_of_replicas": 0,"translog.flush_threshold_size": "1024mb","translog.sync_interval": "100s","translog.durability": "async","merge.scheduler.max_thread_count": "1","merge.policy.max_merged_segment": "2gb"
经过一番折腾,耗费的服务器减少了一半,吞吐量增加了30%。


原文:https://www.jianshu.com/p/03512da5aa19?utm_campaign=hugo

记一次ES日志系统的接入
记一次ES日志系统的接入
想要获取学习实战、高并发、架构 、笔试面试资料
请扫码咨询+薇薇微信

以上是关于记一次ES日志系统的接入的主要内容,如果未能解决你的问题,请参考以下文章

记一次ES 事故

记一次ES 事故

记一次某应用虚拟化系统远程代码执行

记一次线上环境 ES 主分片为分配故障

记一次创建LVM的日志记录

记一次生产环境Nginx日志骤增的问题排查过程