问题导读

1、ELK产生的背景?
2、ELK的基本组成模块以及各个模块的作用?
3、ELK的使用总计有哪些?

背景

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

Centralized Logging

集中式日志存储(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 <ignore_js_op>

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

<ignore_js_op>

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等,实现更强大更易用的报警配置。

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

  1. ELK +Nlog 分布式日志系统的搭建 For Windows

    前言 我们为啥需要全文搜索 首先,我们来列举一下关系型数据库中的几种模糊查询 MySql : 一般情况下LIKE 模糊查询  SELECT * FROM `LhzxUsers` WHERE UserN ...

  2. ASP.NET Core分布式日志系统ELK实战演练

    一.ELK简介  ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台. •  Elastics ...

  3. 从构建分布式秒杀系统聊聊验证码 给大家推荐8个SpringBoot精选项目

    前言 为了拦截大部分请求,秒杀案例前端引入了验证码.淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让羊毛党空手而归. 验证码 那么到底 ...

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

    架构.分布式.日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了. kafka介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由S ...

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

    前言 ​最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场 ...

  6. 从构建分布式秒杀系统聊聊Disruptor高性能队列

    前言 秒杀架构持续优化中,基于自身认知不足之处在所难免,也请大家指正,共同进步.文章标题来自码友 简介 LMAX Disruptor是一个高性能的线程间消息库.它源于LMAX对并发性,性能和非阻塞算法 ...

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

    前言 在单体架构的秒杀活动中,为了减轻DB层的压力,这里我们采用了Lock锁来实现秒杀用户排队抢购.然而很不幸的是尽管使用了锁,但是测试过程中仍然会超卖,执行了N多次发现依然有问题.输出一下代码吧,可 ...

  8. C#采用rabbitMQ搭建分布式日志系统

    网上对于java有很多开源的组件可以搭建分布式日志系统,我参考一些组件自己开发一套简单的分布式日志系 全部使用采用.NET进行开发,所用技术:MVC.EF.RabbitMq.MySql.Autofac ...

  9. Ansible实战:部署分布式日志系统

    本节内容: 背景 分布式日志系统架构图 创建和使用roles JDK 7 role JDK 8 role Zookeeper role Kafka role Elasticsearch role My ...

随机推荐

  1. linux nginx配置新项目加域名

    找到nginx的配置文件 nginx/nginx.conf 第一种方,法直接在nginx.com里面配置 user www www; worker_processes auto; error_log ...

  2. 页面 JavaScript 存在多个同名方法的调用分析

    在 JavaScript 中,不存在方法重载的概念,方法重载指的是可以定义不同类型的参数和参数个数的同名方法,然后可以按需调用. 如需实现按参数个数的不同去执行不同的方法主体,正确的做法是通过定义一个 ...

  3. vue v-if与v-show使用注意问题

    在使用中发现v-show和v-if用哪个都不可以控制元素块的显示隐藏, 之前v-show和v-if都是这样写的: <span v-if="{loadingComplete:false} ...

  4. JSP输出当前日期

    如何在网页中动态交互,输出当前日期? <%@ page language="java" import="java.util.*" contentType= ...

  5. CDbConnection failed to open the DB connection: could not find driver错误的处理

    在PHP.INI文件中extension=php_pdo_mysql.dll 去掉注释

  6. goquery 文档

    https://www.itlipeng.cn/2017/04/25/goquery-%E6%96%87%E6%A1%A3/ http://blog.studygolang.com/2015/04/g ...

  7. Eclipse------启动Server时出现弹窗Server at localhost was unable to start within 45 seconds.

    弹窗详细信息: Server Tomcat v8. Server at localhost was unable to start within seconds. If the server requ ...

  8. SpringBoot------新建一个项目

    1.新建一个Maven Project 2.选择项目路劲 3.选择Web App 4.添加项目名称 5.右击“Properties”->“Java Build Path”->“Source ...

  9. HTML5的一个写下拉文本框标签

    新的HTML5有个标签,能够下拉的文本框 代码如下 <input list="browsers"> <datalist id="browsers&quo ...

  10. 胡思乱想 & 胡言乱语

    其大无外,其小无内,在数学上是不存在的,有无穷大,又有无限逼近于0而永远不等于0 现实中,人们对事物的认知局限于科学工艺的发展,往小的方面说,在没有显微镜之前,我们能看到的最小的东西莫过于尘埃,其后认 ...