我正在使用 logstash 过滤器插件处理的文件中有多个日志消息。然后,过滤后的日志将被发送到 elasticsearch。
日志消息中有一个名为 addID 的字段。我想删除所有存在特定 addID 的日志消息。这些特定的 addIDS 存在于 ID.txt 文件中。
如果日志消息的 addID 与 ID.txt 文件中存在的任何 addID 匹配,则应删除该日志消息。我正在使用红宝石过滤器来实现这一点。
场景:问题是,如果我使用的字典文件以 MB 为单位,那么当我手动停止管道时,logstash 挂起并且我收到错误的文件描述符错误。但是,如果我在 KB 中使用文件,一切正常。
我尝试将 LS_HEAP_SIZE 更改为 4g。没有什么对我有用。
谁能帮助我实现这一目标?
下面是我的配置文件。
input {
file {
path => "/Users/jshaw/logs/access_logs.logs
ignore_older => 0
}
}
filter {
grok {
patterns_dir => ["/Users/jshaw/patterns"]
match => ["message", "%{TIMESTAMP:Timestamp}+{IP:ClientIP}+{URI:Uri}"]
}
kv{
field_split => "&?"
include_keys => [ "addID" ]
allow_duplicate_values => "false"
add_field => { "IS_BAD_IP" => "false" }
}
if [ClientIP] {
ruby{
code => 'if File.open("/Users/jsaw/mapping/badIP.txt").lines.any?{|line|line.include?(event["ClientIP"])}
event["IS_BAD_IP"] = "true"
end'
}
if "true" in [IS_BAD_IP]{
drop { }
}
}
output {
elasticsearch{
hosts => ["localhost:9200"]
}
}