深入剖析美团基于Flume的网站日志收集系统

深入剖析美团基于Flume的网站日志收集系统

介绍

美团基于Apache Flume搭建了网站日志收集系统,Flume是一个高可靠、高可扩展、高可定制化的分布式日志收集系统,在实际应用中广泛被使用。

系统架构

日志生成端

网站的日志生成端包括Apache、Nginx服务器等,这些服务器会产生大量日志数据。

Agent

在日志生成端安装Agent组件,配置agent采集器参数,并将日志发送到Flume的Sink端进行处理。

Collector

在日志接收端安装Collector组件,将采集器接收到的日志数据缓存到本地存储。

Sink

在Collector组件中,将采集到的日志数据发送到Sink组件中进行存储。

Flume核心组件

Source

Source作为Flume架构中的第一环节,指Flume从外界数据源中采集数据的组件,它位于数据流的起点。通常情况下,Source组件会一直接收并且处理外界数据,直至Source组件被终止。

Channel

Channel指Flume架构中负责数据存储的组件,它以FIFO的方式,缓存Source接收到的数据,以便后续其他组件对数据进行处理。

Sink

Sink作为Flume架构中的最后一环节,指Flume将数据存储到数据目标之中的组件,它负责处理Channel中的数据,并将数据发送给下一个Flume Agent或数据存储的系统,如HDFS等。

示例1

在Flume Agent中配置Exec Source来获取生成于2019年6月1日 00:00~01:00之间的nginx日志信息,并将日志信息输出到文件中。以下是Flume Agent的配置文件:

a1.sources = s1
a1.sinks = k1
a1.channels = c1

a1.sources.s1.type = exec
a1.sources.s1.command = tail -f /var/log/nginx/access.log | grep '2019-06-01 00:00:00,000' -A 6000 -B 5000

a1.channels.c1.type = memory

a1.sinks.k1.type = file_roll
a1.sinks.k1.sink.directory = /tmp/flume
a1.sinks.k1.sink.rollInterval = 120
a1.sinks.k1.rollSize = 0

a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1

示例2

在Flume Agent中配置TailDir Source实现对生成在/data/logs/目录下的日志文件进行实时采集,并将数据传输到HDFs存储中。以下是Flume Agent的配置文件:

a1.sources = s1
a1.sinks = k1
a1.channels = c1

a1.sources.s1.type = TAILDIR
a1.sources.s1.positionFile = /data/logs/flume/taildir_position.json
a1.sources.s1.filegroups = logs
a1.sources.s1.filegroups.logs = /data/logs/
a1.sources.s1.batchSize = 1000
a1.sources.s1.batchDurationMillis = 1000
a1.sources.s1.ignorePattern = ^.*(gz)$$
a1.sources.s1.readFromEnd = true

a1.channels.c1.type = memory

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /user/flume/dynamic/%Y%m%d/%H/
a1.sinks.k1.hdfs.filePrefix = test-hdfs
a1.sinks.k1.hdfs.fileSuffix = .avro
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.rollInterval = 3600

a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入剖析美团基于Flume的网站日志收集系统 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java基础知识之BufferedReader流的使用

    Java基础知识之BufferedReader流的使用 BufferedReader是Java中一个常用的字符输入流,常用于读取文本文件中的数据。相较于其他的字符输入流,BufferedReader具有缓冲功能,能够更加高效地读取文件的内容。本文将详细介绍BufferedReader流的使用,包括如何创建、如何读取文件内容、如何关闭流等。 创建Buffere…

    Java 2023年5月26日
    00
  • SpringBoot统一功能处理的方式详解

    Spring Boot统一功能处理的方式详解 Spring Boot是一个流行的Java框架,可以帮助开发人员快速构建和部署应用程序。在开发过程中,我们经常需要实现一些通用的功能,例如异常处理、日志记录、安全性等。本文将详细讲解如何使用Spring Boot实现统一功能处理,包括全局异常处理、日志记录、安全性等。 1. 全局异常处理 在Web应用程序中,异常…

    Java 2023年5月14日
    00
  • 手把手带你实现一个萌芽版的Spring容器

    手把手带你实现一个萌芽版的Spring容器 什么是Spring容器 Spring容器是Spring框架的核心组件之一,主要负责管理Bean的生命周期,维护Bean之间的依赖关系,并提供各种应用上下文服务,是Spring框架的核心所在。Spring容器有多种类型,包括ApplicationContext、BeanFactory等。 实现一个Spring容器 实…

    Java 2023年5月19日
    00
  • 腾讯云Ubuntu14.04安装Tomcat8教程

    腾讯云Ubuntu14.04安装Tomcat8教程 1. 安装OpenJDK 在Ubuntu14.04下使用如下命令安装OpenJDK: sudo apt-get update sudo apt-get install openjdk-7-jdk 2. 下载Tomcat8 官网下载地址:https://tomcat.apache.org/download-8…

    Java 2023年5月19日
    00
  • java高级用法之JNA中的Structure

    下面详细讲解一下Java高级用法之JNA中的Structure: 什么是JNA? JNA全称为Java Native Access,它是一个开源的Java库,可以让Java程序无需写任何Native代码实现直接访问本地DLL、 shared libraries和C等 Native语言编写的动态库(so)等。 Structure在JNA中的作用 在JNA中,S…

    Java 2023年5月26日
    00
  • 如何运行SpringBoot项目的方法

    如何运行Spring Boot项目的方法 Spring Boot是一个非常流行的Java开发框架,它提供了多种运行方式,包括命令行、Maven插件、Gradle插件等。本文将详细介绍如何运行Spring Boot项目的方法,包括命令行、Maven插件、Gradle插件等。 1. 命令行 使用命令行运行Spring Boot项目是最简单的方法。我们只需要在项目…

    Java 2023年5月14日
    00
  • 详解 Corba开发之Java实现Service与Client

    详解 Corba开发之Java实现Service与Client 什么是 Corba Common Object Request Broker Architecture(通用对象请求代理架构,简称CORBA)是一种用于构建分布式系统的中间件技术。它可以实现对象之间的交互,并提供了完整的面向对象的支持。CORBA尤其适用于企业级应用,包括电信、金融、航空、医疗等…

    Java 2023年5月19日
    00
  • 高并发场景下的 HttpClient 优化,QPS 大大提升!

    HttpClient优化思路: 池化 长连接 httpclient和httpget复用 合理的配置参数(最大并发请求数,各种超时时间,重试次数) 异步 6、多读源码 1.背景 我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里…

    Java 2023年5月8日
    00
合作推广
合作推广
分享本页
返回顶部