实时日志收集-查询-分析系统(Flume+ElasticSearch+Kibana)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:

设计方案:Flume(日志收集) + ElasticSearch(日志查询)+ Kibana(日志分析与展示)

实验使用场景:通过ambari部署集群后,可以添加自己的日志系统,记录每个组件的产生的日志,实时的查询分析。

一、Flume概述

Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.

The use of Apache Flume is not only restricted to log data aggregation. Since data sources are customizable, Flume can be used to transport massive quantities of event data including but not limited to network traffic data, social-media-generated data, email messages and pretty much any data source possible.

二、Flume架构

每一个Flume agent包含三种类型的组件:source(从数据源获取生成event data),channel(接收source给put来的event data),sink(从channel取走event data)

注意上面写的是一个flume agent包含三种而不是三个

flume-arch

解释下什么是event data?

官方解释:A Flume event is defined as a unit of data flow having a byte payload and an optional set of string attributes.

简单理解:flume event data = headers + body,其中body的类型是byte[],headers的类型是Map<String,String>,event代表着一个数据流的最小完整单元,如果是source是从文本文件中读数据,那event的body通常就是每行的内容,headers可以自行添加。

三、Flume需要理解的内容

  1. 如何配好一个最简单的flume.conf,使得flume agent正常工作;

  2. Flume的flow的种类和适用场景;

  3. Flume的官方提供的sources,channels,sinks,如提供的不满足需求,可自定义适用于自己场景的source、channel和sink;

四、ElasticSearch概述

Elasticsearch是一个基于Apache Lucene(TM)的开源的、实时的、分布式的、全文存储、搜索、分析引擎。

Lucene使用起来非常复杂,ES(ElasticSearch)可以看成对其进行了封装,提供了丰富的REST API,上手非常容易。

五、ElasticSearch的数据模型的简单理解

在Elasticsearch中,有几个概念(关键词),有别于我们使用的关系型数据库中的概念,注意类比:

Relational DB   -> Databases        -> Tables -> Rows       -> Columns
Elasticsearch   -> Indices(Index)   -> Types  -> Documents  -> Fields

 
 
  • 1
  • 2

Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

如何定位es中的一个文档(Document)?

通过Index(索引: 文档存储的地方) + Type(类型:文档代表的对象的类)+ Document_ID(唯一标识:文档的唯一标识),在ES内部的元数据表示为:_index + _type + _id。

六、Kibana概述

可以看成是ES的一个插件,提供的功能:

  1. Flexible analytics and visualization platform

  2. Real-time summary and charting of streaming data

  3. Intuitive interface for a variety of users

  4. Instant sharing and embedding of dashboards

七、系统实现

环境:

1)JDK版本:java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
(2)Flume1.6.03)ElasticSearch1.7.5

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意:我这里实验显示Flume1.6.0不能导数据到ES2.2.0

log-arch

Flume使用的conf,可以简单的设置如下:

agent.sources = yarnSrc hbaseSrc
agent.channels = memoryChannel
agent.sinks = elasticsearch

# source1:hdfsSrc
agent.sources.hdfsSrc.type = exec
agent.sources.hdfsSrc.command = tail -F /var/log/tbds/hdfs/hdfs/hadoop-hdfs-datanode-10.151.139.111.log
agent.sources.hdfsSrc.channels = memoryChannel

# source2:yarnSrc
agent.sources.yarnSrc.type = exec
agent.sources.yarnSrc.command = tail -F /var/log/tbds/yarn/yarn/yarn-yarn-nodemanager-10.151.139.111.log
agent.sources.yarnSrc.channels = memoryChannel

# source3:hbaseSrc
agent.sources.hbaseSrc.type = exec
agent.sources.hbaseSrc.command = tail -F /var/log/tbds/hbase/hbase-hbase-regionserver-10.151.139.111.log
agent.sources.hbaseSrc.channels = memoryChannel

# sink1:localSink
agent.sinks.localSink.type = file_roll
agent.sinks.localSink.sink.directory = /var/log/flume
agent.sinks.localSink.sink.rollInterval = 0
agent.sinks.localSink.channel = memoryChannel

# sink2:esSink
agent.sinks.elasticsearch.channel = memoryChannel
agent.sinks.elasticsearch.type = org.apache.flume.sink.elasticsearch.ElasticSearchSink
agent.sinks.elasticsearch.hostNames = 10.151.139.111:9300

agent.sinks.elasticsearch.indexName = basis_log_info
agent.sinks.elasticsearch.batchSize = 100
agent.sinks.elasticsearch.indexType = logs
agent.sinks.elasticsearch.clusterName = my-test-es-cluster
agent.sinks.elasticsearch.serializer = org.apache.flume.sink.elasticsearch.ElasticSearchLogStashEventSerializer

# channel1
agent.channels.memoryChannel.type = memory
agent.channels.memoryChannel.capacity = 100

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

注意要在flume/lib下加入两个包: 
lucene-core-4.10.4.jar 
elasticsearch-1.7.5.jar

The elasticsearch and lucene-core jars required for your environment must be placed in the lib directory of the Apache Flume installation.

 
 
  • 1

之后分别运行elasticsearch和flume即可。

八、系统改进

  1. 配置flume interceptor加入各类headers,重写ElasticSearchLogStashEventSerializer使得event的header部分可以作为es的文档的field

  2. memory channel与file channel的结合,参见美团日志系统的改进

  3. 日志若是错误信息,并不是每一行都是作为es的一个文档,而是若干行的内容才是es的一个文档的message

九、系统实现效果

导入es的文档数据结构:

es-data-structure

Kibana展示:

kibana-result

References:

  1. Apache Flume:https://flume.apache.org/

  2. elastic.co:https://www.elastic.co/

  3. Elasticsearch权威指南(中文版):https://www.gitbook.com/book/looly/elasticsearch-the-definitive-guide-cn/details

  4. Kibana :https://www.elastic.co/products/kibana

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
17天前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
|
1月前
|
存储 SQL 监控
|
1月前
|
运维 监控 安全
|
1月前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
42 2
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
43 5
|
2月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
214 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
4月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
4月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
4月前
|
Ubuntu Oracle Java
如何在 Ubuntu VPS 上安装 Elasticsearch
如何在 Ubuntu VPS 上安装 Elasticsearch
52 0
下一篇
DataWorks