elasticsearch,log4j,Syntax,Filter,elasticsearch,Log4j" /> elasticsearch,log4j,Syntax,Filter,elasticsearch,Log4j" />

Syntax 在elasticsearch-logging yml语法中向appender添加筛选器

Syntax 在elasticsearch-logging yml语法中向appender添加筛选器,syntax,filter,elasticsearch,log4j,Syntax,Filter,elasticsearch,Log4j,我使用的是ElasticSearchV1.3.2 我想打开缓慢搜索执行时间的日志记录,但我想过滤掉针对marvel的搜索 Elasticsearch似乎说,我们可以根据log4j v1.2文档定制日志记录(请参阅ww.Elasticsearch.org/guide/en/Elasticsearch/reference/current/setup configuration.html的底部) 我已经看过log4jv1.2文档(、和),看起来我应该能够向索引搜索文件appender添加一个strin

我使用的是ElasticSearchV1.3.2

我想打开缓慢搜索执行时间的日志记录,但我想过滤掉针对marvel的搜索

Elasticsearch似乎说,我们可以根据log4j v1.2文档定制日志记录(请参阅ww.Elasticsearch.org/guide/en/Elasticsearch/reference/current/setup configuration.html的底部)

我已经看过log4jv1.2文档(、和),看起来我应该能够向索引搜索文件appender添加一个stringMatchFilter,但是我尝试的每一件事都会显示出来

这就是我期望在logging.yml中工作的内容:

index_search_slow_log_file:
  type: dailyRollingFile
  file: ${path.logs}/${cluster.name}_index_search_slowlog.log
  datePattern: "'.'yyyy-MM-dd"
  layout:
    type: pattern
    conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"
  filter: 
      type: stringMatchFilter
        acceptOnMatch: true
        stringToMatch: "marvel"
这就产生了以下例外情况:

log4j:WARN Failed to set property [filter] to value "stringMatchFilter".
log4j:ERROR Could not instantiate class [true].
java.lang.ClassNotFoundException: true
     at ..........
我也试过:

index_search_slow_log_file:
  ...
  filter: 
      type: stringMatch
        acceptOnMatch: true
        stringToMatch: "marvel"
以及我能想到的所有其他组合,包括删除引号

有人能看出我做错了什么吗

谢谢


Isabel

您的语法有点不完整:-),请使用下面的语法,看看它是否适合您。过滤器语法使用标识符,因此下面我的配置中的
1
。另外,请注意,如果要过滤掉“惊奇漫画”中的内容,则需要
acceptOnMatch:false

filter:
  1:
    type: org.apache.log4j.varia.StringMatchFilter
    StringToMatch: "marvel"
    AcceptOnMatch: false

我刚刚意识到,您记录到索引\u search\u slow\u log\u文件的级别可能特定于索引

因此,我实际上不需要过滤惊奇漫画日志,我可以在elasticsearch.yml中将默认值设置为no logging(即,不更改它),启用日志记录以索引\u search\u slow\u log\u文件,然后通过索引设置API设置索引特定的覆盖

elasticsearch.yml:无变化

logging.yml:

additivity:
  index.search.slowlog: true
  ...
PUT /index_name/_settings
{
  "index": {
    "search": {
      "slowlog": {
        "threshold": {
          "fetch": {
            "trace": "0ms",
            "info": "500ms",
            "warn": "1s"
          }
        }
      }
    }
  }
}
索引设置API:

additivity:
  index.search.slowlog: true
  ...
PUT /index_name/_settings
{
  "index": {
    "search": {
      "slowlog": {
        "threshold": {
          "fetch": {
            "trace": "0ms",
            "info": "500ms",
            "warn": "1s"
          }
        }
      }
    }
  }
}
要添加到答案,您还可以将匹配的意义反转为
AcceptOnMatch:true
,但这需要在后面添加一个显式的
DenyAllFilter
。完整示例如下所示:

filter:
  1:
    type: org.apache.log4j.varia.StringMatchFilter
    StringToMatch: "my-important-index"
    AcceptOnMatch: true
  2:
    type: org.apache.log4j.varia.DenyAllFilter

非常感谢。试过了,效果很好。酷,是的,我也尝试过添加标识符,但是使用完整的类名是我错过的。哎呀,哎呀,我一定是在调试过程中把‘假’也换成了‘真’了。