​logstash index 生成时间晚 8 小时

时间:2022-07-24
本文章向大家介绍​logstash index 生成时间晚 8 小时,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题

es存储数据索引需按照天进行分割,即logstash 每天00:00生成新的索引,观察发现logstash默认情况下生成新的索引的时间为每天的 08:00 时,导致第二天的数据会被存储到前一天索引中(kibana 查询不受影响)。分析发现 logstash 生成索引文件名中的日期是从@timestamp字段的值中获取,默认为UTC时间。

解决方案

通过设置logstash的filter模块将 timestamp中的时间转换成系统时间覆盖@timestamp时间后删除timestamp字段。

filter 配置

filter {
  ruby {
          code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
  }
  ruby {
          code => "event.set('@timestamp', event.get('timestamp'))"
  }
mutate {
    remove_field => ["timestamp"]
  }
}

logstash 配置文件

使用格式 YYYY.MM.dd.HH 查看索引生成的时间是否准确

使用 Logstash-input-jdbc 同步 zabbix mysql 告警数据至 ElasticSearch 搜索引擎

cat odbc.conf 
input {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://192.168.99.51:3306/zabbix"
    jdbc_default_timezone => "Asia/Shanghai"
    jdbc_user => "zabbix" #用户名
    jdbc_password => "******" #密码
    schedule => "* * * * *"
    jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_paging_enabled => "true"
    jdbc_page_size => "50000"
    use_column_value => false
    tracking_column => "clock"
    statement => "select * from alerts  where from_unixtime(clock) > :sql_last_value"
    tracking_column_type => "timestamp"
    type => "zabbix_alters"
  }
}

filter {
  ruby {
          code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
  }
  ruby {
          code => "event.set('@timestamp', event.get('timestamp'))"
  }
  json {
    source => "message"
  }
mutate {
    remove_field => ["timestamp"]
  }
}

output {
#  stdout {
#    codec => rubydebug
#  }
if [type] == 'zabbix_alters' {
  elasticsearch { 
    index => "zabbix_alters-%{+YYYY.MM.dd.HH}"
    hosts => ["192.168.99.185:9200"]
    document_id => "%{alertid}"
    user => "elastic"
    password => "******"    #密码
   }
 }
}

kibana 配置

默认情况 kibana 时区使用浏览器时区,修改为UTC时区即可。

管理--高级设置--日期格式时区