一个关于heka采集系统的问题

  1. 配置架构:

    a. Heka’s Agent/Aggregator架构

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. 解决方法:修改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正确解析;

时间: 2025-01-15 18:56:17

一个关于heka采集系统的问题的相关文章

架构设计:系统间通信(32)——其他消息中间件及场景应用(下2)

(接上文<架构设计:系统间通信(31)--其他消息中间件及场景应用(下1)>) 5-3.解决方案二:改进半侵入式方案 5-3-1.解决方法一的问题所在 方案一并不是最好的半侵入式方案,却容易理解架构师的设计意图:至少做到业务级隔离.方案一最大的优点在于日志采集逻辑和业务处理逻辑彼此隔离,当业务逻辑发生变化的时候,并不会影响日志采集逻辑. 但是我们能为方案一列举的问题却可以远远多于方案一的优点: 需要为不同开发语言分别提供客户端API包.上文中我们介绍的示例使用JAVA语言,于是 事件/日志采集

Linux服务器集群VPN代理配置

因为之前本科参与开发的一个互联网新闻采集系统需要爬取几个国外的新闻站点,通过FQ才能访问,而我们的服务器是阿里云服务器,没有操作界面,而且抽取任务是定时执行,必须要实现程序控制VPN的连接与断开.所以就学习如何在linux上利用命令行和脚本操作建立VPN连接,单纯探索的过程没少走弯路,所以把经验分享出来供大家学习. 一.L2TP简介 LinuxFQ一般利用L2TP协议进行VPN的连接操作,建立连接需要拥有L2TP的服务器IP,用户名,密码和共享秘钥,这是合作方清华大学提供的代理信息(为了保密,密

请讲普通话——一场关于异构平台通信的风波(粘包&#183;大小端方式&#183;网络字节序)

一.引子 前段时间用StriveEngine做一个信息采集系统,服务器是Windows的,客户端是各种单片机,以及Unix等等平台.这些异构的平台,被我召集起来“加强对话, 扩大共识, 深化合作”.都说有人的地方就有江湖,讲真,机器世界也一样!这些异构的平台,平日里各自为政,井水不犯河水,倒也相安无事.如今群雄会盟,共商大计,如我所料,势必会上演一波真正的血雨腥风! 就像新闻联播里常说的,“加强对话, 扩大共识, 深化合作”,首先得“加强对话”吧. 看着各位爷陆续到场,我稍稍清了清嗓子,不揣冒昧

RabbitMQ下的生产消费者模式与订阅发布模式

??所谓模式,就是在某种场景下,一类问题及其解决方案的总结归纳.生产消费者模式与订阅发布模式是使用消息中间件时常用的两种模式,用于功能解耦和分布式系统间的消息通信,以下面两种场景为例: 数据接入 ??假设有一个用户行为采集系统,负责从App端采集用户点击行为数据.通常会将数据上报和数据处理分离开,即App端通过REST API上报数据,后端拿到数据后放入队列中就立刻返回,而数据处理则另外使用Worker从队列中取出数据来做,如下图所示. ??这样做的好处有:第一,功能分离,上报的API接口不关心

记一次企业级爬虫系统升级改造(二):基于AngleSharp实现的抓取服务

爬虫系统升级改造正式启动: 在第一篇文章,博主主要介绍了本次改造的爬虫系统的业务背景与全局规划构思: 未来Support云系统,不仅仅是爬虫系统,是集爬取数据.数据建模处理统计分析.支持全文检索资源库.其他业务部门和公司资讯系统重要数据来源.辅助决策等功能于一身的企业级Support系统. 介于好多园友对博主的任务排期表感兴趣,便介绍一下博主当时针对这个系统做的工作任务排期概要(排期表就是更加详细细分外加估算工时的一份excel表格,就不贴出来了): 1.总分四大阶段,逐步上线,最终达到预期规划

一场关于异构平台通信的风波(粘包&#183;大小端方式&#183;网络字节序)

一.引子 前段时间用StriveEngine做一个信息采集系统,服务器是Windows的,客户端是各种单片机,以及Unix等等平台.这些异构的平台,被我召集起来“加强对话, 扩大共识, 深化合作”.都说有人的地方就有江湖,讲真,机器世界也一样!这些异构的平台,平日里各自为政,井水不犯河水,倒也相安无事.如今群雄会盟,共商大计,如我所料,势必会上演一波真正的血雨腥风! 就像新闻联播里常说的,“加强对话, 扩大共识, 深化合作”,首先得“加强对话”吧. 看着各位爷陆续到场,我稍稍清了清嗓子,不揣冒昧

Python分布式爬虫原理

转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作者,摘要,正文等信息 (3)存储到硬盘中 上面的三个过程,映射到技术层面上,其实就是:网络请求,抓取结构化数据,数据存储. 我们使用Python写一个简单的程序,实现上面的简单抓取功能. [python] view plain copy #!/usr/bin/python #-*- coding: 

全球100款大数据工具汇总(前50款)

01  Talend Open Studio 是第一家针对的数据集成工具市场的ETL(数据的提取Extract.传输Transform.载入Load)开源软件供应商.Talend的下载量已超过200万人次,其开源软件提供了数据整合功能.其用户包括美国国际集团(AIG).康卡斯特.电子港湾.通用电气.三星.Ticketmaster和韦里逊等企业组织. 02 DYSON 探码科技自主研发的DYSON智能分析系统,可以完整的实现大数据的采集.分析.处理.DYSON智能分析系统专业针对互联网数据抓取.处

一个采集系统的构建

整个系统: 采集系统: