搭建elk


elk是一种追踪日志的工具,由filebeat+logstash+elasticsearch+kibana组成,其中,filebeat负责数据的收集,logstash负责数据的过滤和中转,elasticsearch负责数据存储和索引,kibana负责数据的展示和监控,这四款开源软件的完美契合造就了elk这个日志系统。

ELK架构图:

架构图一:

这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。

此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。

架构图二:

此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

架构图三:

此种架构将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

Filebeat工作原理:

Filebeat由两个主要组件组成:prospectors 和 harvesters。这两个组件协同工作将文件变动发送到指定的输出中。

我们公司搭建的属于第三种架构,首先在线上服务器搭建filebeat(本来也是将logstash放到线上服务器的,但是由于那个机器配置比较低,跑logstash的时候导致内存爆炸,所以后面就将logstash放到了一个集群上),然后将数据传输到服务器集群上的logstash,再由logstash将日志过滤,因为输出的是nginx日志,所以过滤的日志格式也是严格要求按照nginx上的字段来切割的,而后将日志输出到es集群进行存储,最后在kibana建立查询索引,用于数据的查询和监控,至此,一套完整的elk系统就搭建完成了。

  搭建过程中出现了两个问题导致搭建的过程中断:

  1)aliyun的VPS端口未打开,所以导致刚开始的filebeat跟logstash一直打不通(当时测试的是在同一台机器上是可以打通的,但是在两台机器上就打不通了),后面让有权限的好哥哥把端口访问权限放开,这个问题就迎刃而解了。

  2)由于马虎导致的logstash跟es打不通,同样测试的在一台机器上也是可以打通的,当时在网上查了又查都没有找到解决方法,后来通过打印发现数据是可以传到logstash,因为在控制台输出是有数据的,而且数据正确,后面就再次检查logstash的配置文件,终于在配置output的地方发现了问题,这是当时出错的格式:,正确的格式应该是:,修改之后,因为少了一个elasticsearch,你不跟他说他肯定是不知道数据要输出到es的,这个地方是因为马虎而出现的问题,修改之后,logstash跟es就打通了,后面就是在kibana上创建所以,可以清晰的看到filebeat收集的数据展示了出来,到此,elk就算是搭建完成了。