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

  • 相关阅读:
    时序点过程学习笔记
    蚂蚁集团 CeresDB 团队 | Rust CPU Affinity 初探
    宽客Quant量化投资书籍推荐(33本)
    线性代数库调研
    比较OpenBLAS,Intel MKL和Eigen的矩阵相乘性能
    空间点过程&点格局分析
    4-网络芯片CH395Q学习开发-关于中断检测和DHCP实验
    3-网络芯片CH395Q学习开发-芯片初始化,网线连接检测实验(轮训和中断方式)
    2-网络芯片CH395Q学习开发-学习资料说明,测试通信,获取硬件版本,获取设备本身MAC,代码移植说明
    001-STM32+Air724UG基本控制篇(华为云物联网平台)--测试STM32+Air724UG(4G模组),Android,微信小程序等连接华为云物联网平台
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/6117117.html
Copyright © 2011-2022 走看看