2

我试图让 Heka 读取我的 Monolog 文件(这样我就可以使用 Kibana 查看它们),但它一直告诉我没有匹配项。

这是我match_regex的 Heka 配置:

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(见这里),正则表达式非常好。然而海拉告诉我没有匹配。

有人可以指出我正确的方向吗,我昨天花了一整天的时间试图让它发挥作用。

编辑:我似乎能找到的关于 Heka 和 Monolog 的唯一文档是这里的这些幻灯片

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

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

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

但事实并非如此。

4

1 回答 1

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 :)

于 2014-03-25T09:32:05.157 回答