日志接入es与hdfs流程

日志接入es与hdfs流程

Filebeat

轻量级日志采集工具,代替logstash部署在采集机,可减轻采集机机器压力。

Filebeat解压即可使用。

Filebeat注册为系统服务:

PowerShell.exe -ExecutionPolicy UnRestricted -File install-service-filebeat.ps1

修改配置文件filebeat.yml

filebeat.prospectors:

- input_type: log

paths:

- C:\logs\*log

exclude_lines: ["^#"]

 

output.kafka:

hosts: ["x.x.x.x:6667"]

topic: beats

version: 0.10.0

 

Input参数

paths

/var/log/* /*.log

encoding

指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的。

input_type

指定文件的输入类型log(默认)或者stdin

exclude_lines

在输入中排除符合正则表达式列表的那些行。

include_lines

包含输入中符合正则表达式列表的那些行(默认包含所有行),include_lines执行完毕之后会执行exclude_lines。

exclude_files

忽略掉符合正则表达式列表的文件(默认为每一个符合paths定义的文件都创建一个harvester)。

fields

向输出的每一条日志添加额外的信息,比如"level:debug",方便后续对日志进行分组统计。默认情况下,会在输出信息的fields子目录下以指定的新增fields建立子目录,例如fields.level。

fields_under_root

如果该选项设置为true,则新增fields成为顶级目录,而不是将其放在fields目录下。自定义的field会覆盖filebeat默认的field。

ignore_older

可以指定Filebeat忽略指定时间段以外修改的日志内容,比如2h(两个小时)或者5m(5分钟)。

close_older

如果一个文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h,change只会在下一次scan才会被发现

force_close_files

Filebeat会在没有到达close_older之前一直保持文件的handle,如果在这个时间窗内删除文件会有问题,所以可以把force_close_files设置为true,只要filebeat检测到文件名字发生变化,就会关掉这个handle

scan_frequency

Filebeat以多快的频率去prospector指定的目录下面检测文件更新(比如是否有新增文件),如果设置为0s,则Filebeat会尽可能快地感知更新(占用的CPU会变高)。默认是10s。

document_type

设定Elasticsearch输出时的document的type字段,也可以用来给日志进行分类。log

harvester_buffer_size

每个harvester监控文件时,使用的buffer的大小。16384

max_bytes

日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。

multiline

适用于日志中每一条日志占据多行的情况,比如各种语言的报错信息调用栈。

tail_files

如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,而不是从文件开始处重新发送所有内容。

backoff

Filebeat检测到某个文件到了EOF之后,每次等待多久再去检测文件是否有更新,默认为1s。

max_backoff

Filebeat检测到某个文件到了EOF之后,等待检测文件更新的最大时间,默认是10秒。

backoff_factor

定义到达max_backoff的速度,默认因子是2,到达max_backoff后,变成每次等待max_backoff那么长的时间才backoff一次,直到文件有更新才会重置为backoff。

spool_size

spooler的大小,spooler中的事件数量超过这个阈值的时候会清空发送出去(不论是否到达超时时间)。

idle_timeout

spooler的超时时间,如果到了超时时间,spooler也会清空发送出去(不论是否到达容量的阈值)。

registry_file

记录filebeat处理日志文件的位置的文件

config_dir

如果要在本配置文件中引入其他位置的配置文件,可以写在这里(需要写完整路径),但是只处理prospector的部分。

publish_async

是否采用异步发送模式(实验功能)。

Kafka输出参数

hosts

["localhost:9092"]

topic

`%{[type]}`

partition.hash

策略默认为 hash。可选项还有 random round_robin

reachable_only

false

version

0.10.0

retry.max

获取元数据最大尝试次数3

retry.backoff

Lead选举时等待间隔250ms

refresh_frequency

刷新元数据间隔10m

worker

线程数1

max_retries

失败重试次数3

bulk_max_size

单次请求数目2048

timeout

Broker响应超时时间30s

broker_timeout

Ack超时时间10s

channel_buffer_size

每个broker缓存条数256

keep_alive

0

compression

gzip

max_message_bytes

Message最大字节1000000

required_acks

可选项有 -10 1。分别代表:等待全部副本完成、不等待、

等待本地完成。

flush_interval

两个producer调用等待时间

client_id

beats

 

kafka

应用kafka缓冲数据及多消费的特点,可对同一份数据写入es及hdfs。

(HDP2.5,kafka0.10.0)

修改参数:

log.dirs

zookeeper.connect

 

Logstash

Logstash消费kafka中的数据,正则解析后写入es

修改配置:

config/jvm.options

-Xms256m

-Xmx1g

 

logstash.yml

http.host: "10.0.0.26"

http.port: 9678

 

新建conf/kafka2es.conf

input {

kafka {

bootstrap_servers => "10.0.0.26:6667"

group_id => "logstash"

topics => ["beats"]

codec => json

auto_offset_reset => "latest"

}

}

 

filter {

if [type] == "log" {

#ignore log comments

if [message] == "" or [message] == "null" {

drop {}

}

grok {

# check that fields match your IIS log settings

match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:site} %{WORD:method} %{URIPATH:page} %{NOTSPACE:querystring} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clienthost} %{NOTSPACE:useragent} %{NOTSPACE:refer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:scstatus} %{NUMBER:time_taken}"]

}

date {

match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ]

timezone => "Etc/UTC"

}

useragent {

source=> "useragent"

prefix=> "browser_"

}

mutate {

remove_field => ["log_timestamp","offset","input_type","tags","@version","beat.version"]

}

}

}

output {

elasticsearch {

hosts => "x.x.x.x:12200"

}

}

 

启动

bin/logstash -f conf/kafka2es.conf

 

Logstash配置参数

pipeline.batch.size

每次接受的条数125

pipeline.batch.delay

延迟时间5ms

pipeline.workers

2

pipeline.output.workers

1

pipeline.unsafe_shutdown

 

queue.type

memorypersisted

path.queue

Persisted数据存储目录

queue.page_capacity

Persisted每个文件大小250mb

http.host

ip

http.port

端口

node.name

主机名

path.data

data

 

 

Kafka输入参数

add_field

 

auto_commit_interval_ms

Offset提交间隔5000

auto_offset_reset

earliest: 最早的

latest: 最近的

none: throw exception

anything else: throw exception

bootstrap_servers

host1:port1,host2:port2

check_crcs

自动检查所消耗记录的CRC32这确保没有发生消息的在线或磁盘损坏。此检查会增加一些开销,因此在寻求极高性能的情况下可能会禁用此检查。

client_id

logstash

codec

plain

connections_max_idle_ms

关闭空闲连接

consumer_threads

消费线程1,与分区对应调整

decorate_events

添加kafka信息字段,false

enable_auto_commit

Offset自动提交,true

enable_metric

指标收集,true

fetch_max_wait_ms

获取数据最大等待时间,应小于等于poll_timeout_ms

fetch_min_bytes

获取数据最小字节

group_id

logstash

heartbeat_interval_ms

检测consumer加入离开,大于1/3session.timeout.ms

id

 

max_partition_fetch_bytes

从每个分区fetch的消息大小限制

max_poll_records

Poll数量限制

metadata_max_age_ms

以微秒为单位的时间,是在我们强制更新metadata的时间间隔。即使我们没有看到任何partition leadership改变

partition_assignment_strategy

对于消费者Kafka提供的两种分配策略: rangeroundrobin,由参数 partition.assignment.strategy指定,默认是range策略

poll_timeout_ms

消费者获取消息等待时间100

receive_buffer_bytes

socket的接收缓冲区 

reconnect_backoff_ms

连接失败时,当我们重新连接时的等待时间。

request_timeout_ms

消息发送的最长等待时间

retry_backoff_ms

设置Producerrefresh metadata之前要等待的时间

send_buffer_bytes

socket的发送缓冲区 

session_timeout_ms

消费者超时时间这个值必须设置在broker configuration中的group.min.session.timeout.ms 与 group.max.session.timeout.ms之间。

topics

["logstash"]

topics_pattern

 

type

 

 

 

Es输出参数

absolute_healthcheck_path

false

action

index

codec

plain

doc_as_upsert

 

document_id

 

document_type

 

enable_metric

true

failure_type_logging_whitelist

失败白名单不写日志

flush_size

小于piplinebashsize

healthcheck_path

 

hosts

["127.0.0.1:9200","127.0.0.2:9200"]

id

 

idle_flush_time

1sflush间隔时间

index

"logstash-%{+YYYY.MM.dd}"

pipeline

 

pool_max

1000

pool_max_per_route

100

resurrect_delay

5

retry_initial_interval

2

retry_max_interval

64

retry_on_conflict

当执行索引和更新的时候,有可能另一个进程正在执行更新。这个时候就会造成冲突,这个参数就是用于定义当遇到冲突时重复执行的次数1

timeout

写入es超时时间60s

routing

%{foo}

validate_after_inactivity

10000

  

 

Flume

(hdp2.5,flume1.5.2)

Flume消费kafka中的数据,将原始数据分区存入hdfs(wasb),如果用logstash则会写入原生的hdfs而不会写入wasb。

 

新建配置

flume-conf.properties

#-------agent------

# 定义sources

agent.sources = kafkaSource

# 定义channels

agent.channels = memoryChannel

# 定义sinks

agent.sinks = hdfsSink

agent.sources.kafkaSource.channels = memoryChannel

agent.sinks.hdfsSink.channel = memoryChannel

#-------- kafkaSource-----------------

agent.sources.kafkaSource.type = org.apache.flume.source.kafka.KafkaSource

agent.sources.kafkaSource.zookeeperConnect = x.x.x.x:2181/eskafka

agent.sources.kafkaSource.topic = beats

agent.sources.kafkaSource.groupId = hdfs

agent.sources.kafkaSource.kafka.consumer.timeout.ms = 10000

#------- memoryChannel-------------------------

agent.channels.memoryChannel.type = memory

agent.channels.memoryChannel.capacity=10000

agent.channels.memoryChannel.transactionCapacity=1000

#---------hdfsSink ------------------

agent.sinks.hdfsSink.type = hdfs

agent.sinks.hdfsSink.hdfs.path = /user/test/%Y%m%d

agent.sinks.hdfsSink.hdfs.writeFormat = Text

agent.sinks.hdfsSink.hdfs.fileType = DataStream

agent.sinks.hdfsSink.hdfs.rollInterval = 600

agent.sinks.hdfsSink.hdfs.rollSize = 128000000

agent.sinks.hdfsSink.hdfs.rollCount = 0

agent.sinks.hdfsSink.hdfs.idleTimeout = 600

agent.sinks.hdfsSink.hdfs.minBlockReplicas= 1

 

启动

nohup bin/flume-ng agent --conf conf --conf-file conf/flume-conf.properties --name agent &

 

Hdfssink参数

path

写入hdfs的路径,需要包含文件系统标识,比如:hdfs://namenode/flume/webdata/,可以使用flume提供的日期及%{host}表达式。

filePrefix

默认值:FlumeData

写入hdfs的文件名前缀,可以使用flume提供的日期及%{host}表达式。

fileSuffix

写入hdfs的文件名后缀,比如:.lzo .log等。

inUsePrefix

临时文件的文件名前缀,hdfs sink会先往目标目录中写临时文件,再根据相关规则重命名成最终目标文件;

inUseSuffix

默认值:.tmp

临时文件的文件名后缀。

rollInterval

默认值:30

hdfs sink间隔多长将临时文件滚动成最终目标文件,单位:秒

如果设置成0,则表示不根据时间来滚动文件;

rollSize

默认值:1024

当临时文件达到该大小(单位:bytes)时,滚动成目标文件;

如果设置成0,则表示不根据临时文件大小来滚动文件;

rollCount

默认值:10

events数据达到该数量时候,将临时文件滚动成目标文件;

如果设置成0,则表示不根据events数据来滚动文件;

idleTimeout

默认值:0

当目前被打开的临时文件在该参数指定的时间(秒)内,没有任何数据写入,则将该临时文件关闭并重命名成目标文件;

batchSize

默认值:100

每个批次刷新到HDFS上的events数量;

codeC

文件压缩格式,包括:gzip, bzip2, lzo, lzop, snappy

fileType

默认值:SequenceFile

文件格式,包括:SequenceFile, DataStream,CompressedStream

当使用DataStream时候,文件不会被压缩,不需要设置hdfs.codeC;

当使用CompressedStream时候,必须设置一个正确的hdfs.codeC值;

maxOpenFiles

默认值:5000

最大允许打开的HDFS文件数,当打开的文件数达到该值,最早打开的文件将会被关闭;

minBlockReplicas

默认值:HDFS副本数

写入HDFS文件块的最小副本数。

该参数会影响文件的滚动配置,一般将该参数配置成1,才可以按照配置正确滚动文件。

writeFormat

sequence文件的格式。包含:Text, Writable(默认)

callTimeout

默认值:10000

执行HDFS操作的超时时间(单位:毫秒)

threadsPoolSize

默认值:10

hdfs sink启动的操作HDFS的线程数。

rollTimerPoolSize

默认值:1

hdfs sink启动的根据时间滚动文件的线程数。

round

默认值:false

是否启用时间上的"舍弃",这里的"舍弃",类似于"四舍五入",如果启用,则会影响除了%t的其他所有时间表达式;

roundValue

默认值:1

时间上进行"舍弃"的值;

roundUnit

默认值:seconds

时间上进行"舍弃"的单位,包含:second,minute,hour

timeZone

默认值:Local Time

时区。

useLocalTimeStamp

默认值:flase

是否使用当地时间。

closeTries

默认值:0

hdfs sink关闭文件的尝试次数;

如果设置为1,当一次关闭文件失败后,hdfs sink将不会再次尝试关闭文件,这个未关闭的文件将会一直留在那,并且是打开状态。

设置为0,当一次关闭失败后,hdfs sink会继续尝试下一次关闭,直到成功。

retryInterval

默认值:180(秒)

hdfs sink尝试关闭文件的时间间隔,如果设置为0,表示不尝试,相当于于将hdfs.closeTries设置成1.

serializer

默认值:TEXT

序列化类型。其他还有:avro_event或者是实现了EventSerializer.Builder的类名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值