现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高。Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es)、Logstash、Kibana上个项目结合。Es就是基于Lucene的存储,索引的搜索引擎;logstash是提供输入输出及转化处理插件的日志标准化管道;Kibana提供可视化和查询统计的用户界面。往往这些开源项目并不是适合每一个公司的业务,业务不同,对开源项目扩展也就不同,logstash进行日志采集时,在Agent端并不适合做数据清洗,数据清洗往往是经常变化的,而且Agent一般占用的资源必须要受到一定限制否则会影响业务系统。我们可以将日志的采集采用一些开源系统重新进行组合,因为日志采集的业务特性,可以采用Es+kafka进行初步的存储查询。首先以Http协议收集日志为例,

将整个日志存储查询总体分为四个层处理:

第一层:日志采集层;

主要处理日志采集的过程,针对生成的日志不同,大体上分成三大部分:

(1)、日志通过Http协议汇总到服务器端,一般是Web端,或者IOS、Android移动端通过HTTP 请求上报日志,这部分日志采集的agent暴露在公网上,可能会存在一些恶意上报垃圾日志,这部分日志是需要进行权限验证的,例如:在上报的日志中带上Token的验证,验证不成功直接丢弃,成功则将log存入到kafka对应的topic中。

(2)、服务器上的文本日志,这部分日志一般是业务系统存储的log文件,由于存在的是服务器端,一般不需要进行token验证,就可以直接采用logstash或者rsyslog进行汇总到kafka中去。

(3)、非文本日志,需要自己进行开发的自定义Agent 采集相关日志发送到kafka中,如监控某一个 radis、mysql等组件。此类日志和(2)相同,一般不是暴露在公网上,不需要进行token验证。

第二层:kafka

(1)、kafka的主要作用一个方面主要是为防止采集量大于日志清洗、存储的能力,这样会造成日志系统处理不及时,或者造成系统宕机,引起日志丢失。kafka是Apache开源的Hadoop生态圈中的分布式消息队列,其扩展性、和性能是非常强大的。加入消息队列在遇到日志高峰期,不能及时处理的日志存储在kafka中,不影响后面的日志清洗的系统,同时通过分析kafka 中日志队列的处理情况能够,对日志清洗层能力进行扩展和缩减。

(2)、另一方面就是方便系统解耦 ,使用kafka也方便扩展,如果要对日志进行一些实时统计处理,则采用Storm-kafka直接订阅相关的topic就能够将日志数据导入到Storm集群中进行实时统计分析。

第三层:日志清洗层;

将所有的日志清洗和统计的逻辑归于这一层进行处理。

第四层:日志存储层;

将日志存入到Es进行索引建立和查询。

环境搭建及相关例子:

官方文档:http://kafka.apache.org/090/documentation.html#quickstart

同时也可以采用CDH、Ambari等集群管理工具安装 kafka,这里不再赘述,Ambari离线安装文档:http://pan.baidu.com/s/1i5NrrSh。

storm实时处理例子:https://github.com/barrysun/storm-ml/tree/master/logmapping-storm-kafka

Es+kafka搭建日志存储查询系统(设计)的更多相关文章

  1. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(教程详情)

    章节一  2018年 ELK课程计划和效果演示1.课程安排和效果演示    简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示    es: localhost:9200    k ...

  2. logstash+elasticsearch+kibana搭建日志收集分析系统

    来源: http://blog.csdn.net/xifeijian/article/details/50829617 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散 ...

  3. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)

    章节一  2018年 ELK课程计划和效果演示 1.课程安排和效果演示 简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示 章节二 elasticSearch 6.2版本基础讲解到 ...

  4. x86主机搭建家庭智能路由系统 ---- 设计篇

    组件简介 Proxmox: 基于Debian的虚拟化系统,支持OpenVZ和KVM. pfSense: 基于FreeBSD的开源路由系统. FreeNAS: 开源NAS系统. shadowsocks: ...

  5. ELK+kafka构建日志收集系统

    ELK+kafka构建日志收集系统   原文  http://lx.wxqrcode.com/index.php/post/101.html   背景: 最近线上上了ELK,但是只用了一台Redis在 ...

  6. 快速搭建日志系统——ELK STACK

    什么是ELK STACK ELK Stack是Elasticserach.Logstash.Kibana三种工具组合而成的一个日志解决方案.ELK可以将我们的系统日志.访问日志.运行日志.错误日志等进 ...

  7. 企业日志大数据分析系统ELK+KAFKA实现【转】

    背景: 最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项:所以最近将Redis ...

  8. ELK+FileBeat+Log4Net搭建日志系统

    ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...

  9. 【ELK】5.spring boot日志集成ELK,搭建日志系统

    阅读前必看: ELK在docker下搭建步骤 spring boot集成es,CRUD操作完整版 ============================================== 本章集成 ...

随机推荐

  1. DOCKER在windows上安装与配置

    1.下载程序 安装包 https://github.com/boot2docker/windows-installer/releases(这个地址国内下载很慢) 用这个: https://get.da ...

  2. PHP创建文件以及移动文件

    创建文件,这里用到的是fopen,即是打开,又是创建 <?php $counter_file = 'aa.txt ';//文件名及路径,在当前目录下新建aa.txt文件 $fopen = fop ...

  3. BSTR与char*、cstring、CComBSTR的转换

    // BSTR_Convert.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <comutil.h> // ...

  4. Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中

    有两张表, 一张为爱好表b表 一张为用户表 u表 u表 id   名称   爱好Id 1    张三     1,2,3,4 2    李四      2,5 b表 id  名称 1    打乒乓 2 ...

  5. OpenStack Cinder 与各种后端存储技术的集成叙述与实践

    先说下下loop设备 loop设备及losetup命令介绍 1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备.它能使我们 ...

  6. RDO部署多节点OpenStack Havana(OVS+GRE)

    RDO是由红帽RedHat公司推出的部署OpenStack集群的一个基于Puppet的部署工具,可以很快地通过RDO部署一套复杂的OpenStack环境,当前的RDO默认情况下,使用Neutron进行 ...

  7. 【Java nio】Channel

    package com.slp.nio; import org.junit.Test; import java.io.*; import java.nio.ByteBuffer; import jav ...

  8. LeetCode——Best Time to Buy and Sell Stock II

    Description: Say you have an array for which the ith element is the price of a given stock on day i. ...

  9. mysql 安装流程 兼容8.0.0以上版本 解决修改密码规则问题

    背景介绍: 第一次安装mysql服务端,版本8.0.6 遇到了问题:1:不知道流程:2:8.0以上版本密码加密规则修改的解决方案:   1:下载mysql 服务端 https://dev.mysql. ...

  10. onethink文章详情如何做上一篇和下一篇!

    其实很简单,如果要做上一篇和下一篇,只要知道当前文章ID的前一个ID和后一个ID即可: //上一篇文章 $prewhere = array(); $prewhere['id'] = array('LT ...