前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何优雅的使用ELK构建日志中心

如何优雅的使用ELK构建日志中心

作者头像
黑洞代码
发布2021-01-14 16:30:31
1K0
发布2021-01-14 16:30:31
举报

一、需求分析

还在记复杂的Linux命令?还在为查询线上日志而苦恼?还觉得会操作Linux是个很牛X的技能?

随着中国互联网技术的发展,分布式系统复杂度越来越高,系统日志也越来越多,伴随着对日志的开发和运维成本也就随之上升。

如何优雅的解决日志的问题是各大互联网公司头疼的问题。

如何让系统日志充分地产生价值,成为一个亟待解决的问题。

二、在没有日志中心的日子里

这里举个反面教材,看下在没有日志中心的情况下,开发和运维的成本是怎样的。

场景分析:

没有日志中心,那就只能操作服务器呗。看上去讲究一些也没什么大问题。

总结一下直接操作服务器的缺点:

·界面不美观

·日志零散不易操作

·不易维护

·大日志文件需要切割

·LogView查看大文件

·效率低下

在大润发工作的时候,遇到周年庆(10.11,官网:http://www.feiniu.com/)

1.Linux服务器上的日志做了分隔

2.已知日志量会很大,按小时对日志做分隔

3.项目:购物车(cart-fn)

4.高峰期故障无法处理(11:00-3:00)

5.通过FTP把日志下载下来,用LogView打开(20mins左右),搜索日志

6.还有更坑的,搜索项目(search-fn),基本上没办法查日志。(毕竟大家在网购的时候,大部分的时间都是在搜索,对比各个商品的性价比,所以搜索的日志一直是最多的)

7.大促一天也就150多万订单,处理起来就这么复杂!!!如果是淘宝京东这样量级,怎么办???

以上场景,因为没有有效的日志解决方案,基本上无法做到实时的问题定位,只能靠QA做测试,模拟各种场景,造出用户投诉的场景。大部分的bug都无法解决,是在不行了,只能告诉大润发的地推人员,直接从超市提货吧,线上系统搞不定~ ~ ~ (记得有个bug更可怕的是,线下大润发超市提货,直接因为系统原因导致没有付款,就把冰箱洗衣机领走了,产品同学找小编,说是小编的问题,小编理都不理他,装作没听见,因为没有日志,产品不能证明是小编的锅。最后产品同学和小编的leader各赔付了一半的金额)

三、海量日志的存储、收集、可视化的解决方案

本文将对现在互联网上盛行的分布式系统日志解决方案进行解密,构建一个简单的日志系统,并用实例证明我们的架构在互联网大厂的可行性。

ELK实时日志分析平台环境部署

术语表:

  1. E :Elasticsearch 是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
  2. L : Logstash 是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
  3. K : Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志

来看一下Elastic官网提供的“日志三剑客”

(1)安装Elasticsearch

tar -xzvfelasticsearch-6.3.0.tar.gz

·得到的解压目录下的文件有如下:

·Elasticsearch启动:

进入解压后的目录,执行:./bin/elasticsearch

·PS:启动后,终端上不能执行其他任何命令了?

·让程序后台执行:nohup./bin/elasticsearch&

·验证启动:curl:localhost:9200 或者在浏览器中输入http://localhost:9200

(2)安装Logstash

·解压文件:tar-xzvflogstash-6.3.0.tar.gz

·到config目录中新建一个logstash.conf配置

·配置input,output模块, 其中input是收集日志的模块,output配置导入讲日志导入到Elasticsearch

· filter是一个过滤函数,可以不配置(比如隐藏用户隐私数据:手机号)

conf/logstash.conf配置如下:

input{

tcp {

host => "127.0.0.1"

port => 4560

}

}

output{

elasticsearch {

hosts => "127.0.0.1"

index => "log-%{+YYYY.MM.dd}"

}

}

input:logstash输入源

output:logstash输出目的地

验证启动:http://localhost:9600/

(3)安装Kibana

·解压

·进入config目录,修改kibana.yml,新增如下配置项:

elasticsearch.url: "http://localhost:9200"

server.host: 127.0.0.1

·启动kibana服务:nohup./kibana&

·验证服务启动: http://127.0.0.1:5601/

(4)启动Java项目,通过Log4j2输出日志

log4j2配置如下:

<?xmlversion="1.0"encoding="UTF-8"?> <Configuration> <Appenders> <Consolename="Console"target="SYSTEM_OUT"> <PatternLayoutpattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> <!--输出日志到远程port:4560,logstash在port:4560接收数据--> <Socketname="LogStash"host="127.0.0.1"port="4560"> <JsonLayoutcompact="true"eventEol="true"/> </Socket> </Appenders> <Loggers> <Rootlevel="debug"> <AppenderRefref="Console"/> <AppenderRefref="LogStash"/> </Root> </Loggers> </Configuration>

Java测试代码如下:

publicclassElkLoggerDemo { privatestaticfinalLoggerlogger=LoggerFactory.getLogger(ElkLoggerDemo.class); publicstaticvoidmain(String[]args){ for(inti= 0; i< 10; i++){ logger.info("输出info,i={}", i); logger.debug("输出debug,i={}", i); logger.error("输出error,i={}", i); } } }

至此准备工作全部搞定,下面就可以用通过运行我们上面的Java代码,测试一下我们简易版的日志中心的功能了。

观察Kibana上的信息:

可以发现,Kibana可以自动发现Elasticsearch中新增的索引

创建Index Pattern

搞定以上步骤以后,就可以再Kibana上搜索日志信息了,就可以告别Linux用命令行搜索日志了。

可以发现,在搜索框中输入的关键词,被命中后,都高亮显示了,更便于开发运维人员快速定位到问题。

简单总结一下我们的ELK架构:

我们只是简单的通过application server将日志通过log4j2输出到logstash中,logstash直接保存到了Elasticsearch,然后Kibana提供页面展示。

网上常见的ELK的架构如下

而真正在大厂日志中心的架构又是怎样的呢?

咨询过美团,阿里大神,大厂的日志中心架构大致类似上图。通过kafka的高吞吐量提高分布式系统日志输出效率。

------------华丽的分割线------------

感谢各位道友宝贵的时间阅读完本文

欢迎留言转发,一起探讨各种黑科技

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 落叶飞翔的蜗牛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档