【问题标题】:Logstash Grok overwrite not workingLogstash Grok 覆盖不起作用
【发布时间】:2016-11-25 09:34:39
【问题描述】:

如果字段包含字符串“Caused”,我有以下 logstash grok 语句应该运行,在这种情况下,会对其应用不同的模式并且它会被覆盖,但由于某种原因它确实有效。正则表达式模式肯定是单独工作的,问题出在下面的逻辑中。任何帮助表示赞赏,谢谢

grok {
        patterns_dir => ["./patterns"]
        match => ["message", "%{GREEDYDATA}\n%{JAVA_EXCEPTION_SHORT:exception}"]
}

if [exception] =~ "Caused" {
         grok {
            patterns_dir => ["./patterns"]
            match => ["exception", "{JAVA_EXCEPTION_LONG:exception}"]
            overwrite => ["exception"]
        }
}

自定义模式:

JAVA_EXCEPTION_LONG (?<=^Caused by: ).*?Exception
JAVA_EXCEPTION_SHORT ^.+Exception

示例日志消息:

2016-11-15 05:19:28,801 ERROR [App-Initialisation-Thread] appengine.java:520 Failed to initialize external authenticator myapp Support Access || appuser@vm23-13:/mnt/data/install/assembly app-1.4.12@cad85b224cce11eb5defa126030f21fa867b0dad
java.lang.IllegalArgumentException: Could not check if provided root is a directory
    at com.myapp.io.AbstractRootPrefixedFileSystem.checkAndGetRoot(AbstractRootPrefixedFileSystem.java:67)
    at com.myapp.io.AbstractRootPrefixedFileSystem.<init>(AbstractRootPrefixedFileSystem.java:30)
    at com.myapp.io.s3.S3FileSystem.<init>(S3FileSystem.java:32)
    at com.myapp.io.s3.S3FileSystemDriver.loadFileSystem(S3FileSystemDriver.java:60)
    at com.myapp.io.FileSystems.getFileSystem(FileSystems.java:55)
    at com.myapp.authentication.ldap.S3LdapConfigProvider.initializeCloudFS(S3LdapConfigProvider.java:77)
    at com.myapp.authentication.ldap.S3LdapConfigProvider.loadS3Config(S3LdapConfigProvider.java:51)
    at com.myapp.authentication.ldap.S3LdapConfigProvider.getLdapConfig(S3LdapConfigProvider.java:42)
    at com.myapp.authentication.ldap.DelegatingLdapConfigProvider.getLdapConfig(DelegatingLdapConfigProvider.java:45)
    at com.myapp.authentication.ldap.LdapExternalAuthenticatorFactory.create(LdapExternalAuthenticatorFactory.java:28)
    at com.myapp.authentication.ldap.LdapExternalAuthenticatorFactory.create(LdapExternalAuthenticatorFactory.java:10)
    at com.myapp.frob.appengine.getExternalAuthenticators(appengine.java:516)
    at com.myapp.frob.appengine.startUp(appengine.java:871)
    at com.myapp.frob.appengine.startUp(appengine.java:754)
    at com.myapp.jsp.KewServeInitContextListener$1.run(QServerInitContextListener.java:104)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.nio.file.NoSuchFileException: fh-ldap-config/
    at com.upplication.s3fs.util.S3Utils.getS3ObjectSummary(S3Utils.java:55)
    at com.upplication.s3fs.util.S3Utils.getS3FileAttributes(S3Utils.java:64)
    at com.upplication.s3fs.S3FileSystemProvider.readAttributes(S3FileSystemProvider.java:463)
    at com.myapp.io.AbstractRootPrefixedFileSystem.checkAndGetRoot(AbstractRootPrefixedFileSystem.java:61)

【问题讨论】:

  • 没有任何日志来测试您的 conf,我认为问题在于比较 (if [exception] =~ "Caused")
  • 谢谢@baudsp 我已经添加了附加信息,我也试过这个:if "Caused" in [exception] {},但也不成功
  • 但我觉得,异常详细说明了文件丢失?你确定罪魁祸首是 if 条件?
  • 错误信息是 grok 语句解析的示例,而不是 ELK 的输出

标签: logstash elastic-stack logstash-grok


【解决方案1】:

grok 过滤器失败,因为您在此行中缺少 %:

match => ["exception", "{JAVA_EXCEPTION_LONG:exception}"]

应该是这样的:

match => ["exception", "%{JAVA_EXCEPTION_LONG:exception}"]

由于解析失败,exception 字段没有被覆盖。

【讨论】:

  • 谢谢!我不敢相信我没有注意到它!成功了
  • @Arturski 不客气!我在尝试使用 grokconstructor.appspot.com/do/match#result 测试模式时发现了它,这对于测试 grok 模式非常有用。
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2021-03-31
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多