Logstash-基于过去30天的专用时间字段的过滤器
我有一个从物联网设备远程接收日志的应用程序。这些日志有它们真正发生时的时间戳——我处理并记录这些日志,因此在JSON日志中有一个特定的时间字段Logstash-基于过去30天的专用时间字段的过滤器,logstash,logstash-configuration,elk,Logstash,Logstash Configuration,Elk,我有一个从物联网设备远程接收日志的应用程序。这些日志有它们真正发生时的时间戳——我处理并记录这些日志,因此在JSON日志中有一个特定的时间字段原始日志时间 因此,我的每个日志文件都有一个已知的@timestamp字段,该字段表示此行写入文件的时间,还有一个原始日志时间字段,其中包含原始日志时间 现在,如果原始日志时间过去少于30天,我只想将日志转发到弹性搜索。这样做的原因是,每天的日志都有自己的索引,只有最后30个索引是热的——其他的实际上已经关闭了,我不希望它们被重新打开 我正在尝试的是: i
原始日志时间
因此,我的每个日志文件都有一个已知的@timestamp
字段,该字段表示此行写入文件的时间,还有一个原始日志时间
字段,其中包含原始日志时间
现在,如果原始日志时间过去少于30天,我只想将日志转发到弹性搜索。这样做的原因是,每天的日志都有自己的索引,只有最后30个索引是热的——其他的实际上已经关闭了,我不希望它们被重新打开
我正在尝试的是:
if [original_log_time].compareTo(ctx._source.time.plusDays(30)) <= 0 {
elasticsearch {
hosts => ["${ELASTICSEARCH_HOSTS:?ELASTICSEARCH_HOSTS environment variable is required}"]
index => "my-logs-" + original_log_time
user => "${ELASTICSEARCH_USERNAME:}"
password => "${ELASTICSEARCH_PASSWORD:}"
}
}
在以下条件下:
if [@timestamp] <= [log_index_plus_thirty] {
elasticsearch {
hosts => ["${ELASTICSEARCH_HOSTS:?ELASTICSEARCH_HOSTS environment variable is required}"]
index => "device-logs-" + log_index_date
user => "${ELASTICSEARCH_USERNAME:}"
password => "${ELASTICSEARCH_PASSWORD:}"
}
}
if[@timestamp][“${ELASTICSEARCH\u HOSTS:?ELASTICSEARCH\u HOSTS环境变量是必需的}”]
索引=>“设备日志-”+日志索引日期
用户=>“${ELASTICSEARCH\u用户名:}”
密码=>“${ELASTICSEARCH\u密码:}”
}
}
但是这在if条件的_加上_三十部分抱怨,好像这个变量不存在一样
另外,
log\u index\u date
是一个可选字段,因此不确定这是否也会导致问题?错误似乎来自您的if
语句。如果[原始日志时间],看看这是否可以消除错误?我不相信logstash中有compareTo()
。是的,logstash中似乎也没有plusDays,我尝试了其他方法,并将更新我的问题
filter {
date {
match => [ "log_index_date", "dd.MM.yyyy" ]
target => "log_index_plus_thirty"
}
ruby {
code => 'event.set("log_index_plus_thirty", LogStash::Timestamp.new(event.get("log_index_plus_thirty")+86400*30))'
}
}
if [@timestamp] <= [log_index_plus_thirty] {
elasticsearch {
hosts => ["${ELASTICSEARCH_HOSTS:?ELASTICSEARCH_HOSTS environment variable is required}"]
index => "device-logs-" + log_index_date
user => "${ELASTICSEARCH_USERNAME:}"
password => "${ELASTICSEARCH_PASSWORD:}"
}
}