如何编写Grok匹配模式实现Logstash日志解析提取指定字段
Grok匹配规则编写方案
原始日志样例
FMT="1358 15:41:07W19/03/21 (A) Interlocking Link 116 Restored" STY="A" AMSEQ="LINKFAIL" AMSST="RTN" ALTID="1358" TS="20210319154107" CP="LOC A" CP="LOC X" MP="104.95" MP="104.95" EQ="MDIPRIMARYOFF" POS="TC-NORTH"
目标提取字段
- Time:值为
15:41:07 - Date:值为
19/03/21 - Message:值为
Interlocking Link 116 Restored - Location:值为
LOC X
完整Logstash Filter配置
filter { grok { match => { "message" => 'FMT="%{INT:temp_unnamed} %{TIME:Time}W%{DATE_EU:Date} \(%{WORD}\) %{DATA:Message}" STY="%{DATA}" AMSEQ="%{DATA}" AMSST="%{DATA}" ALTID="%{DATA}" TS="%{DATA}" CP="%{DATA}" CP="%{DATA:Location}" MP="%{DATA}" MP="%{DATA}" EQ="%{DATA}" POS="%{DATA}"' } # 清理不需要的临时字段 remove_field => ["temp_unnamed"] } }
规则说明
- 开头的
%{INT:temp_unnamed}匹配FMT字段开头无实际意义的数字串,后续直接删除即可 %{TIME:Time}自动匹配HH:MM:SS格式的时间串,直接存入Time字段- 固定字符
W是日期和时间的分隔符,直接写死匹配即可 %{DATE_EU:Date}适配日/月/年格式的欧洲日期规则,刚好匹配19/03/21存入Date字段\(%{WORD}\)匹配括号包裹的分类标识,不需要提取就无需命名字段%{DATA:Message}匹配FMT字段内剩余的事件正文内容,存入Message字段- 按日志属性顺序匹配到第二个
CP参数时,直接将取值存入Location字段,刚好对应需要的LOC X值
内容的提问来源于stack exchange,提问作者Kamikaze K
相关产品推荐
相关产品推荐

