一、背景
项目统一升级ELK,原来的版本已经不适配新的集群,需要升级elk版本,升级的过程中很多配置改变,记录下相关操作。
这里只记录logstash的相关配置。
二、相关配置
我们都知道logstash配置文件的主要格式如下
input {
}
filter {
}
output {
}
原来项目使用的是2.3.4版本的logstash,升级到新版本后相关的配置发生了改变。
2.3.4版本input
input {
kafka{
group_id => "group_id"
auto_offset_reset => "smallest"
topic_id => "topic_id "
zk_connect => "zk地址"
codec => "json"
}
}
6.7版本input
input {
kafka{
group_id => "group_id"
auto_offset_reset => "earliest"
topics => ["topics"]
bootstrap_servers => "kafka集群地址"
codec => "json"
}
}
6.7版本时区问题
由于需要统一时间解析格式(“yyyy-MM-dd’T’HH:mm:ss.SSS’+08:00’”),所以添加了 timestamp 字段
我们可以参考ruby相关的格式化文档
code => "event.set('timestamp', event.get('@timestamp').time.localtime.strftime('%Y-%m-%dT%H:%M:%S.%3N%:z'))"
我们可以看到time字段格式化为需要的格式了。
同时为了解决偏移8小时时区的问题,添加了 index_date 字段,通过gsub将该字段变换为
yyyy.MM.dd格式的显示
ruby {
code => "event.set('index_date', event.get('@timestamp').time.localtime + 8*60*60)"
}
我们看下完整的filter格式
filter {
#增加偏移时区,设置新字段 index_date
ruby {
code => "event.set('index_date', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {
code => "event.set('timestamp', event.get('@timestamp').time.localtime.strftime('%Y-%m-%dT%H:%M:%S.%3N%:z'))"
}
mutate {
convert => ["index_date", "string"]
gsub => ["index_date", "T([\S\s]*?Z)", ""]
gsub => ["index_date", "-", "."]
}
}
在output中使用上面新生成的field
output {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "myindex-%{index_date}"
user => "elastic"
password => "changeme"
}
stdout {
codec => rubydebug
}
}
简单的配置就完成了