我知道通过 Logstash 处理文件时没有内置的“行计数”功能(出于各种可理解和记录的原因)。但是 - 在任何给定的 Logstash 实例中应该有一种机制 - 为每个解析的行提供一个单调递增的变量/计数。
我不想采用指标路线,因为它是一种连续轮询机制(每 n 秒)。替代方案包括对日志文件进行预处理,考虑到我的特定用例,这是不可接受的。
再次,让我重申 - 我需要能够生成/读取单调递增变量,我可以将其存储在 Logstash 过滤器中。
想法?
Logstash 中没有内置任何内容来执行此操作。
您可以构建一个过滤器来轻松完成此操作
只需将类似的内容放入 lib/logstash/filters/seq.rb 即可
# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require "set"
#
# This filter will adds a sequence number to a log entry
#
# The config looks like this:
#
# filter {
# seq {
# field => "seq"
# }
# }
#
# The `field` is the field you want added to the event.
class LogStash::Filters::Seq < LogStash::Filters::Base
config_name "seq"
milestone 1
config :field, :validate => :string, :required => false, :default => "seq"
public
def register
# Nothing
end # def register
public
def initialize(config = {})
super
@threadsafe = false
# This filter needs to keep state.
@seq=1
end # def initialize
public
def filter(event)
return unless filter?(event)
event[@field] = @seq
@seq = @seq + 1
filter_matched(event)
end # def filter
end # class LogStash::Filters::Seq
每次重新启动 Logstash 时都会从 1 开始,但对于大多数情况,这是可以的。如果您需要在重新启动后保留某些内容,则需要做更多工作才能将其保留在某个地方
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)