我想让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>.*)'
但事实并非如此。
答案 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:)