• 利用开源架构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等,实现更强大更易用的报警配置。

  • 相关阅读:
    springboot之Date格式化
    如何在vue的dialog弹窗中显示echarts图表,并且点击第一次就能显示,解决不会出现点击一次,不出现图表,第二次才出现图表的问题
    Vue中使用eldialog集成echarts
    VUE+ElementUi学习记录(一)tabs切换导致页面比例不自适应,包含echarts
    elementUI 使用echarts插件
    使用vue结合echarts封装成一个可复用Vue组件
    自定义Dataset Learner
    论文解读(MCGC)《Multiview Contrastive Graph Clustering》 Learner
    bat一直读取不了brconfig.json配置文件
    UOS系统UDP通信时绑定不了端口
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/6117117.html
Copyright © 2020-2023  润新知