golang日志收集方案之ELK

每一个系统都有日志,当系统出现问题时,须要经过日志解决问题
当系统机器比较少时,登录到服务器上查看便可知足
当系统机器规模巨大,登录到机器上查看几乎不现实
固然即便是机器规模不大,一个系统一般也会涉及到多种语言的开发,那么问题来了,每次系统出问题了,如何可以迅速查问题?
好一点的状况多是python应用层查日志发现是系统底层处理异常了,因而又叫C++同事来查,若是C++这边可以迅速定位出错误告知python层这边还好,若是错误好排查,
可能就是各个开发层的都在一块儿查究竟是哪里引发的。固然可能这样说比较笼统,可是却引起了一个问题:

 

当系统出现问题后,如何根据日志迅速的定位问题出在一个应用层?
在日常的工做中如何根据日志分析出一个请求到系统主要在那个应用层耗时较大?
在日常的工做中如何获取一个请求到达系统后在各个层测日志汇总?
针对以上问题,咱们想要实现的一个解决方案是:

 

把机器上的日志实时收集,统一的存储到中心系统
而后再对这些日志创建索引,经过搜索便可以找到对应日志
经过提供界面友好的web界面,经过web便可以完成日志搜索
关于实现这个系统时可能会面临的问题:

 

实时日志量很是大,天天几十亿条(虽然如今咱们公司的系统还没达到这个级别)
日志准实时收集,延迟控制在分钟级别
可以水平可扩展
关于日志收集系统,业界的解决方案是ELK
对于日志来讲,最多见的需求就是收集、存储、查询、展现,开源社区正好有相对应的开源项目:logstash(收集)、elasticsearch(存储+搜索)、kibana(展现),
咱们将这三个组合起来的技术称之为ELKStack,因此说ELKStack指的是Elasticsearch、Logstash、Kibana技术栈的结合,由这三个软件及其相关的组件能够打造大规模日志实时处理系统。
 
实际使用中,在Logstash上加了一层Beat,
Beats是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并未来自成百上千台机器的数据发送到Logstash或Elasticsearch。
(画外音:通俗地理解,就是采集数据,并上报到Logstash或Elasticsearch)
 
elasticsearch下载地址:https://www.elastic.co/downloads/elasticsearch
logstash下载地址:https://www.elastic.co/downloads/logstash
kibana下载地址:https://www.elastic.co/downloads/kibana
filebeat下载地址:https://www.elastic.co/products/beats/filebeat
 
也可直接docker安装ELK镜像

docker run -p 5313:5044 -p 5314:5601 -p 5315:9200 -p 5316:9300 \
-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \
-e ES_MAX_MEM=1024m \
-v /elk:/var/lib/elasticsearch -d -i -t --restart always --name=elk01 sebp/elkpython

我在项目中用uber的zap处理日志,而后用filebeat转发至logstash,数据存储在es,最后展现在kibana。web

相关文章
相关标签/搜索