AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 867469
Accepted
spoovy
spoovy
Asked: 2017-08-09 01:30:35 +0800 CST2017-08-09 01:30:35 +0800 CST 2017-08-09 01:30:35 +0800 CST

Logtash grok / 多行混淆

  • 772

我的真实模式更复杂,但我试图将问题归结为核心问题。我不明白的东西。请在http://grokconstructor.appspot.com/do/match上试试这个

我正在尝试匹配以下几行:

Start-Date: 2017-08-07  06:48:12
End-Date: 2017-08-07  06:48:12

Start-Date: 2017-08-07  12:55:16
End-Date: 2017-08-07  12:56:01

使用附加模式:

DATE_EU2 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[\s]+?%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
DATE_COMB %{DATE_EU2}?%{DATE_EU}?%{DATE_US}?

以及以下主要模式:

Start-Date: %{DATE_COMB:starttime}\nEnd-Date: %{DATE_COMB:endtime}

使用多行过滤器:

^\n (negated)

运行它,你应该(希望!)得到:

Start-Date: 2017-08-07 06:48:12 End-Date: 2017-08-07 06:48:12 Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01
MATCHED
starttime   2017-08-07··06:48:12
endtime 2017-08-07··06:48:12
after match:    Start-Date: 2017-08-07 12:55:16 End-Date: 2017-08-07 12:56:01

所以它匹配第一个记录但不匹配第二个记录。如果我在主模式的末尾添加一个 '\z' ,那么它将匹配第二条记录但不匹配第一条记录。因此,它显然将整个事情视为一条线。但为什么?我的多行过滤器指出,如果一行不以换行符开头,它是上一条记录的一部分,对吗?那么这应该在中间留下一个空白行,显然确实以换行符开头,因此应该包含一个单独的事件,不是吗?

任何指点都感激地接受。

logstash
  • 1 1 个回答
  • 2667 Views

1 个回答

  • Voted
  1. Best Answer
    USD Matt
    2017-08-09T01:57:02+08:002017-08-09T01:57:02+08:00

    输入

    Start-Date: 2017-08-07  06:48:12
    End-Date: 2017-08-07  06:48:12
    
    Start-Date: 2017-08-07  12:55:16
    End-Date: 2017-08-07  12:56:01
    

    多行过滤器 = ^\n(否定)

    多行过滤器将依次查看每一行以查看应该合并的内容。

    First line starts with `^Start-Date` (merged)
    Second line starts with `^End-Date` (merged)
    Third line is blank (merged, unless logstash skips blank lines)
    Fourth line starts with `^Start-Date` (merged)
    Fifth line starts with `^End-Date` (merged)
    

    试图匹配 a \n,尤其是在一行的开头是没有意义的。

    您最好^End-Date:将其与以前的匹配和合并。(或者如果一个事件有更多行,并且它总是以 开头Start-Date:,匹配它并否定。

    根据 Grok 构造函数的注释和测试进行编辑。

    如果使用空行作为记录分隔符更有意义,^\z或者^\Z似乎可以工作。\Z忽略任何最终终止符,但\z在我的测试中也可以看到,它似乎确认该行在传递到过滤器时是一个完全空的字符串(没有换行符或任何其他终止字符)。

    • 3

相关问题

  • 字段类型在 Kibana/Elasticsearch 中不受欢迎

  • Collectd --> Elasticsearch 如果远程主机无法连接到中央弹性搜索

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve