kibana默认的是按照客户端的采集时间(@timestamp)进行排序,这往往不是我们所需要的,我们需要的是对日志实际时间进行排序,要解决这个问题,有很多种方法,可以在elasticsearch建立索引,不采取默认的索引模式,当然这种方法比较繁琐,需要懂得如何在elasticsearch建立索引及运用索引;今天我们主要研究的是另一种方法,通logstash的过滤插件将日志时间转换成默认@timestamp进行排序;

1、我们要解析的时间格式是标准的java日期格式:

2019-06-18 10:21:49,755

2、一般解析:

input {
stdin {}
}
filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:times}"]
}
}
output {
stdout {
codec=>rubydebug{}
}
}

将我们的时间解析出来

可以发现@timestamp为我们实际的采集时间,而time才是我们所需要的日志时间。

3、使用data插件解析:

input {
stdin {}
}
filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:times}"]
}
date {
match => ["times", "yyyy-MM-dd HH:mm:ss,SSS"]
}
}
output {
stdout {
codec=>rubydebug{}
}
}

这里的"yyyy-MM-dd HH:mm:ss,SSS"是时间格式,常用的格式有:

nginx access日志:"dd/MMM/yyyy:HH:mm:ss Z"
nginx error日志:"yyyy/MM/dd HH:mm:ss"
tomcat access日志:"dd/MMM/yyyy:HH:mm:ss Z"
tomcat catalina.out日志:"yyyy-MM-dd HH:mm:ss,SSS"

date其他详细内容介绍见官网https://www.elastic.co/guide/en/logstash/6.8/plugins-filters-date.html

通过解析可以看到已经解析出我们需要的时间,但是可以看到解析出来的时间要比实际时间少了八个小时,并且第一次解析还会有提示,大致的意思是该文件已经弃用,在低版本,是可以通过修改这个文件来修复时间,现在弃用了,只能使用配置来满足需求。具体是通过在date下添加参数,并移除多余字段。

input {
stdin {}
}
filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:times}"]
}
date {
match => ["times", "yyyy-MM-dd HH:mm:ss,SSS"]
locale => "en"
timezone => "+00:00"
remove_field => "times"
}
}
output {
stdout {
codec=>rubydebug{}
}
}

经解析

通过最后一次解析,达到了我们的需求;

有时候通过上面的方法,可能也会不成功,那么可以使用下面这种方法,在解析时间时,更新@timestamp事件的字段;虽然是默认更新,但是由于某些原因,并不能默认解析,需要手动添加

date {
match => ["times", "yyyy-MM-dd HH:mm:ss"]
target => "@timestamp"
}

到此本次研究结束,可以将配置导入到生产中!

kibana使用日志时间进行排序的更多相关文章

  1. Centos6.5使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践

    Centos6.5安装Logstash ELK stack 日志管理系统 概述:   日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的 ...

  2. squid日志时间转换

    squid日志时间是unix时间戳 不利于观看 python脚本进行转换 #!/usr/bin/env python #2014-6-5 pdd import re import time impor ...

  3. 解决vsftpd日志时间问题

    解决vsftpd日志时间问题 发布时间:August 29, 2008 分类:Linux <你必须承认土也是一种艺术> <Linux下查看Apache的请求数> 最近发现vsf ...

  4. Docker Java应用日志时间和容器时间不一致

    1.在docker容器和系统时间不一致是因为docker容器的原生时区为0时区,而国内系统为东八区. 2.还有容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时 ...

  5. Websphere设置JVM时区解决程序、日志时间快8小时问题

    原文链接:http://www.itpub.net/thread-1204714-1-1.html 相信很多使用Websphere的朋友会经常在Windows操作系统中遇到程序时间快8小时的问题 如果 ...

  6. 解决无法修改日志时间的问题(Local time zone must be set--see zic manual page 2019 )

    故障现象 系统日志时间晚了整整8个小时,比如现在是中午12点,日志时间为凌晨4点 date命令报错(Local time zone must be set--see zic manual page) ...

  7. Oracle归档日志所在目录时间不对&&Oracle集群日志时间显示错误

    Oracle归档日志所在目录时间不对&&Oracle集群日志时间显示错误 前言 这个问题在18年的时候遇到了,基本不注意并且集群或者数据库运行正常是很难注意到的. 忘记当时怎么发现的了 ...

  8. 基于python对B站收藏夹按照视频发布时间进行排序

    基于python对B站收藏夹按照视频发布时间进行排序 前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难, ...

  9. JAVA实现按列表中元素的时间字段排序

    JAVA代码实现按列表中元素的时间字段排序 导语: 工作中遇到一个问题,调用第三方接口返回的数据没有按时间倒序排列,测试说要加,然后在网上找到一个解决办法,这里记录一下 需求: 如下图列表,按生日进行 ...

随机推荐

  1. javascript 跳出循环比较

    for continue 跳出当前循环,继续下一个循环 break 结束循环 forEach 不能使用continue , break return/return false 跳出当前循环,在forE ...

  2. 一个有关Golang Deferred Function 执行顺序的问题

    先看一下一段关于defer的解释, 引自<Go程序设计语言> Syntactically, a defer statement is an ordinary function or met ...

  3. 40 insert语句的锁

    40 insert语句的锁 上一篇文章中对mysql自增主键锁做了优化,尽量在申请到自增id后,就释放自增锁. 因此,insert语句是一个很轻量的操作,不过,这个结论对于”普通的insert”才生效 ...

  4. Java课堂笔记(二):面向对象

    几乎每一本介绍Java语言的书中都会提到“面向对象”的这个概念,然而博主初学Java时看到这方面的内容一般都是草草地看一看,甚至是直接略过.原因很简单:考试基本不考,而且初学阶段写代码也很少用上.但事 ...

  5. JAVA总结--设计模式

    三大类设计模式: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为 ...

  6. Java数据结构介绍(线性结构和非线性结构)

    数据结构包括:线性结构和非线性结构. 线性结构 数据元素之间存在一对一的线性关系 包括顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 链式存储的线性表称为链表,链表 ...

  7. 问题 I: 夫子云游

    问题 I: 夫子云游 时间限制: 1 Sec  内存限制: 128 MB提交: 319  解决: 219[提交] [状态] [命题人:jsu_admin] 题目描述 改编自猫腻所著的同名小说<将 ...

  8. EA逆向生成数据库E-R图(mysql数据库-->ER图)

    [1]选择 工具-->ODBC-Data-Sources [2]ODBC数据源管理器  ,点击添加 [3]选择一个mysql驱动  ,点击MySQL ODBC 5.1 Driver(其它同理), ...

  9. 10-js对象、数组

    # js对象 ```1.使用原始的方式创建内置对象 var myObject = new Object(); myObject.name = “lijie”; myObject.age = 20; m ...

  10. Asp.Net MVC 5使用Identity之简单的注册和登陆

    由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 首先新建一个项目 其次如下选择Empty和MVC的选项 然后打开NuGet包管理器分别安装几个包 ...