利用开源架构ELK构建分布式日志系统

Posted hadoop123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用开源架构ELK构建分布式日志系统相关的知识,希望对你有一定的参考价值。

点击hadoop123关注我哟

最知名的hadoop/spark大数据技术分享基地,分享hadoop/spark技术内幕hadoop/spark最新技术进展hadoop/spark行业技术应用发布hadoop/spark相关职位和求职信息hadoop/spark技术交流聚会讲座以及会议等。

利用开源架构ELK构建分布式日志系统

本文介绍了如何使用成熟的经典架构ELK(即Elastic search,Logstash和Kibana)构建分布式日志监控系统,很多公司采用该架构构建分布式日志系统,包括新浪微博,freewheel,畅捷通等。

利用开源架构ELK构建分布式日志系统

背景

日志,对每个系统来说,都是很重要,又很容易被忽视的部分。日志里记录了程序执行的关键信息,ERROR和WARNING信息等等。我们可以根据日志做很多事情,做数据分析,系统监控,排查问题等等 。但是,任何一个中大型系统都不可能是单台Server,日志文件散落在几十台甚至成千上万台Server上,这给基于日志的数据分析、问题排查都带来了很大困难。

Centralized Logging

利用开源架构ELK构建分布式日志系统

ELK

集中式日志存储(Centralized Logging)的概念应运而生,将产生在各台Server上的日志统一收集到一个日志平台中。ELK就是专门做这个事情的。ELK是Elasticsearch(以下简写为ES)+Logstash+Kibana的简称。ES负责数据的存储和索引,Logstash负责数据的调整、过滤、传输,Kibana负责数据的展示。


Ealsticsearch

首先说ES,它是一个基于Lucene的优秀的存储引擎,我们也可以把它看做一个PB级别的NoSQL DB。支持CRUD,多字段查询,Aggreagation,全文检索,可以说涵盖了各种各样的查询需求。 它自带了Replication和Sharding的功能,通过简单的配置就可以做数据复制和分片。并且,ES在NRT(Near Real Time)方面做了一些优化,使得应用在实时性方面有很好的表现。


Logstash

Logstash是一个非常灵活的数据处理和传输工具。我们可以不再需要自己写一堆wget, scp, Socket代码,来传输我们的数据。Logstash统一实现了每一环节的数据传输,我们只需要关注数据处理的逻辑。 我们也不再需要去学习各种各样的API,去发现如何得到数据(例如tail -f),如何写入数据(例如写入ES或MongoDB)。Logstash预置了一堆input & output plugin,通过配置就可以实现实时增量数据的流出和流入。例如我们用到的file input 和ES output 都已经有了。


Kibana

Kibana是一个强大的数据展示工具。大多数情况下,不需要开发任何代码,就可以得到一个Dashboard。

需要做的是:

(1)把数据放到ES中

(2)是在Kibana页面上配置报表模版,或按照规则写一套报表模版。

Architecture

利用开源架构ELK构建分布式日志系统

FreeWheel - UI - Log Platform Architecture


上图是日志系统的架构图。我们的数据源是四个模块的日志文件,通过Logstash将数据实时导入到MQ中,再从MQ把数据实时导入到ES中。

使用MQ的目的是:

(1)减小峰值压力

(2)对实时数据做处理,避免这个处理放在应用Server,造成对应用的负担。

同时,根据MQ中的数据做规则匹配,会触发相应的Alert。其中如果发现是Error信息,会存到Jira中,用于问题记录、派发和追踪。Error如何存到Jira中有一些策略来控制,包括Error判重,已修复Bug又再次Alert,等等 。小时级、天级别的Alert通过一个后台调度的任务框架直接和ES交互。

ES结合了Hadoop Plugin,通过Hadoop2做Map Reduce的计算。


利用开源架构ELK构建分布式日志系统

FreeWheel - UI - Dashboard of Throughput & Response time

(Hidden Y-axis data and query criteria)

最后就是Kibana,通过读取ES数据,来提供报表展示。我们现在是Kibana3&4混用,主要是使用Kibana3,并在Kibana3基础之上开发了一些Plugin。例如Menu,可选时区的Datepicker等。Kibana4刚刚发布没多久,并不是十分完善,所以我们还没有完全切换到4上。目前有一个报表是使用Kibana4开发的,用到了4提供的新功能,例如Percentile的Aggregation,多级Aggregation等。

日志平台应用

利用开源架构ELK构建分布式日志系统

FreeWheel - Application on Log Platform

在前边我们也提到一些了,有了这个日志平台的数据之后,我们可以做很多事情。

(1)日志查询、问题排查、上线检查

(2)服务器监控,应用监控,错误报警,Bug管理

(3)性能分析,用户行为分析

总结

日志平台上线后,解决了很多原有的问题,它的重要性越来越强,未来我们的计划如下:

(1)更灵活的报表。Kibana解决了基础的报表需求,但不能实现逻辑复杂的报表。考虑扩展Kibana,支持定制化图表+Kibana混合而成的Dashboard。

(2)更强大的报警。参考或结合Watcher,Zabbix等,实现更强大更易用的报警配置。

利用开源架构ELK构建分布式日志系统

作者简介:柳桐,2011年毕业于毕业于北京邮电大学,获工学硕士学位。2011-2014年就职于百度联盟。2014年加入FreeWheel,任UI Foundation组资深工程师,主要负责UI的基础架构工作,包括日志平台,搜索平台,性能优化等。



以上是关于利用开源架构ELK构建分布式日志系统的主要内容,如果未能解决你的问题,请参考以下文章

67-日志分析系统ELK-ELK架构简述

ELK+kafka构建日志收集系统之环境安装

ELK+kafka构建日志收集系统之环境安装

ELK企业级日志分析系统

分布式文件系统和企业级应用——ELK企业级日志分析系统

开源组件ELK日志系统配置与管理