`
qianshangding
  • 浏览: 127876 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Flume+Elasticsearch搭建实时日志分析系统

 
阅读更多

最近做一个检测全球网络状况的项目,主要用于检测全球各个国家,地区的机房网络状况,服务的性能,DNS解析等等...情况的数据,通过中央服务器添加任务,下发任务到部署在全球各个国家和地区的minipc,minipc将获取到的数据反馈到监控服务,然后进行数据整合和分析提供报表,供公司更有针对性的优化网站性能。

之所以采用Flume + Elasticsearch,而没有采用ELK(elasticsearch logstash kibana),主要是因为之前的一些积累。hadoop集群的日志采集都是用Flume,而且对Flume比较熟悉,少了很多的学习成本。

总体架构:

总体流程:

1,后台编辑任务,并制定任务策略

2,后台根据任务策略,分发任务到指定的Mini PC

3,Mini PC获取到任务后,执行任务,并将执行后的任务数据发送的Nginx(现网Nginx使用keepalived做了高可用)

4,Flume通过tail命令实时获取Nginx日志

5,Flume将日志实时导入到Elasticsearch集群

6,报表系统根据用户输入的查询条件以报表,列表,图表等形式展现给用户。

实际项目要比以上流程复杂很多,其中涉及到将数据导入hadoop做离线分析。本章主要讲Flume+Elasticsearch搭建实时日志分析系统,以及如何自定义处理Nginx日志数据。

ElasticSearchSink配置(加粗字体必须设置值):
属性名称
默认值
描述
channel


type

组件的名称:org.apache.flume.sink.elasticsearch.ElasticSearchSink
hostNames

Elasticsearch集群的服务器列表(hostname:port),用逗号分隔,如果没有指定端口,默认是:9300
indexName
flume
索引名称会追加时间,例如:‘flume’ -> ‘flume-yyyy-MM-dd’,同时也支持任意标题替换,例如:flume-%{header},则会在Event的header中查询key为fish的值来替换作为索引名称。注:indexName必须小写
indexType
logs
indexType也支持任意标题替换
clusterName
elasticsearch
连接到Elasticsearch集群的名称
batchSize
100
每个事务写入多少个Event
ttl

ttl 的时间,过期了会自动删除文档,如果没有设置则永不过期,ttl使用integer或long型,单位可以是:ms (毫秒), s (秒), m (分), h (小时), d (天) and w (周)。例如:a1.sinks.k1.ttl = 5d则表示5天后过期。
serializer
org.apache.flume.sink.elasticsearch.ElasticSearchLogStashEventSerializer

serializer.*


Nginx的logformat配置

log_format main '["$remote_addr","$http_x_forwarded_for","$remote_user","$request","$request_body","$request_uri","$status","$body_bytes_sent","$bytes_sent","$connection","$connection_requests","$msec","$pipe","$http_referer","$http_user_agent","$request_length","$request_time","$upstream_response_time","$time_local","$gzip_ratio"]';
Nginx打印成Json数组格式。


Flume配置

a1.sources.source1.type = exec
a1.sources.source1.command = tail -n 0 -F /home/nginx/logs/access.log
a1.sources.source1.channels = channel1

a1.sources.source1.interceptors = i1
a1.sources.source1.interceptors.i1.type = timestamp

a1.sinks.sink1.type = org.apache.flume.sink.elasticsearch.ElasticSearchSink
a1.sinks.sink1.batchSize = 50
a1.sinks.sink1.hostNames = 10.0.1.75:9300;10.0.1.76:9300;10.0.1.77:9300
a1.sinks.sink1.indexName = fish-test
a1.sinks.sink1.indexType = fish-yyyy-MM-dd
a1.sinks.sink1.clusterName = bicloud
a1.sinks.sink1.serializer=org.apache.flume.sink.elasticsearch.ElasticSearchNginxEventSerializer
a1.sinks.sink1.serializer.fields=remote_addr http_x_forwarded_for remote_user request request_body request_uri status body_bytes_sent bytes_sent connection connection_requests msec pipe http_referer http_user_agent request_length request_time upstream_response_time time_local gzip_ratio
a1.sinks.sink1.serializer.fields.status.serializer=int
a1.sinks.sink1.serializer.fields.time_local.serializer=date
a1.sinks.sink1.serializer.fields.time_local.format=dd/MMMMM/yyyy:HH:mm:ss z
a1.sinks.sink1.serializer.fields.time_local.locale=en

a1.channels.channel1.type = memory
a1.channels.channel1.capacity = 100
a1.channels.channel1.transactionCapacity = 80

a1.sources.source1.channels = channel1
a1.sinks.sink1.channel = channel1
通过ExecSource实时获取Nginx日志,并将日志导入到Elasticsearch。

org.apache.flume.sink.elasticsearch.ElasticSearchNginxEventSerializer是自定义的Nginx解析类,将每条日志解析成Json数组,及数组每个字段在Elasticsearch中对应的字段,并且各个字段可以定义自己想要的类型。

详情查看:https://github.com/qianshangding/fish-flume

源码只实现了boolean,date,double,int,integer,long,string,实际业务我们对request_body,ip地址,经度纬度都做了处理,由于和业务相关就不上传了,可以根据自身业务的需求实现Serializer接口。


分享到:
评论

相关推荐

    Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+ES+Redash等详细安装部署

    Elasticsearch是一个实时的分布式搜索和分析引擎,常用于日志分析和全文搜索。安装Elasticsearch需要考虑节点间的通信、索引策略和数据分片。 Redash是一款开源的数据可视化和查询工具,允许用户直接查询数据并创建...

    基于Flume的分布式日志采集分析系统设计与实现.pdf

    该系统基于Flume、Elasticsearch和Kibana等技术手段,能够对海量日志数据进行实时采集、处理和分析,并提供可视化的展示结果。 分布式日志采集系统的需求 随着互联网的发展和大数据技术的兴起,日志数据的规模日益...

    Flume1.8+Elasticsearch6.2.4+Kibana6.2.4项目linux搭建

    在本项目中,我们将搭建一个基于Linux环境的实时数据流处理系统,主要涉及Flume 1.8、Elasticsearch 6.2.4和Kibana 6.2.4。这个组合常用于大数据日志收集、存储和分析。以下是详细步骤: 一、**Elasticsearch安装与...

    logstash+elasticsearch+kibana搭建监控平台 

    Logstash、Elasticsearch 和 Kibana(简称 LEK)的组合提供了一个轻量级且高效的解决方案,用于日志分析、监控以及数据可视化。 Logstash 是一个数据收集引擎,它的主要功能包括收集、过滤和转发各种类型的数据。它...

    大数据架构:flume-ng+Kafka+Storm+HDFS实时系统组合

    直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边...

    基于Flume的海量日志统一分析平台--计算机信息管理自学考试毕业论文.doc

    本课题主要研究如何利用Flume搭建一个日志采集系统,结合Kafka进行数据缓冲,通过Storm进行实时处理,最后将结果存储到Elasticsearch进行查询和分析。同时,对各个组件的功能需求、系统架构设计和具体实现进行了详细...

    日志服务器 Apache Flume.7z

    3. **Sink(Sinks)**:Sink是Flume的数据输出端,它将通道中的事件转发到目的地,如HDFS(Hadoop分布式文件系统)、HBase、Elasticsearch或其他日志分析工具。根据需求,Sink可以实现多级路由、转换和过滤功能。 4...

    Flume负载均衡.pdf

    Sinks 是 Flume 的数据目标,例如 HDFS 或 Elasticsearch。Channels 是 Flume 的缓存队列,用于暂存数据。 在 `exe-avro.conf` 文件中,需要配置 sources、sinks 和 channels 组件。例如: ``` a1.sources = r1 a1....

    apache-flume.tar.gz

    Sink 负责将数据从通道中取出并发送到目的地,如 HDFS、HBase、Elasticsearch 或简单的文本文件。 在配置 Flume 时,你需要定义一个或多个Agent。Agent 是 Flume 的基本工作单元,它包含至少一个源、一个或多个通道...

    ELK项目前台后系统搭建及Dubbo快速入门.docx

    Elasticsearch的高效检索能力使得实时查询大量日志成为可能,而Kibana的图形界面则提供了友好的数据分析和报告展示。 【Dubbo快速入门】 Apache Dubbo是一个高性能、轻量级的Java RPC框架,它是阿里巴巴开源的...

    大数据中台架构栈.doc

    相对而言,Logstash是Elastic.co的产品,强调数据的前期处理和分析,插件丰富,配置简便,常与ELK(Elasticsearch、Logstash、Kibana)技术栈一起使用,适用于快速搭建日志分析系统。 日志采集的工作原理可以通过...

    个人使用计算机专业简历-大数据工程师.docx

    - **Elasticsearch**:分布式搜索和分析引擎,适用于日志分析和全文检索。 ### 9. 数据集成与任务调度 - **Sqoop**:用于在Hadoop和关系型数据库之间高效传输大量数据。 - **Azkaban和Oozie**:用于调度复杂的工作...

    elk with docker

    ELK技术栈指的是Elasticsearch...通过Docker部署ELK,可以快速搭建日志处理环境,并通过各种工具进行日志的采集、过滤、处理和可视化,从而帮助开发者和运维人员更好地管理和分析日志数据,提升系统的监控和运维效率。

    决对可用,log4j日志集中处理扩展(含server与client)

    4. 对于日志数据的存储和检索,可能需要结合Elasticsearch、Hadoop或数据库等工具,以便于查询和分析。 这个“决对可用”的资源包含了jar包和详细说明,可以帮助你快速搭建和测试Log4j的日志集中处理系统。在实际...

    第1周 Hadoop生态系统以及版本演化

    - **Kibana**:与Elasticsearch紧密集成,提供了一个易于使用的界面,可以实时地查看和分析日志数据。 #### 日志系统整体架构图示例 [此处可以插入日志系统架构图] #### 爬虫系统 **爬虫系统**用于从互联网上...

    gmall0901-dw.rar

    本文将深入探讨一个名为“gmall0901-dw”的数据仓库项目,该项目展示了如何利用Flume进行数据采集,通过Kafka实现数据收集,并在集群环境中搭建日志服务。我们将详细解析这些关键组件,以便更好地理解和应用大数据...

    storm 实战笔记

    这部分内容聚焦于Storm与其他系统的集成,包括数据源的接入(如Kafka、Flume)和数据消费端的对接(如HDFS、Elasticsearch)。通过实例解析,读者可以掌握如何设计和实现数据流的完整生命周期,理解如何利用Storm...

    大数据工程师简历3份.pdf

    5. **日志收集与分析**:熟悉ELK技术栈,包括Elasticsearch和Logstash的整合使用,这对于日志管理和数据分析非常关键。 6. **数据迁移**:掌握Sqoop工具,能进行跨存储介质的数据迁移,这对于数据集成和迁移项目...

    个人使用大数据开发工程师-计算机专业简历.doc

    - **ElasticSearch**:高性能搜索和分析引擎,常用于日志分析、全文检索等场景。 - **HBase**:构建在Hadoop之上的分布式列式存储系统,适用于随机读写的大数据应用场景。 - **Azkaban**:工作流调度工具,用于管理...

Global site tag (gtag.js) - Google Analytics