❶ 什么是 flume 日志收集,flume的特性
您好,很高兴为您解答。
Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。
Flume采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。
Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
flume的特性:
(1) 可靠性
当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Best effort(数据发送到接收方后,不会进行确认)。
(2) 可扩展性
Flume采用了三层架构,分别为agent,collector和storage,每一层均可以水平扩展。其中,所有agent和collector由master统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。
3) 可管理性
所有agent和colletor由master统一管理,这使得系统便于维护。多master情况,Flume利用ZooKeeper和gossip,保证动态配置数据的一致性。用户可以在master上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载。Flume提供了web 和shell script command两种形式对数据流进行管理。
(4) 功能可扩展性
用户可以根据需要添加自己的agent,collector或者storage。此外,Flume自带了很多组件,包括各种agent(file, syslog等),collector和storage(file,HDFS等)。
如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
❷ flume怎么采集远程服务器上的日志
log4j.rootLogger=INFO,A1,R
# ConsoleAppender out
log4j.appender.A1= org. apache.log4j.ConsoleAppender
log4j.appender.A1.layout= org. apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ yyyy/MM/ ddHH:mm:ss}%-5p%-10C {1} %m%n
# File out
//日志Appender修改为flume提供的Log4jAppender
log4j.appender.R= org. apache. flume.clients.log4jappender.Log4jAppender
log4j.appender.R.File=${ catalina.home}/logs/ ultraIDCPServer.log
//日志需要发送到的端口号,该端口要有ARVO类型的source在监听
log4j.appender.R.Port =44444
//日志需要发送到的主机ip,该主机运行着ARVO类型的source
log4j.appender.R.Hostname = localhost
log4j.appender.R.MaxFileSize=102400KB
# log4j.appender.R.MaxBackupIndex=5
log4j.appender.R.layout= org. apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{ yyyy/MM/ ddHH\: mm\: ss}%-5p%-10C {1} %m%n
log4j.appender.R.encoding=UTF-8
log4j.logger.com.ultrapower.ultracollector.webservice.=INFO, webservice
log4j.appender.webservice= org. apache.log4j.FileAppender
log4j.appender.webservice.File=${ catalina.home}/logs/.log
log4j.appender.webservice.layout= org. apache.log4j.PatternLayout
log4j.appender.webservice.layout.ConversionPattern=%d{ yyyy/MM/ ddHH\: mm\: ss}%-5p[%t]%l%X-%m%n
log4j.appender.webservice.encoding=UTF-8
注:Log4jAppender继承自AppenderSkeleton,没有日志文件达到特定大小,转换到新的文件的功能
1.1.3. flume agent配置
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
# Describe/configure source1
agent1.sources.source1.type = avro
agent1.sources.source1.bind = 192.168.0.141
agent1.sources.source1.port = 44444
# Describe sink1
agent1.sinks.sink1.type = FILE_ROLL
agent1.sinks.sink1.sink.directory = /home/yubojie/flume/apache-flume-1.2.0/flume-out
# Use a channel which buffers events in memory
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 1000
agent1.channels.channel1.transactionCapactiy = 100
# Bind the source and sink to the channel
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1
注:生成的文件的规则为每隔固定时间间隔生成一个新的文件,文件里面保存该时间段agent接收到的信息
1.2. 分析
1. 使用简便,工作量小。
2. 用户应用程序使用log4j作为日志记录jar包,而且项目中使用的jar包要在log4j-1.2.15版本以上,
3. 应用系统必须将flume所需jar包引入到项目中。如下所示为所有必须jar包:可能会存在jar冲突,影响应用运行
4. 能够提供可靠的数据传输,使用flume log4jAppender采集日志可以不在客户机上启动进程,而只通过修改logapppender直接把日志信息发送到采集机(参见图一),此种情况可以保证采集机接受到数据之后的数据可靠性,但是客户机与采集机连接失败时候数据会丢失。改进方案是在客户机上启动一个agent,这样可以保证客户机和采集机不能连通时,当能连通是日志也被采集上来,不会发送数据的丢失(参见图二),为了可靠性,需在客户机上启动进程
1.3. 日志代码
Log.info(“this message has DEBUG in it”);
1.4. 采集到的数据样例
this message has DEBUG in it
this message has DEBUG in it
2. Exec source(放弃)
The problem with ExecSource and other asynchronous sources is that thesource can not guarantee that if there is a failure to put the event into theChannel the client knows about it. In such cases, the data will be lost. As afor instance, one of the most commonly requested features is thetail -F [file]-like use casewhere an application writes to a log file on disk and Flume tails the file,sending each line as an event. While this is possible, there’s an obviousproblem; what happens if the channel fills up and Flume can’t send an event?Flume has no way of indicating to the application writing the log file that itneeds to retain the log or that the event hasn’t been sent, for some reason. Ifthis doesn’t make sense, you need only know this: Your application can neverguarantee data has been received when using a unidirectional asynchronousinterface such as ExecSource! As an extension of this warning - and to becompletely clear - there is absolutely zero guarantee of event delivery whenusing this source. You have been warned.
注:即使是agent内部的可靠性都不能保证
2.1. 使用说明
2.1.1. flume agent配置
# The configuration file needs to define the sources,
# the channels and the sinks.
# Sources, channels and sinks are defined per agent,
# in this case called 'agent'
# example.conf: A single-node Flume configuration
# Name the components on this agent
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
# Describe/configure source1
#agent1.sources.source1.type = avro
agent1.sources.source1.type = exec
agent1.sources.source1.command = tail -f /home/yubojie/logs/ultraIDCPServer.log
#agent1.sources.source1.bind = 192.168.0.146
#agent1.sources.source1.port = 44444
agent1.sources.source1.interceptors = a
agent1.sources.source1.interceptors.a.type = org.apache.flume.interceptor.HostInterceptor$Builder
agent1.sources.source1.interceptors.a.preserveExisting = false
agent1.sources.source1.interceptors.a.hostHeader = hostname
# Describe sink1
#agent1.sinks.sink1.type = FILE_ROLL
#agent1.sinks.sink1.sink.directory = /home/yubojie/flume/apache-flume-1.2.0/flume-out
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = hdfs://localhost:9000/user/
agent1.sinks.sink1.hdfs.fileType = DataStream
# Use a channel which buffers events in memory
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 1000
agent1.channels.channel1.transactionCapactiy = 100
# Bind the source and sink to the channel
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1
2.2. 分析
1. tail方式采集日志需要宿主主机能够执行tail命令,应该是只有linux系统可以执行,不支持window系统日志采集
2. EXEC采用异步方式采集,会发生日志丢失,即使在节点内的数据也不能保证数据的完整
3. tail方式采集需要宿主操作系统支持tail命令,即原始的windows操作系统不支持tail命令采集
2.3. 采集到的数据样例
2012/10/26 02:36:34 INFO LogTest this message has DEBUG 中文 in it
2012/10/26 02:40:12 INFO LogTest this message has DEBUG 中文 in it
2.4. 日志代码
Log.info(“this message has DEBUG 中文 in it”);
3. Syslog
Passing messages using syslogprotocol doesn't work well for longer messages. The syslog appender forLog4j is hardcoded to linewrap around 1024 characters in order to comply withthe RFC. I got a sample program logging to syslog, picking it up with asyslogUdp source, with a JSON layout (to avoid new-lines in stack traces) onlyto find that anything but the smallest stack trace line-wrapped anyway. Ican't see a way to reliably reconstruct the stack trace once it is wrapped andsent through the flume chain.(注:内容不确定是否1.2版本)
Syslog TCP需要指定eventsize,默认为2500
Syslog UDP为不可靠传输,数据传输过程中可能出现丢失数据的情况。
❸ flume如何监听日志数
1.采集日志文件时一个很常见的现象
采集需求:比如业务系统使用log4j生成日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs中。12
1.1.根据需求,首先定义一下3大要素:
采集源,即source—监控日志文件内容更新:exec ‘tail -F file’
下沉目标,即sink—HDFS文件系统:hdfs sink
Source和sink之间的传递通道—-channel,可用file channel也可以用 内存channel。
1.2.进入/home/tuzq/software/apache-flume-1.6.0-bin/agentconf,编写配置文件tail-hdfs.conf,文件内容如下:
# Name the components on this agenta1.sources = r1a1.sinks = k1
a1.channels = c1# Describe/configure the source## exec表示flume回去调用给的命令,然后从给的命令的结果中去拿数据a1.sources.r1.type = exec## 使用tail这个命令来读数据a1.sources.r1.command = tail -F /home/tuzq/software/flumedata/test.loga1.sources.r1.channels = c1# Describe the sink## 表示下沉到hdfs,类型决定了下面的参数a1.sinks.k1.type = hdfs## sinks.k1只能连接一个channel,source可以配置多个a1.sinks.k1.channel = c1## 下面的配置告诉用hdfs去写文件的时候写到什么位置,下面的表示不是写死的,而是可以动态的变化的。表示输出的目录名称是可变的a1.sinks.k1.hdfs.path = /flume/tailout/%y-%m-%d/%H%M/##表示最后的文件的前缀a1.sinks.k1.hdfs.filePrefix = events-## 表示到了需要触发的时间时,是否要更新文件夹,true:表示要a1.sinks.k1.hdfs.round = true## 表示每隔1分钟改变一次a1.sinks.k1.hdfs.roundValue = 1## 切换文件的时候的时间单位是分钟a1.sinks.k1.hdfs.roundUnit = minute## 表示只要过了3秒钟,就切换生成一个新的文件a1.sinks.k1.hdfs.rollInterval = 3## 如果记录的文件大于20字节时切换一次a1.sinks.k1.hdfs.rollSize = 20## 当写了5个事件时触发a1.sinks.k1.hdfs.rollCount = 5## 收到了多少条消息往dfs中追加内容a1.sinks.k1.hdfs.batchSize = 10## 使用本地时间戳a1.sinks.k1.hdfs.useLocalTimeStamp = true#生成的文件类型,默认是Sequencefile,可用DataStream:为普通文本a1.sinks.k1.hdfs.fileType = DataStream# Use a channel which buffers events in memory##使用内存的方式a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100# Bind the source and sink to the channela1.sources.r1.channels = c1
a1.sinks.k1.channel = 940414243444546474849
1.3.编写完成之后,启动flume,执行的命令是:
[root@hadoop1 flumedata]#cd /home/tuzq/software/apache-flume-1.6.0-bin/agentconf[root@hadoop1 flumedata]#bin/flume-ng agent -c conf -f agentconf/tail-hdfs.conf -n a112
1.4.通过写一个死循环往test.log中写数据的方式模式日志文件增长
编写shell脚本,模拟日志增长变化。
[root@hadoop1 flumedata]# cd /home/tuzq/software/flumedata[root@hadoop1 flumedata]# while true>do> date >> test.log> sleep 2> done123456
查看日志变化
[root@hadoop1 ~]# cd /home/tuzq/software/flumedata/[root@hadoop1 flumedata]# lsaccess.log error.log test.log[root@hadoop1 flumedata]# tail -f test.log 2017年 06月 13日 星期二 22:02:22 CST2017年 06月 13日 星期二 22:02:24 CST2017年 06月 13日 星期二 22:02:26 CST2017年 06月 13日 星期二 22:02:28 CST2017年 06月 13日 星期二 22:02:30 CST2017年 06月 13日 星期二 22:02:32 CST12345678910
通过上面的文件,可以看到test.log在不停的追加数据。
到hdfs中进行查看,效果如下:
[root@hadoop1 ~]# hdfs dfs -ls /Found 5 items
drwxr-xr-x - root supergroup 0 2017-06-13 12:01 /40000drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume
-rw-r--r-- 3 root supergroup 3719 2017-06-10 12:11 /kms.sh
drwxrwxrwx - root supergroup 0 2017-06-10 22:06 /tmp
drwxr-xr-x - root supergroup 0 2017-06-10 22:27 /user
[root@hadoop1 ~]# hdfs dfs -ls /flumeFound 1 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout
[root@hadoop1 ~]# hdfs dfs -ls /flume/tailoutFound 1 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13Found 4 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2204[root@hadoop1 ~]# hdfs dfs -ls /flume/tailout/17-06-13Found 5 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2204drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2205[root@hadoop1 /]# hdfs dfs -ls /flume/tailout/17-06-13Found 6 items
drwxr-xr-x - root supergroup 0 2017-06-13 22:01 /flume/tailout/17-06-13/2201drwxr-xr-x - root supergroup 0 2017-06-13 22:03 /flume/tailout/17-06-13/2202drwxr-xr-x - root supergroup 0 2017-06-13 22:04 /flume/tailout/17-06-13/2203drwxr-xr-x - root supergroup 0 2017-06-13 22:05 /flume/tailout/17-06-13/2204drwxr-xr-x - root supergroup 0 2017-06-13 22:06 /flume/tailout/17-06-13/2205drwxr-xr-x - root supergroup 0 2017-06-13 22:06 /flume/tailout/17-06-13/2206[root@hadoop1 /]
通过上面的案例可以知道,增加的日志文件已经被写入到HDFS中。
❹ 大数据分析应该掌握哪些基础知识
Java基础语法
· 分支结构if/switch
· 循环结构for/while/do while
· 方法声明和调用
· 方法重载
· 数组的使用
· 命令行参数、可变参数
IDEA
· IDEA常用设置、常用快捷键
· 自定义模板
· 关联Tomcat
· Web项目案例实操
面向对象编程
· 封装、继承、多态、构造器、包
· 异常处理机制
· 抽象类、接口、内部类
· 常有基础API、集合List/Set/Map
· 泛型、线程的创建和启动
· 深入集合源码分析、常见数据结构解析
· 线程的安全、同步和通信、IO流体系
· 反射、类的加载机制、网络编程
Java8/9/10/11新特性
· Lambda表达式、方法引用
· 构造器引用、StreamAPI
· jShell(JShell)命令
· 接口的私有方法、Optional加强
· 局部变量的类型推断
· 更简化的编译运行程序等
MySQL
· DML语言、DDL语言、DCL语言
· 分组查询、Join查询、子查询、Union查询、函数
· 流程控制语句、事务的特点、事务的隔离级别等
JDBC
· 使用JDBC完成数据库增删改查操作
· 批处理的操作
· 数据库连接池的原理及应用
· 常见数据库连接池C3P0、DBCP、Druid等
Maven
· Maven环境搭建
· 本地仓库&中央仓库
· 创建Web工程
· 自动部署
· 持续继承
· 持续部署
Linux
· VI/VIM编辑器
· 系统管理操作&远程登录
· 常用命令
· 软件包管理&企业真题
Shell编程
· 自定义变量与特殊变量
· 运算符
· 条件判断
· 流程控制
· 系统函数&自定义函数
· 常用工具命令
· 面试真题
Hadoop
· Hadoop生态介绍
· Hadoop运行模式
· 源码编译
· HDFS文件系统底层详解
· DN&NN工作机制
· HDFS的API操作
· MapRece框架原理
· 数据压缩
· Yarn工作机制
· MapRece案例详解
· Hadoop参数调优
· HDFS存储多目录
· 多磁盘数据均衡
· LZO压缩
· Hadoop基准测试
Zookeeper
· Zookeeper数据结果
· 内部原理
· 选举机制
· Stat结构体
· 监听器
· 分布式安装部署
· API操作
· 实战案例
· 面试真题
· 启动停止脚本
HA+新特性
· HDFS-HA集群配置
Hive
· Hive架构原理
· 安装部署
· 远程连接
· 常见命令及基本数据类型
· DML数据操作
· 查询语句
· Join&排序
· 分桶&函数
· 压缩&存储
· 企业级调优
· 实战案例
· 面试真题
Flume
· Flume架构
· Agent内部原理
· 事务
· 安装部署
· 实战案例
· 自定义Source
· 自定义Sink
· Ganglia监控
Kafka
· 消息队列
· Kafka架构
· 集群部署
· 命令行操作
· 工作流程分析
· 分区分配策略
· 数据写入流程
· 存储策略
· 高阶API
· 低级API
· 拦截器
· 监控
· 高可靠性存储
· 数据可靠性和持久性保证
· ISR机制
· Kafka压测
· 机器数量计算
· 分区数计算
· 启动停止脚本
DataX
· 安装
· 原理
· 数据一致性
· 空值处理
· LZO压缩处理
Scala
· Scala基础入门
· 函数式编程
· 数据结构
· 面向对象编程
· 模式匹配
· 高阶函数
· 特质
· 注解&类型参数
· 隐式转换
· 高级类型
· 案例实操
Spark Core
· 安装部署
· RDD概述
· 编程模型
· 持久化&检查点机制
· DAG
· 算子详解
· RDD编程进阶
· 累加器&广播变量
Spark SQL
· SparkSQL
· DataFrame
· DataSet
· 自定义UDF&UDAF函数
Spark Streaming
· SparkStreaming
· 背压机制原理
· Receiver和Direct模式原理
· Window原理及案例实操
· 7x24 不间断运行&性能考量
Spark内核&优化
· 内核源码详解
· 优化详解
Hbase
· Hbase原理及架构
· 数据读写流程
· API使用
· 与Hive和Sqoop集成
· 企业级调优
Presto
· Presto的安装部署
· 使用Presto执行数仓项目的即席查询模块
Ranger2.0
· 权限管理工具Ranger的安装和使用
Azkaban3.0
· 任务调度工具Azkaban3.0的安装部署
· 使用Azkaban进行项目任务调度,实现电话邮件报警
Kylin3.0
· Kylin的安装部署
· Kylin核心思想
· 使用Kylin对接数据源构建模型
Atlas2.0
· 元数据管理工具Atlas的安装部署
Zabbix
· 集群监控工具Zabbix的安装部署
DolphinScheler
· 任务调度工具DolphinScheler的安装部署
· 实现数仓项目任务的自动化调度、配置邮件报警
Superset
· 使用SuperSet对数仓项目的计算结果进行可视化展示
Echarts
· 使用Echarts对数仓项目的计算结果进行可视化展示
Redis
· Redis安装部署
· 五大数据类型
· 总体配置
· 持久化
· 事务
· 发布订阅
· 主从复制
Canal
· 使用Canal实时监控MySQL数据变化采集至实时项目
Flink
· 运行时架构
· 数据源Source
· Window API
· Water Mark
· 状态编程
· CEP复杂事件处理
Flink SQL
· Flink SQL和Table API详细解读
Flink 内核
· Flink内核源码讲解
· 经典面试题讲解
Git&GitHub
· 安装配置
· 本地库搭建
· 基本操作
· 工作流
· 集中式
ClickHouse
· ClickHouse的安装部署
· 读写机制
· 数据类型
· 执行引擎
DataV
· 使用DataV对实时项目需求计算结果进行可视化展示
sugar
· 结合Springboot对接网络sugar实现数据可视化大屏展示
Maxwell
· 使用Maxwell实时监控MySQL数据变化采集至实时项目
ElasticSearch
· ElasticSearch索引基本操作、案例实操
Kibana
· 通过Kibana配置可视化分析
Springboot
· 利用Springboot开发可视化接口程序
❺ 如何利用flume从syslog获取日志
可以用几个命令能帮助呢
grep '查找关键字段' /var/log/messages|head -n 行数
grep '查找关键字段' /var/log/messages|tail -n 行数
可以用几个命令能帮助呢
grep '查找关键字段' /var/log/messages|head -n 行数
grep '查找关键字段' /var/log/messages|tail -n 行数