最佳实践:系统日志如何采集?
优采云 发布时间: 2020-12-22 10:18最佳实践:系统日志如何采集?
在大数据采集简介中,我们知道大数据采集的来源通常分为日志数据,Web数据,数据库数据和其他数据。对于不同的数据源,所使用的数据采集的方法和技术也不同。本文将简要介绍系统日志。
-
系统日志是非常关键的组件,可以记录有关系统中的硬件,软件和系统问题的信息,包括系统日志,应用程序日志和安全日志。
最初,日志的主要目标用户是软件工程师,因为系统日志信息对于确定故障的根本原因或减小系统攻击的范围非常关键。工程师阅读日志信息以解决问题。
系统日志使工程师可以快速了解失败或攻击之前的所有事件,还可以用于检查错误原因或查找攻击者在攻击发生时留下的痕迹。
当然,为虚拟化环境开发好的系统日志策略也很重要,因为系统日志需要与许多不同的外部组件关联。
系统日志策略可以在发生故障后立即向用户发送警告消息,从而帮助您在最短的时间内找到问题。
如今,大量机器日夜处理日志数据,供离线和在线分析系统使用,以生成可读的报告,以帮助人类做出决定。
-
许多公司的业务平台每天都会生成大量日志数据,并且通常都是流数据,例如搜索引擎PV和查询。要处理这些日志并从中提取信息,需要特定的日志系统。这些系统通常要求具有以下特征:
图:来自Internet的典型日志采集系统的总体结构*敏*感*词*
当前用于系统日志采集的海量数据采集的最广泛使用的工具是:
上述工具全部采用分布式架构,可以满足日志数据采集和每秒数百MB的传输要求。
下面以Flume为例介绍系统日志采集方法。
-
Flume是一个高度可用,高度可靠的分布式*敏*感*词*日志采集,聚合和传输系统。作为日志采集工具,它非常轻巧。基于每个Flume Agent,它可以构建一个非常复杂且功能强大的日志采集系统。
Flume的灵活性和优势,高可用性,高可靠性和可伸缩性是日志采集系统的基本特征,主要体现在以下几点:
1.模块化设计:在其Flume Agent中可以定义三个组件:源,通道,*敏*感*词*;
2.组合设计:Source,Channel和Sink的三个组件可以根据业务需要在Flume Agent中组合,以建立相对复杂的日志流管道;
3.插件设计:可以通过配置文件来安排采集日志管道的过程,从而减少对Flume代码的入侵;
4.可扩展性:我们可以根据业务需求自定义某些组件(源,通道,*敏*感*词*);
5.支持各种主流系统和框架的集成:例如Hadoop,HBase,Hive,Kafka,ElasticSearch,Thrift,Avro等,可以与Flume很好地集成;
6.高级功能:故障转移,负载平衡,*敏*感*词*等。
-
Flume支持在日志系统中自定义各种数据发送者以进行数据采集。同时,Flume能够简单地处理数据并将其写入各种数据接收者(例如文本,HDFS,HBase等)。
Flume的核心是从数据源(源)采集数据,然后将采集的数据发送到指定的目的地(Smk)。
为了确保传递过程的成功,数据将被缓存到通道,然后再发送到目的地。数据实际到达目的地后,Flume将删除缓存的数据。整个过程大致如下图所示:
图片:Flume的基本概念,源自网络
Flume的数据流由事件运行。事件是通过封装传输的数据获得的,并且是Flume进行数据传输的基本单位。
如果是文本文件,则该事件通常是行记录。事件携带日志数据并携带头信息。这些事件由代理外部的数据源生成。当Source捕获事件时,它将执行特定的格式,然后Source将事件推入(单个或多个)通道。
通道可以看作是缓冲区,它将保存事件,直到*敏*感*词*处理事件为止。 Sink负责保留日志或将事件推送到另一个源。
-
Flume的用法非常简单,主要是编写用户配置文件。在配置文件中描述Source,Channel和Sink的特定实现,然后运行一个Agent实例。
在运行Agent实例的过程中,将读取配置文件的内容,以便Flume 采集获取数据。
Flume提供了大量内置的Source,Channel和Sink类型,并且可以灵活地组合不同类型的Source,Channel和Sink。
编写配置文件的原理如下。
1)从整体上描述了代理中的源,*敏*感*词*和通道所涉及的组件。
#Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
2)详细描述了代理中每个Source,Sink和Channel的具体实现,也就是说,您需要指定Source的类型,是接收文件,HTTP还是Thrift。
对于Sink,您需要指定结果是输出到HDFS还是HBase。
对于Channel,您需要指定格式是内存,数据库还是文件。
#Describe/configure the source
al.sources.r1.type = netcat
al.sources.r1.bind = localhost
al.sources.r1.port = 44444
#Describe the sink
a1.sinks.k1.type = logger
#Use a channel which buffers events in memory.
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactioncapacity = 100
3)通过通道连接源和*敏*感*词*。
#Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
4)启动代理的外壳操作。
flume-ng agent -n a1 -c ../conf -f ../conf/example.file\
-Dflume.root.logger = DEBUG,console
参数说明如下。
“-n”指定 Agent 的名称(与配置文件中代理的名字相同)。
“-c"指定 Flume 中配置文件的目录。
“-f”指定配置文件。
“-Dflume.root.logger = DEBUG,console”设置日志等级。
参考:
通过系统日志采集大数据