一个input配置多个decorder,生成多分数据,放到不同的地方,即一份数据,以不同的形式存储...

继续使用nginx input的例子。

decoder本省之间无法传递数据,但是可以多个同时被一个input使用,进而实现一份数据产生多个结果。

MultiDecoder

可以实现多个

 

[hekad]
maxprocs = 2

#一个输入,读取nginx的log
[TestWebserver]
type = "LogstreamerInput"
log_directory = "/opt/modules/heka/data/nginx/"
file_match = 'access\.log'
decoder = "shipped-nginx-decoder"

#两个decorder,对同一个数据进行不同的解析,并产生不同格式的数据
[shipped-nginx-decoder]
type = "MultiDecoder"
subs = ['decoder1_regex', 'nginx_log_decorder']
cascade_strategy = "all"
log_sub_errors = true


#decoder1_regex 使用正则形式,对payload的数据进行解析,生成的数据
[decoder1_regex]
type = "PayloadRegexDecoder"
match_regex = '^(?P<RemoteIP>\S+)'

[decoder1_regex.message_fields]
Type = "regex_ip" #新生成的数据,用这个type表示,后续的ouput可以单独match到这个type
Logger = "decoder1_regex"
RemoteIP = "%RemoteIP%"


#使用lua脚本对nginx的log进行解析,解析后的数据放到了payload中
[nginx_log_decorder]
type = "SandboxDecoder"
filename = "lua_decoders/nginx_access.lua"

[nginx_log_decorder.config]
type = "nginxlog" #用于后续ouput match使用
user_agent_transform = true
log_format = '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent'


#数据写入到es中,使用的json encoder 自定对payload中的数据生成json的,可以定制
[ESJsonEncoder]
index = "heka-%{Type}-%{%Y.%m.%d}"
es_index_from_timestamp = true
type_name = "%{Type}"

    [ESJsonEncoder.field_mappings]
    Timestamp = "@timestamp"
    Severity = "level"

#nginxlog 写入到es中
[ElasticSearchOutput]
server = "http://master:9200"
message_matcher = "TRUE && Type=='nginxlog'"
encoder = "ESJsonEncoder"
flush_interval = 5000
flush_count = 10


#regex_ip写到console显示
[RstEncoder]
[LogOutput]
message_matcher = "TRUE && Type=='regex_ip'"
encoder = "RstEncoder"

 

 

结果es中,

172154_ehUX_560096.png

 

console中,

172228_3mIj_560096.png

 

多个plugin之间的连接很重要,decoder跟着input走,encoder跟着output走,decorder处理input的payload数据,生成新的filed,encoder处理数据的filed数据,生成最终格式,等待output输出到具体位置。

多个plugin之间通过match对type进行匹配。

转载于:https://my.oschina.net/weikan/blog/716320

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值