Heka的正则表达式读取Monolog日志文件

时间:2014-03-25 08:12:01

标签: regex kibana monolog

我想让Heka读取我的Monolog文件(所以我可以使用Kibana查看它们),但它一直告诉我没有匹配。

这是我的Heka配置中的match_regex

match_regex = "^\\[(?P<Timestamp>.*)\\] (?P<Channel>.+?)\\.(?P<Severity>[A-Z]+): (?P<Message>.*)"

以下是日志中的示例行

[2014-03-24 19:07:08] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate"

根据regex101(see here),正则表达式非常好。然而,赫拉告诉我没有比赛。

有人可以指出我正确的方向,我昨天花了一整天努力让这个工作。

编辑:我可以找到关于Heka和Monolog的唯一文档是这些幻灯片here

编辑:我刚发现:https://regoio.herokuapp.com/

这告诉我它应该使用以下内容:

match_regex = '^\[(?P<Timestamp>.*)\] (?P<Channel>.+?)\.(?P<Severity>[A-Z]+): (?P<Message>.*)'

但事实并非如此。

1 个答案:

答案 0 :(得分:1)

显然我昨天没有正确清醒,确认正则表达式正确15次后,我意识到我已经忘记了

[LogOutput]
 message_matcher = "TRUE"

[ElasticSearchOutput]
 message_matcher = "TRUE"

在我的hekad.toml文件中

我的完整文件现在看起来像这样:

[pos_log]
type = "LogfileInput"
logfile = "/home/sam/git/PosBranch/app/logs/dev.log"
decoder = "monolog_decoder"

[monolog_decoder]
type = "PayloadRegexDecoder"
match_regex = '^\[(?P<Timestamp>.*)\] (?P<Channel>.+?)\.(?P<Severity>[A-Z]+): (?P<Message>.*)'
timestamp_layout = "2006-01-02 15:04:05"
timestamp_location = "UTC" # optional, default value

[monolog_decoder.severity_map]
DEBUG = 7
INFO = 6
NOTICE = 5
WARNING = 4
ERROR = 3
CRITICAL = 2
ALERT = 1
EMERGENCY = 0

[monolog_decoder.message_fields]
Type = "monolog_log"
Logger = "sam"
Hostname = "local"
Channel = "%Channel%"
Message = "%Message%"
Payload = ""

[LogOutput]
 message_matcher = "TRUE"

[ElasticSearchOutput]
 message_matcher = "TRUE"

并且消息现在正在滚动到kibana:)