三台4cpu/8G 的机器做了es集群,通过filebeat采集数据发送到graylog,再存到es集群中。
es集群每秒最高写入docs也就1.5K/S,数据都堆积在graylog中来不及存进去。
查看几台es机器的信息,jvm按照官方推荐设置为4g,虚拟内存关闭
cpu:空闲90%以上,ram空闲3g左右(包含buffers),IO 2.5M/S。
全部是idc的机房里的机器,应该都是千兆网络。
那么问题来了,为啥es没把任何一项机器资源吃满?
我读取性能差点无所谓,主要是想解决日志搜集高峰期的性能问题。
请问各位大佬有啥思路?
es集群每秒最高写入docs也就1.5K/S,数据都堆积在graylog中来不及存进去。
查看几台es机器的信息,jvm按照官方推荐设置为4g,虚拟内存关闭
cpu:空闲90%以上,ram空闲3g左右(包含buffers),IO 2.5M/S。
全部是idc的机房里的机器,应该都是千兆网络。
那么问题来了,为啥es没把任何一项机器资源吃满?
我读取性能差点无所谓,主要是想解决日志搜集高峰期的性能问题。
请问各位大佬有啥思路?
6 个回复
hellboy
赞同来自:
为了提高写入性能,一下方案供你选择:
1、考虑将副本设为0,等数据写完再改成1,前提是对数据可靠性不是要求很高的情况下可以考虑。
2、调整refresh间隔,默认是1s,生产环境下,可以设为60S往上,反正你对数据的实时性读取不敏感。同时还要注意indexbuffer的大小,默认是48M,可以在yml文件中静态配置往高调。
3、降低translog落盘频率,默认是每个请求都要落盘的,可以修改为异步写入,index.translog.durability:async,和index.translog.sync_interval:60s (注意,如果集群在一分钟钟内重启,会丢失数据,所以慎重选择)还有就是 index.translog.flush_throshod_size:521Mb 超过该值触发flush。
pony_maggie - 公众号:犀牛饲养员的技术笔记
赞同来自:
1. batch写入,而不是单个文档写入
2. 索引的mapping不要太大,不需要的字段不用写
JingSQ - 招聘Elasticsearch内核研发工程师
赞同来自:
等等等。
taoyang987
赞同来自:
问题排查方向完全错掉了.
被graylog的outpubuffer数据显示给误导了.
taoyang987
赞同来自:
随便贴两条http_logs和graylog写入的数据.
一个字符数约150 ,一个约1400,同样一条消息,字符量相差10倍,这么看起来差不多是极限了.观察es节点服务器,貌似是io性能快到极限了.
匿名用户
赞同来自: