logstash-2.3.1按日产生索引(%{+YYYY.MM.dd})产生时间比预计晚8小时问题
由于Elasticsearch、Logstash内部,对时间类型字段,是统一采用 UTC 时间,outputs/elasticsearch中常用的 %{+YYYY.MM.dd}
这种写法必须读取 @timestamp,为了解决索引产生的时间问题,必须先解决@timestamp时区问题。结合网上资料有以下几种思路:
一:使用filter(目前使用)
filter{
ruby {
code => "event.timestamp.time.localtime"
}
}
或
filter{
ruby {
code => "event['@timestamp'] = LogStash::Timestamp.coerce(event['@timestamp'].time.localtime)"
}
}
@timestamp将采用系统当前时间
二:如果需要将日志文件中的日期映射成@timestamp,可以使用以下类似配置
filter{
date {
match => ["logdate", "yyyyMMddHHmmssSSS"]
locale => "cn"
timezone => "Asia/Shanghai"
}
}
其中logdate为需要被映射的字段,且数据格式是:yyyyMMddHHmmssSSS,如果无该字段或格式错误,将采用系统默认时间代替。
timezone也可以写成"+08:00",详见:http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html
如果需要删除logdate字段可以使用filter的mutate,配置如下
filter{
mutate {
remove_field => ["logdate"]
}
}
这样索引中将只保留@timestamp字段。
三:修改logstash相关配置文件
老版本(1.5之前的版本):
WithZone (org.Joda.Time.DateTimeZone::UTC)
修改为:
WithZone (org.Joda.Time.DateTimeZone.getDefault())
1.5以后的版本:
路径:/vendor/bundle/jruby/1.9/gems/logstash-core-(version)-java/lib/logstash/event.rb
我的例子(logstash-2.3.1):
vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/timestamp.rb
63行
UTC = org.joda.time.DateTimeZone.forID(“UTC”)
修改为:
UTC = org.joda.time.DateTimeZone.getDefault()
解决了索引中@timestamp的问题后,依然不可以解决索引(%{+YYYY.MM.dd})产生时间比预计晚8小时问题,因为%{+YYYY.MM.dd}对应日期
在UTC时依然比时间情况晚了8小时,为了解决该问题,可以使用以下方式:
一:如果使用日期映射,最简单的方法是使日志文件中的日期+8个小时
二:使用filter
filter{
ruby {
code => "event['@timestamp'] = LogStash::Timestamp.coerce(event['@timestamp'].time.localtime + 8*60*60)"
}
}
这两种方法对于那些仅通过索引计算,且不需要通过kibana等查询展示的是可以,否则, 会出现Elasticsearch 原有的 ["now-1h" TO "now"]
这种方便的搜索语句无法正常使用的尴尬,不推荐使用。
三:修改配置
logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/string_interpolation.rb
139行.withZone(org.joda.time.DateTimeZone::UTC)修改成.withZone(org.joda.time.DateTimeZone.forID('Asia/Shanghai')) 或 .withLocale(java.util.Locale::CHINA)
至于如何定位到string_interpolation.rb文件
1:使用filter的mutate删除@timestamp字段
filter{
mutate {
remove_field => ["@timestamp"]
}
}
2:重启配置会出现如下堆栈错误
LogStash::Error: Unable to format in string "YYYY.MM.dd", @timestamp field not found
evaluate at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/string_interpolation.rb:145
evaluate at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/string_interpolation.rb:90
collect at org/jruby/RubyArray.java:2409
evaluate at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/string_interpolation.rb:90
evaluate at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/string_interpolation.rb:27
sprintf at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.1-java/lib/logstash/event.rb:199
event_action_params at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.5.5-java/lib/logstash/outputs/elasticsearch/common.rb:131
event_action_tuple at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.5.5-java/lib/logstash/outputs/elasticsearch/common.rb:35
multi_receive at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.5.5-java/lib/logstash/outputs/elasticsearch/common.rb:29
map at org/jruby/RubyArray.java:2414
multi_receive at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.5.5-java/lib/logstash/outputs/elasticsearch/common.rb:29
each_slice at org/jruby/RubyArray.java:1653
multi_receive at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.5.5-java/lib/logstash/outputs/elasticsearch/common.rb:28
worker_multi_receive at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.1-java/lib/logstash/output_delegator.rb:130
multi_receive at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.1-java/lib/logstash/output_delegator.rb:114
output_batch at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.1-java/lib/logstash/pipeline.rb:301
each at org/jruby/RubyHash.java:1342
output_batch at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.1-java/lib/logstash/pipeline.rb:301
worker_loop at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.1-java/lib/logstash/pipeline.rb:232
start_workers at /home/cloud/tools/ELK/logstash-2.3.1/vendor/bundle/jruby/1.9/gems/logstash-core-2.3.1-java/lib/logstash/pipeline.rb:201
相关推荐
这个名为 "logstash-2.3.1.tar.zip" 的压缩包包含了Logstash的2.3.1版本,这是一个稳定且功能丰富的版本。通过解压这个文件,你可以获取到Logstash的所有源代码和执行文件,从而在你的系统上安装和运行它。 ...
最新版linux logstash-8.10.0-linux-x86_64.tar.gz最新版linux logstash-8.10.0-linux-x86_64.tar.gz最新版linux logstash-8.10.0-linux-x86_64.tar.gz最新版linux logstash-8.10.0-linux-x86_64.tar.gz
logstash离线安装插件步骤: 在一个联网的虚拟机上下载好插件 ./logstash-plugin install logstash-input-jdbc 查看插件是否安装 ./logstash-plugin list 打包下载好的插件(可能会有错误;多试几次) ./...
index => "syslog-%{+YYYY.MM.dd}" } } ``` 这个配置会从 `/var/log/syslog` 文件读取日志,使用 grok 过滤器解析日志格式,然后将结果发送到本地运行的 Elasticsearch 实例。 **性能优化与维护:** 1. **多线程*...
index => "app_logs-%{+YYYY.MM.dd}" } } ``` 这个配置从指定的日志文件中读取数据,解析日期和日志级别,然后将结果发送到本地Elasticsearch实例。 **8. 性能优化** 随着数据量的增长,Logstash的性能优化至关...
最新版linux logstash-8.8.0-linux-x86_64.tar.gz最新版linux logstash-8.8.0-linux-x86_64.tar.gz最新版linux logstash-8.8.0-linux-x86_64.tar.gz
**Logstash 概述** Logstash 是一个强大的开源日志管理和分析工具,由 Elastic 公司开发。它在 IT 环境中扮演着至关重要的角色,尤其在日志管理和大数据分析方面。作为 ELK(Elasticsearch, Logstash, Kibana)堆栈...
index => "app-%{+YYYY.MM.dd}" } } ``` 在这个例子中,Logstash 从指定的日志文件中读取数据,使用Grok过滤器解析日志格式,然后将处理后的数据发送到本地Elasticsearch实例的特定索引。 值得注意的是,...
Linux Logstash 7.10.0 是一个强大的开源数据收集和处理引擎,它属于 Elastic Stack(也称为 ELK Stack,包括 Elasticsearch、Logstash 和 Kibana)的一部分。这个版本的 Logstash 针对 Linux x86_64 架构进行了优化...
Logstash 是一个强大的数据收集、处理和转发工具,它是 Elastic Stack 的重要组成部分,用于日志管理和分析。在 Logstash 中,filter 阶段扮演着关键角色,它允许用户对输入的数据进行转换和解析,使其更适合进一步...
Logstash 是一个强大的开源数据收集、转换和分发工具,广泛应用于日志管理和实时数据分析领域。这个最新的版本 "logstash-7.13.2-linux-x86_64.tar.gz" 是专为Linux系统设计的64位版本,旨在提供高效的数据处理能力...
Linux Logstash 7.10.1 是一个强大的开源数据收集、处理和转发工具,它在日志管理和大数据分析领域有着广泛的应用。Logstash 主要由三个组件组成:输入(Inputs)、过滤(Filters)和输出(Outputs)。这个版本是专...
Linux Logstash是一款强大的数据收集、处理和转发工具,广泛应用于日志管理和实时数据分析场景。它作为Elastic Stack(以前称为ELK Stack)的一部分,与Elasticsearch和Kibana一起,构建了一个完整的日志分析解决...
最新版linux logstash-8.7.0-linux-x86_64.tar.gz最新版linux logstash-8.7.0-linux-x86_64.tar.gz最新版linux logstash-8.7.0-linux-x86_64.tar.gz
logstash-7.10.2-linux-x86_64.tar文件 logstash-7.10.2-linux-x86_64.tar文件 logstash-7.10.2-linux-x86_64.tar文件 logstash-7.10.2-linux-x86_64.tar文件 logstash-7.10.2-linux-x86_64.tar文件 logstash-7.10.2...
8. **社区支持**:Logstash有一个活跃的开发者和用户社区,8.3.2版本的发布意味着用户可以获得更全面的文档、示例和社区支持,帮助解决在部署和使用过程中遇到的问题。 9. **与Elasticsearch和Kibana的集成**:作为...
解压后使用,版本:logstash-input-mongodb-0.4.1 logstash离线包安装命令: Windows:logstash-plugin install file:///D:/logstash-7.5.0/logstash-input-mongodb/logstash-input-mongodb-0.4.1.zip Linux:...
index => "application-%{+YYYY.MM.dd}" } } ``` 此配置从一个文件中读取日志,使用grok解析日志格式,然后将结果发送到本地Elasticsearch实例的索引。 五、使用Logstash实践 1. 监控系统日志:Logstash可以集成...
Linux Logstash 7.12.0 是一个强大的开源数据收集、处理和转发工具,尤其在日志管理和分析领域有着广泛的应用。这个最新版本的软件是专为64位Linux系统设计的,提供了高效的数据流处理能力,帮助系统管理员和开发...
Logstash 是一个强大的开源数据收集、转换和分发工具,广泛应用于日志管理和实时数据分析场景。这个最新的Linux版本,logstash-7.16.1-linux-x86_64.tar.gz,是专为64位Linux系统设计的,旨在提供高效的数据处理能力...