注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

试用了一下heka  

2015-04-13 11:07:22|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


1. 下载他们编译的binary的 deb包,直接安装就好了。看着自己编译的话,依赖的库很多,估计要搞半天。

2. log收集的插件流式处理的配置。
  
   [input] -> [splitter] -> [decoder] ->  [encoder] -> [output]

input 里面用 [Logstreamer Input] 监控log文件改变,把改变的内容提交给splitter。

常用的[Token Splitter]  可以把log文件容易按照 换行符 分成不同的消息。
[decoder] 负责把message的结构各个属性解析出来。
[encoder]  重新把消息内容编码为一定的格式。
[output]  根据指定的匹配规则把 某类型的消息输出到外部系统。


3. log文件不同格式的decoder插件。这个用go语言来写插件是比较麻烦的,不是不可以,只要直接面对字节流,看heka里面decoder插件一般不是用go来写的。除了protocol buffer等二进制decoder。
heka 整合了lua,弄了一个lua_sandbox https://github.com/mozilla-services/lua_sandbox
利用lua库里面 LPeg http://www.inf.puc-rio.br/~roberto/lpeg/#download  来做文本解析。
看个是因为go这语言这个模式分析还没有方便的包的缘故。当然lua脚本也有好处了,就是写插件不需要再重新编译程序了。

4. 我觉得尽量不要自己写lua插件,尽量已有的decoder按照他的格式写log就好了,这样能直接用系统已提供的log decoder就好了。

比如syslog的格式的,使用rsyslog就可以了。其实这个还不是rsyslog template的配置不同的log内容格式。可个调整一下自己的log输出格式和
template的格式,对付一般的log分析应该是没有什么压力了。
https://hekad.readthedocs.org/en/v0.9.0/config/decoders/rsyslog.html
https://github.com/mozilla-services/heka/blob/dev/sandbox/lua/decoders/rsyslog.lua

5.  [MultiDecoder]  https://hekad.readthedocs.org/en/v0.9.0/config/decoders/multi.html 
    [Payload Regex Decoder]  https://hekad.readthedocs.org/en/v0.9.0/config/decoders/payload_regex.html

这两个应该也是常用插件。heka的插件配置还是不够友好的,不能直接配置流式处理的上下游的插件。这个[MultiDecoder] 的作用就是让你可以调用多个decoder进行多次出来。
[Payload Regex Decoder] 可以按照配置正则表达式,修改msg的内容,msg内容的转换,分类,属性的添加等都可以使用这个插件。

6. [Statsd]  [Anomaly Detection]  等统计用插件应该也是比较有意思的

7. 一个测试的配置。
hekad.toml
-------------------------------------------------
[hekad]
maxprocs = 2
# base_dir = /var/cache/hekad'
# share_dir = '/usr/share/heka'

# 会监控log文件的修改,他自己会在/var/cache/hekad 下面缓存 文件的log 内容
# ,保证不重复提交
[smsc-log-input]
type = "LogstreamerInput"
splitter = "TokenSplitter"
log_directory = "/opt/smsc/log"
file_match = 'smpp\.log'
decoder = "smsc-log-decoder"

[smsc-log-decoder]
type = "MultiDecoder"
subs = ['RsyslogDecoder', 'EventTypeDecoder']
cascade_strategy = "all"
#log_sub_errors = true


# 自己的log 也尽量按照 syslog的格式来写文件,这样就不需要在自己写lua的decoder插件了。
[RsyslogDecoder]
type = "SandboxDecoder"
filename = "lua_decoders/rsyslog.lua"

[RsyslogDecoder.config]
type = "RSYSLOG_TraditionalFileFormat"
#template = '%TIMESTAMP% %HOSTNAME% %syslogtag %syslogseverity-text% - %msg%\n'
template = '%TIMESTAMP% %HOSTNAME% %syslogtag% %syslogseverity-text% - %msg%'
tz = "Local"


[EventTypeDecoder]
type = "PayloadRegexDecoder"
match_regex = '^\[(?P<ErrorType>\w+)\](?P<MsgContent>.*i)'

# 自定义一个属性
[EventTypeDecoder.message_fields]
error_type = "%ErrorType%"
# 覆盖默认的消息内容,设置为后面的正则匹配里面后面一段内容
Payload= "CRITICAL:%MsgContent%"
Type = 'nagios-external-command'

# 只打印 消息内容
[PayloadEncoder]
append_newlines = false

# 这个会打印message的所有属性出来
[RstEncoder]


[LogOutput]
# message_matcher 指定要处理的消息类型,可以根据 各个消息属性的值进行过滤等等
message_matcher = "TRUE"
#encoder = "PayloadEncoder"
encoder = "RstEncoder"

[NagiosOutput]
url = "http://192.168.4.217/nagios/cgi-bin/cmd.cgi"
username = "nagiosadmin"
password = "admin"
message_matcher = "Type == 'nagios-external-command' && Fields[error_type] != nil"


# 运行 heka
# hekad -config=/opt/smsc/cfg/hekad.toml
-----------------------------------------------------





  评论这张
 
阅读(895)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017