我正在使用logstash 2.4和kafka输入5.1.6。在我的配置中,我创建了一个名为input_lag的字段,以监控logstash处理日志所需的时间:
ruby {
code => "event['lag_seconds'] = (Time.now.to_f - event['@timestamp'].to_f)"
}
我从单个logstash实例中听取几个kafka主题,并且对于定期生成日志的主题,一切正常,滞后很小(几秒钟)。但是,对于不规则地产生少量日志的主题,我会遇到很大的滞后。有时它是几万秒。 我对Kafka输入的配置如下:
input {
kafka {
bootstrap_servers => "kafka-broker1:6667,kafka-broker2:6667,kafka-broker3:6667"
add_field => { "environment" => "my_env" }
topics_pattern => "a|lot|of|topics|like|60|of|them"
decorate_events => true
group_id => "mygroup1"
codec => json
consumer_threads => 10
auto_offset_reset => "latest"
auto_commit_interval_ms => "5000"
}
}
logstash实例看起来很健康,因为正在定期检索来自其他主题的日志。我已经检查过,如果我使用其控制台消费者连接到Kafka,那么延迟日志就在那里。我还认为,单个logstash实例提供太多主题并将这些小主题提取到单独的logstash实例可能会出现问题但滞后完全相同,所以这不是问题。
有什么想法吗?我怀疑logstash可能会使用一些指数延迟来进行日志检索,但不知道如何确认和修复它。
答案 0 :(得分:0)
仍缺少一些信息:
@timestamp
延迟日志在那里 - &#39>那里'在卡法卡意味着什么?
如果我们没有使用date
过滤器来更改此字段,@timestamp
应该是读取日志条目的时间。
在这种情况下,滞后到秒,所以我想使用date
过滤器,这里的时间戳是生成日志的时间。
当使用Kafka输入插件来消费消息时,它将在服务器响应之前等待一段时间。这可以通过两个选项配置:
您可以在配置文件中查看它们。
Logstash批量处理输入日志以提高性能,因此如果没有足够的日志,它将等待一段时间。
您可以在logstash.yml
中查看。
Logstash本身具有生成的度量信息,结合Elasticseach和Kibana,可以非常方便地使用。所以我建议你试一试。