文档章节

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

shawn chen
 shawn chen
发布于 2014/12/24 15:54
字数 374
阅读 919
收藏 3
  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. 解决方法:

    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即可;


© 著作权归作者所有

shawn chen
粉丝 9
博文 25
码字总数 11754
作品 2
海淀
程序员
私信 提问
美国HEKA发布全球第一款人工智能床垫

原标题:美国HEKA发布全球第一款人工智能床垫   HEKA发布HEKA AI Mattress   近期,美国高端家具定制企业HEKA宣布推出全球第一款人工智能床垫——HEKA AI Mattress。这是一款“超越想象力...

羴羴君
2018/06/18
0
0
Heka - 来自 Mozilla 的插件式数据挖掘工具

近日Mozilla Service团队首次发布了 Heka测试版(v0.2b1),Heka是一款拥有数据收集、分析、监视和报表的工具,采用 Go 语言开发。其主要组件为 hekad,一个适用于任何主机的轻量级守护程序,...

taohongfei
2013/05/03
4.8K
24
Heka配置讲解

基于Heka,ElasticSearch和Kibana的分布式后端日志架构 目前主流的后端日志都采用的标准的elk模式(Elasticsearch,Logstash,Kinaba),分别负责日志存储,收集和日志可视化。 不过介于我们...

乌龟运维
2017/07/04
0
0
Mesos在去哪儿网的应用

Mesos在Qunar DevOps团队内部的应用。 平台介绍 我们是在今年的5月份开始调研并尝试使用Mesos,第一个试点就是我们的日志平台,我们将日志分析全部托管在Mesos平台上。日志平台面向业务线开发...

openthings
2015/12/18
186
1
在 Go 语言中,正确的使用并发

Glyph Lefkowitz最近写了一篇启蒙文章,其中他详细的说明了一些关于开发高并发软件的挑战,如果你开发软件但是没有阅读这篇问题,那么我建议你阅读一篇。这是一篇非常好的文章,现代软件工程...

ifsc01
2014/04/02
6.1K
17

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
10
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部