在 elasticsearch 中向 appender 添加过滤器 - 记录 yml 语法
Add a filter to appender in elasticsearch - logging yml syntax
我正在使用 Elasticsearch v1.3.2。
我想打开缓慢搜索执行时间的日志记录,但我想过滤掉针对 marvel 的搜索。
Elasticsearch 似乎说我们可以根据 log4j v1.2 文档自定义日志记录(参见 w ww.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html 的底部)
我查看了 log4j v1.2 文档 (https://logging.apache.org/log4j/1.2/apidocs/index.html, and http://wiki.apache.org/logging-log4j/Log4jXmlFormat?highlight=%28filter%29),看起来我应该能够将 stringMatchFilter 添加到 index_search_slow_log_file appender,但是一切我试着吐出来。
这是我期望在 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"
以及我能想到的所有其他组合,包括删除引号。
谁能看出我做错了什么?
谢谢!
伊莎贝尔
您的语法有点不完整:-),请使用以下内容,看看它是否适合您。过滤器语法使用标识符,因此在我下面的配置中使用 1
。另外,请注意,如果你想过滤掉 "marvel" 个,那么你需要 acceptOnMatch: false
.
filter:
1:
type: org.apache.log4j.varia.StringMatchFilter
StringToMatch: "marvel"
AcceptOnMatch: false
我刚刚意识到您登录到 index_search_slow_log_file 的级别可以特定于索引。
所以我实际上不需要过滤掉 marvel 日志,我可以将默认设置为不登录 elasticsearch.yml(即不要更改它),启用登录到 index_search_slow_log_file然后通过索引设置 API.
放置一个特定于索引的覆盖
elasticsearch.yml:无变化
logging.yml:
additivity:
index.search.slowlog: true
...
索引设置API:
PUT /index_name/_settings
{
"index": {
"search": {
"slowlog": {
"threshold": {
"fetch": {
"trace": "0ms",
"info": "500ms",
"warn": "1s"
}
}
}
}
}
}
要添加到andrei-stefan's答案,您还可以将匹配意义反转为AcceptOnMatch: true
,但这需要在后面添加一个明确的DenyAllFilter
。完整示例如下所示:
filter:
1:
type: org.apache.log4j.varia.StringMatchFilter
StringToMatch: "my-important-index"
AcceptOnMatch: true
2:
type: org.apache.log4j.varia.DenyAllFilter
我正在使用 Elasticsearch v1.3.2。
我想打开缓慢搜索执行时间的日志记录,但我想过滤掉针对 marvel 的搜索。
Elasticsearch 似乎说我们可以根据 log4j v1.2 文档自定义日志记录(参见 w ww.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html 的底部)
我查看了 log4j v1.2 文档 (https://logging.apache.org/log4j/1.2/apidocs/index.html, and http://wiki.apache.org/logging-log4j/Log4jXmlFormat?highlight=%28filter%29),看起来我应该能够将 stringMatchFilter 添加到 index_search_slow_log_file appender,但是一切我试着吐出来。
这是我期望在 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"
以及我能想到的所有其他组合,包括删除引号。
谁能看出我做错了什么?
谢谢!
伊莎贝尔
您的语法有点不完整:-),请使用以下内容,看看它是否适合您。过滤器语法使用标识符,因此在我下面的配置中使用 1
。另外,请注意,如果你想过滤掉 "marvel" 个,那么你需要 acceptOnMatch: false
.
filter:
1:
type: org.apache.log4j.varia.StringMatchFilter
StringToMatch: "marvel"
AcceptOnMatch: false
我刚刚意识到您登录到 index_search_slow_log_file 的级别可以特定于索引。
所以我实际上不需要过滤掉 marvel 日志,我可以将默认设置为不登录 elasticsearch.yml(即不要更改它),启用登录到 index_search_slow_log_file然后通过索引设置 API.
放置一个特定于索引的覆盖elasticsearch.yml:无变化
logging.yml:
additivity:
index.search.slowlog: true
...
索引设置API:
PUT /index_name/_settings
{
"index": {
"search": {
"slowlog": {
"threshold": {
"fetch": {
"trace": "0ms",
"info": "500ms",
"warn": "1s"
}
}
}
}
}
}
要添加到andrei-stefan's答案,您还可以将匹配意义反转为AcceptOnMatch: true
,但这需要在后面添加一个明确的DenyAllFilter
。完整示例如下所示:
filter:
1:
type: org.apache.log4j.varia.StringMatchFilter
StringToMatch: "my-important-index"
AcceptOnMatch: true
2:
type: org.apache.log4j.varia.DenyAllFilter