线上日志故障

/ 杂乱有章 / 没有评论 / 0浏览

线上问题

线上的微服务,按照业务拆分大约20+微服务,每个业务分api、manage、mq模块,每个模块都会向logstash输入大量日志(线上开启info),当时采用 net.logstash.logback.appender.LogstashTcpSocketAppender 作为日志输出源,其实现采用socket传输,大量的创建销毁造,消耗系统资源比较大,运行时占用CPU和内存资源较高,由于没有消息队列缓存,导致日志阻塞,服务稳定性很差。

方案1. kafka(采用)

为保证日志传输数据的可靠性和稳定性,引入Kafka作为消息缓冲队列,各个节点上的Logstash Agent(一级Logstash,主要用来传输数据)先将数据传递给消息队列,接着,Logstash server(二级Logstash,主要用来拉取消息队列数据,过滤并分析数据)将格式化的数据传递给Elasticsearch进行存储。最后,由Kibana将日志和数据呈现给用户。由于引入了Kafka缓冲机制,即使Logstash server因故障停止运行,数据也不会丢失,可靠性得到了大大的提升。

上线后压测

方案2. filebeat

将微服务日志存储指定目录,在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。


效果展示