ELK环境搭建指南

之前的日志收集工作一直由前端完成,前端通过数据埋点将数据上传友盟,但是这种方式无法针对用户访问轨迹进行分析,为了满足对用户行为轨迹进行分析,决定通过后端增加数据埋点的方式来手机日志。

后端原先就有记录日志,不过由于每个开发人员开发习惯不同,对于日志记录格式也有差异。因此第一步要做的不是去搭建ELK,而是要先规范日志格式,在必要节点增加数据埋点(要知道ELK也不是万能的,它无法感知我们的日志格式,因此需要我们告诉他们我们的日志格式,所以就需要我们能够统一日志格式)。

既然都已经开始考虑搭建ELK,那一定知道了什么是ELK,这里就不在叙述,直接上图。
ELK框架
现在开始搭建
首先说明下安装环境,我采用的是elk7.8.0,es安装在centos7环境上,filebeat/logstash/kibana安装在window环境上。安装包下载
在这里插入图片描述
安装包下载完后,开始安装环境
1.es安装指南

2.Kibana安装指南
kibana安装好后,需要到config下修改kibana.yml

  • 修改外部访问端口(可不修改):server.port
  • 根据自己的情况修改es路径:elasticsearch.hosts
  • 国际化:i18n.locale: “zh-CN”
    以上修改完成后,到bin目录下运行kibana.bat,然后访问上述访问端口即可

3.filebeat安装指南
filebeat安装好后,需要到根目录下修改filebeat.yml

  • 开启input,将filebeat.inputs下的enabled修改为true
  • 指定需要监听的日志文件路径,filebeat.inputs下paths
  • 大部分的日志都是一行,但是也会出现一个日志多行的情况,比如异常日志。但是filebeat默认是一行一条日志,这就会导致异常日志被拆分成多条日志,不利于日志分析。还好filebeat提供了配置,运行我们自行指定日志分行策略。我们可以通过multiline.pattern选项指定日志开头,也就是说filebeat只有遇到匹配这个pattern的文本,才会重新换行,另外还有multiline.negate/multiline.match两个配置项用来指定拼接方式。
  • 开启output.logstash,filebeat提供了两个output,一个是es(默认开启),一个是logstash。我们在上图中说过logstash能够对日志文本进行处理,因此这里并不建议直接将日志文本直接输出到es,而是应该通过logstash进行一下清洗,然后在输出到es,这样才有利于我们查询、分析。因此这里我选择的是关闭es,开启logstash,然后配置filebeat与logstash之间的通信渠道hosts,这样filebeat就能将监听到的日志串传输给logstash。

4.logstash安装指南
logstash安装好后,在config目录下新建logstash.conf文件,然后在这个文件中进行配置。

  • 首先配置input,我们知道logstash的数据源是filebeat通过hosts传输过来的,因此这里对于input的配置时要参考filebeat中hosts的配置
  • 然后配置filter(可选),为什么说filter是可选的呢,因为filter的主要任务是对数据进行清洗,所以如果不想对数据进行清洗,可以忽略这步(甚至不需要logstash,直接在filebeat中将output指向es即可)。filter为我们提供很多强大的组件帮助我们清洗数据,这里我选择的是grok、date、mutate三个组件。首先说下grok正则捕获(开头我就说过这一切的前提是我们的日志格式要统一,如果日志格式不统一,那么grok就无法通过正则匹配我们日志中的各个字段),通过指定正则表达式,grok可以帮我们把日志串转化为json(Kibana下的Dev Tools提供了 grok debugger,通过这个工具我们可以测试自己的正则表达式)
    在这里插入图片描述
    通过上图可以看到grok已经把我们的日志串转化成了json;接下来说下date,由于es的时间格式问题,导致日志时间和真实时间会出现八小时的时差,并且导入es时默认会自带一个@timestamp字段,并且Kibana会根据这个字段进行排序,但是这个字段是日志存储到es的时间,而不是日志记录的时间,因此我们需要覆盖这个字段,date组件能够帮我们转换时区,并覆盖@timestamp字段;最后是mutate,上面说了存储到es时会自动带上@timestamp字段,其实自动携带的不止是@timestamp字段,还有很多其他的字段,如果感觉这些字段没有什么用处,可以通过mutate把这些字段删除,不让他们存储到es。
  • 通过上述filter处理,已经得到了我们想要的数据结构,接下来就可以把数据存储到es中,因此我们需要配置output,对于output的配置我会在后面单独说明。

logstash配置output
我们知道经过filter的清洗,我们已经拿到了我们想要的数据结构,剩下的就是把这些数据存储到es中,但是在存储到es时我们又面临另外一个问题:索引模板。我们如果存储我们的各个字段?我们是否想通过某些字段对日志进行聚合查询?如果存储这些字段能够更方便我们的查询?
这里我结合自己的应用说下,首先我们想要做的是用户行为轨迹的追踪,目前系统每天产生几十万条日志记录,也就是说我需要通过用户唯一标识从几十万、甚至数百万(跨天日志)的数据中检索出我想要的数据,如果我不对这个字段做索引,那么可以想象即使是全文索引去做这种查询也是够吃力的。因此索引模板的制作需要结合自身的实际业务。下面我说下我制作模板的过程。

  • 在Kibnana下的索引管理模块,根据自己的业务制作索引模板
    在这里插入图片描述
  • 在logstash的output下的es配置时,指定本次导入使用的index名称。由于我在上一步制作索引模板时填写索引模式为mall-*,因此只要是mall-开头的index都能够匹配到这个索引模板,然后就能被es安装这个索引模板进行解析存储。
  • 待数据导入到es后,我们需要在Kibana下的索引模式模块新建一个索引模式,新建的索引模式名称就和logstash中的index保持一致即可。然后就可以在Kibana下的Discover模块下根据索引模式查询我们导入的数据(下图的索引模式中针对mall-uc的日志有两种索引模式,一种是按天命名,一种是通配符结尾,其中如果用户只想查询某一天的日志可以选择按天命名的索引模式,如果想要跨天查询可以选择通配符结尾的索引模式)
    在这里插入图片描述

在这里插入图片描述
至此,我们已经把应用服务产生的日志导入es,并在Kibana中能够借助图形界面去查询,分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值