一个关于heka采集系统的问题
2014-12-24 15:54
281 查看
配置架构:
a. [b]Heka’s Agent/Aggregator架构[/b]
b:以一台agent为例进行说明,agent1配置文件如下:
aggregator配置如下:
2. 问题描述:通过以上配置以后本应该可以将nginx log文件中数据发送到aggregator,并显示出来,但实际上并未显示;
3. 解决方法:
a. 修改protobuf.go中的Decode接口:
通过以上代码可以看出我们是将Unmarshal接口中的第一个参数pack.MsgBytes修改为pack.Message.Payload这样既可将agent端发送的数据在aggregator正确解析,但因pack.Message.Payload是string类型,不太建议这种修改方式;
b 修改http_listen_input.go:
这样通过修改后,在protobuf Decode时直接将pack.MsgBytes 进行Unmarshal即可;
a. [b]Heka’s Agent/Aggregator架构[/b]
b:以一台agent为例进行说明,agent1配置文件如下:
[NginxLogInput] type = "LogstreamerInput" log_directory = "/usr/local/openresty/nginx/logs/" file_match = 'access\.log' decoder = "NginxLogDecoder" hostname = "ID:XM_1_1" [NginxLogDecoder] type = "SandboxDecoder" filename = "lua_decoders/nginx_access.lua" [NginxLogDecoder.config] log_format = '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"' type = "nginx-access" [ProtobufEncoder] [NgxLogOutput] type = "HttpOutput" message_matcher = "TRUE" address = "http://127.0.0.1:10000" method = "POST" encoder = "ProtobufEncoder" # [NgxLogOutput.headers] # content-type = "application/octet-stream" # [NgxLogOutput] # type = "LogOutput" # message_matcher = "TRUE" # encoder = "ProtobufEncoder"
aggregator配置如下:
[LogInput] type = "HttpListenInput" #parser_type = "message.proto" address = "0.0.0.0:10000" decoder = "ProtobufDecoder" [ProtobufDecoder] [ESJsonEncoder] index = "%{Type}-%{2006.01.02}" es_index_from_timestamp = true type_name = "%{Type}" [PayloadEncoder] [LogOutput] type = "LogOutput" message_matcher = "TRUE" encoder = "ESJsonEncoder"
2. 问题描述:通过以上配置以后本应该可以将nginx log文件中数据发送到aggregator,并显示出来,但实际上并未显示;
3. 解决方法:
a. 修改protobuf.go中的Decode接口:
if err = proto.Unmarshal([]byte(*pack.Message.Payload), pack.Message); err == nil { // fmt.Println("ProtobufDecoder:", string(pack.MsgBytes)) //fmt.Println("ProtobufDecoder", pack.Message.Fields) packs = []*PipelinePack{pack} } else { atomic.AddInt64(&p.processMessageFailures, 1) }
通过以上代码可以看出我们是将Unmarshal接口中的第一个参数pack.MsgBytes修改为pack.Message.Payload这样既可将agent端发送的数据在aggregator正确解析,但因pack.Message.Payload是string类型,不太建议这种修改方式;
b 修改http_listen_input.go:
pack.Message.SetSeverity(int32(6)) if hli.conf.UnescapeBody { unEscapedBody, _ := url.QueryUnescape(string(body)) pack.Message.SetPayload(unEscapedBody) } else { pack.Message.SetPayload(string(body)) } pack.MsgBytes = body //添加这个赋值
这样通过修改后,在protobuf Decode时直接将pack.MsgBytes 进行Unmarshal即可;
相关文章推荐
- 关于重装系统后,Windows和Linux双系统只能进入一个的问题
- 一个小的知识点关于java获取系统时间的问题
- 关于 "ARM嵌入式系统开发--软件设计与优化" 这本书中的一个问题
- 一个关于“系统架构图怎么画?”的问题
- 一个关于webservice的Axis问题 Processing file deploy.wsdd Exception: deploy.wsdd (系统找不到指定的文件。)
- 关于Android7.0系统使用webview遇到的一个问题(二级跳转后界面空白)
- 关于一个系统的调试问题
- 关于系统(ios7+)自带的向右滑动手势返回上一个界面的一个问题
- 关于移动设备上GIS系统开发的一个问题(EVC+MapXMobile)
- 关于2000系统资料共享的一个小问题
- 关于caffe与深入理解计算机系统的一个问题
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 关于一个系统软件置顶的问题
- 一个关于空气质量采集系统的设计与实现
- 关于2.3系统使用FrameLayout遇到的一个问题
- 纯属巧合,解决了一个困扰许久的问题,关于网卡设置时提示“系统找不到指定文件”。
- 关于更新windows Service Pack 3 更新后系统登录出现“一个问题阻止Windows正确检查机器的许可证。错误代码 0x80070002”问题解决方案
- 关于移动设备上GIS系统开发的一个问题(EVC+MapXMobile)
- 关于一个简单ATM系统的UML建模——问题描述&词汇表&领域类图
- 关于C语言For循环的一个问题~!