Logstash,grok 过滤器不适用于固定长度字段
Posted
技术标签:
【中文标题】Logstash,grok 过滤器不适用于固定长度字段【英文标题】:Logstash, grok filter not working for fixed length fields 【发布时间】:2015-11-13 15:08:37 【问题描述】:我是 logstash 的新手,我有一个带有固定长度字段的输入文件和一个使用正则表达式配置的 log stash 配置文件,如下所示:
我的日志存储配置文件 first-pipeline.conf 的内容
# The # character at the beginning of a line indicates a comment. Use
# comments to describe your configuration.
input
file
path => "/Users/priya/sample.log"
start_position => beginning
filter
grok
match => ["message", "(?<RECORD_CODE>.1)(?<SEQUENCE_NUMBER>.6)(?<REG_NUMBER>.12)(?<DATA_TYPE>.3)"]
output
stdout
我的 sample.log 文件的内容:
50000026311000920150044236080000000026
5000003631100092015005423608000000002
5000004631100092015006615054962
我从日志存储中得到的输出是:
priyas-MacBook-Pro:bin priya$ ./logstash -f first-pipeline.conf
Default settings used: Filter workers: 2
Logstash startup completed
有人可以帮我调试问题并让它工作吗?
感谢和问候, 普里亚
【问题讨论】:
有人能帮帮我吗 - 我不知道出了什么问题,相同的正则表达式模式在 grok 调试器中工作正常 - 但它不在配置文件中。没有日志 - 我不知道如何继续 【参考方案1】:我认为您的问题不是 grok 表达式本身,而是文件输入读取您的测试文件的方式。
文件输入会记住它上次从日志文件中读取的位置,并在后续运行中继续从该位置读取(它将此索引存储在名为 since_db 的特殊文件中)。 start_position => "beginning" 仅在您第一次启动 logstash 时有效,在随后的运行中,它将从上次结束的位置开始读取,这意味着您不会在控制台中看到任何新行,除非您 a.) 在文件中添加新行或 b.) 手动删除 since_db 文件(sincedb_path => null 在 Windows 下不起作用,至少在我上次尝试时)。
所以恕我直言,您应该首先确保您的 grok 工作正常。只需将 stdin 输入添加到您的输入部分,如下所示:
input
stdin
file
path => "/Users/priya/sample.log"
start_position => beginning
现在您可以手动创建logstash 事件,只需在控制台中输入并按回车即可。这些事件将被解析为常规的 logstash 事件,您还将在控制台中看到生成的 json(由 stdout 输出 fitler 完成)。
确定 grok 正常工作后,您可以检查 logstash 是否按照您的预期获取文件内容。重新启动 logstash 并在 /Users/priya/sample.log 文件中添加新的数据行(不要忘记新行末尾的 newcline/CR 否则不会被拾取)。如果 logstash 选择新行,它应该出现在您的控制台输出中(因为您添加了 stdout 输出过滤器)。
【讨论】:
感谢 Markus - 帮助了!以上是关于Logstash,grok 过滤器不适用于固定长度字段的主要内容,如果未能解决你的问题,请参考以下文章