之前写过一篇博客是关于记录日志的简单方式的 主要就是 应用->redis->logstash->elasticsearch 整个流程的配置方法和过程的
https://www.cnblogs.com/zhyg/p/6994314.html
记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引
虽然我们部分线上应用使用 redis单节点 logstash 也是使用单节点基本稳定流畅并且几乎不丢日志(单节点问题就不说了肯定有单点故障之后在分析)
上面的两个单节点 一天承受1-3亿条日志是没有问题的前提是并发量不要太大
可是 可是 tmd我今天就遇到了
主要分享一下解决方案
本方案同样是两个单节点
先说下今天发生的北京情况
我们的业务服务有些挤压这个时候我们把处理节点线程加多 来处理更大的量可怕的是记录日志的并发量也随之加大导致单节点redis承受不了
我最先想到的方案是重启删除aof日志 让redis不在加载日志话存日志节省内存空间,但是试了几次之后不行 并发量导致写日志实在太大一会又受不了
然后在想就是 限制内存 但是同样不能满足 因为redis 向下传输的时候如果下游不能接受 会缓存到aof日志里面同样会吃满内存加载aof日志的
随后就限制内存取消redis写aof日志然后重启redis ,这样果然可以 没问题虽然有可能丢失一些日志但是日志我是允许一部分丢失的
优化后的redis占用内存明显下降
之前内存可是沾满服务器的内存的 (redis我是用docker部署的)
但是随之而来的是另外一个问题
虽然吧redis压力降下来了但是 logstash压力上来了
logstash直接给我报内存溢出
我去 我一看 logstash才给了1G内存
没办法 调整一下logstash内存
调整 jvm.options 文件内存为2g
现在运行平稳 非常快
但是出问题就会丢些相关日志
希望大家出现类似现象有相关的处理思路