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

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

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

Centralized Logging

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

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的计算。

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等。

日志平台应用

FreeWheel - Application on Log Platform
在前边我们也提到一些了,有了这个日志平台的数据之后,我们可以做很多事情。
(1)日志查询、问题排查、上线检查
(2)服务器监控,应用监控,错误报警,Bug管理
(3)性能分析,用户行为分析

总结
日志平台上线后,解决了很多原有的问题,它的重要性越来越强,未来我们的计划如下:
(1)更灵活的报表。Kibana解决了基础的报表需求,但不能实现逻辑复杂的报表。考虑扩展Kibana,支持定制化图表+Kibana混合而成的Dashboard。
(2)更强大的报警。参考或结合Watcher,Zabbix等,实现更强大更易用的报警配置。

时间: 2024-10-10 12:57:04

利用开源架构ELK构建分布式日志系统的相关文章

HAProxy + Keepalived + Flume 构建高性能高可用分布式日志系统

一.HAProxy简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理. HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. 二.Keepalived简介 它是一个基于VRRP协议来实现的WEB服务高可用方案,

JavaWeb项目架构之Kafka分布式日志队列

架构.分布式.日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了. kafka介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 特性 Kafka是一种高吞

SpringBoot开发案例从0到1构建分布式秒杀系统

前言 最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场景,同时跟大家分享交流一下. 秒杀场景 秒杀场景无非就是多个用户在同时抢购一件或者多件商品,专用词汇就是所谓的高并发.现实中经常被大家喜闻乐见的场景,一群大妈抢购打折鸡蛋的画面一定不会陌生,如此场面让服务员大姐很无奈,赶上不要钱了. 业务特点 瞬间高并发.电脑旁边的小哥哥.小姐姐们如超市哄抢的大妈一般

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统 Elasticsearch 官方网站 Elasticsearch文档 NLog.Targets.ElasticSearch   package Elasticsearch - 简介 Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据. 它使用 Java 编写,基于 Apache Lucene,尽管这些细节隐藏在

从构建分布式秒杀系统聊聊Lock锁使用中的坑

前言 在单体架构的秒杀活动中,为了减轻DB层的压力,这里我们采用了Lock锁来实现秒杀用户排队抢购.然而很不幸的是尽管使用了锁,但是测试过程中仍然会超卖,执行了N多次发现依然有问题.输出一下代码吧,可能大家看的比较真切: @Service("seckillService") public class SeckillServiceImpl implements ISeckillService { /** * 思考:为什么不用synchronized * service 默认是单例的,并发

从构建分布式秒杀系统聊聊限流的多种实现

前言 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的.两周前秒杀案例初步成型,分享到了中国最大的同×××友网站-码云.同时也收到了不少小伙伴的建议和投诉.我从不认为分布式.集群.秒杀这些就应该是大厂的专利,在互联网的今天无论什么时候都要时刻武装自己,只有这样,也许你的春天就在明天. 在开发秒杀系统案例的过程中,前面主要分享了队列.缓存.锁和分布式锁以及静态化等等.缓存的目的是为了提升系统访问速度和增强系统的处理能力:分布式锁解决了集群下数据的安全一致性问题:静态化无疑

从构建分布式秒杀系统聊聊限流特技

前言 俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的.两周前秒杀案例初步成型,分享到了中国最大的同性交友网站-码云.同时也收到了不少小伙伴的建议和投诉.我从不认为分布式.集群.秒杀这些就应该是大厂的专利,在互联网的今天无论什么时候都要时刻武装自己,只有这样,也许你的春天就在明天. 在开发秒杀系统案例的过程中,前面主要分享了队列.缓存.锁和分布式锁以及静态化等等.缓存的目的是为了提升系统访问速度和增强系统的处理能力:分布式锁解决了集群下数据的安全一致性问题:静态化无疑是

从构建分布式秒杀系统聊聊分布式锁

前言 最近懒成一坨屎,学不动系列一波接一波,大多还都是底层原理相关的.上周末抽时间重读了周志明大湿的 JVM 高效并发部分,每读一遍都有不同的感悟.路漫漫,借此,把前段时间搞着玩的秒杀案例中的分布式锁深入了解一下. 案例介绍 在尝试了解分布式锁之前,大家可以想象一下,什么场景下会使用分布式锁? 单机应用架构中,秒杀案例使用ReentrantLcok或者synchronized来达到秒杀商品互斥的目的.然而在分布式系统中,会存在多台机器并行去实现同一个功能.也就是说,在多进程中,如果还使用以上JD

教你一步搭建Flume分布式日志系统

在前篇几十条业务线日志系统如何收集处理?中已经介绍了Flume的众多应用场景,那此篇中先介绍如何搭建单机版日志系统. 环境 CentOS7.0 Java1.8 下载 官网下载 http://flume.apache.org/download.html 当前最新版  apache-flume-1.7.0-bin.tar.gz 下载后上传到CentOS中的/usr/local/ 文件夹中,并解压到当前文件中重命名为flume170    /usr/local/flume170 tar -zxvf a