使用 date 插件解析字段中的日期,然后使用该日期或时间戳作为事件的 logstash 时间戳。对于排序事件和导入旧数据,日期过滤器尤其重要。如果您在事件中没有得到正确的日期,那么稍后搜索它们可能会出现问题。

如果时间戳尚未在事件中设置,logstash 将根据第一次看到事件(在输入时)创建一个时间戳。例如,对于文件输入,时间戳设置为每次读取的时间。

本文演示如何把现有的日志数据导入到 elasticsearch 中,并用日志中的时间信息设置事件的时间戳。

拆分日志信息

比如我们的日志格式如下:

[Trace] [e1a618cf-186f-49c5-b486-111e1e5f0023] [//] [:: ]

第一个字段为 loglevel,第二个字段标识 SessionID,第三个字段是产生日志的日志,第四个字段是产生日志的时间,第三、四字段记录的是本地时间,即东八区区时(哈哈,居然不是记一个 UTC 时间戳!)。

我们先使用下面的 grok 规则切分出日志中的字段:

filter {
grok {
match => {
"message" => "\[%{LOGLEVEL:loglevel}\]\s*\[(?<SessionID>.*)\]\s*\[(?<Date>%{YEAR}/%{MONTHNUM}/%{MONTHDAY})\]\s*\[(?<Time>%{HOUR}:%{MINUTE}:%{SECOND} %{INT})\]"
}
}
}

得到 json 格式的日志记录如下(Grok Debugger 的输出):

{
"loglevel": [
[
"Trace"
]
],
"SessionID": [
[
"e1a618cf-186f-49c5-b486-111e1e5f0023"
]
],
"Date": [
[
"2019/03/25"
]
],
"Time": [
[
"23:47:20 618"
]
]
}

合并日期和时间字段

把分散的两个字段合并为时间戳字段,并移除 Date 和 Time 字段:

filter {
mutate {
add_field => { "Datetime" => "%{Date} %{Time}" }
}
mutate {
remove_field => ["Date"]
}
mutate {
remove_field => ["Time"]
}
}

拼出来的 DateTime 字段中的内容格式为:

"2019/03/25 23:47:20 618"

为事件设置时间戳

下面使用 date 插件解析字段中的日期,然后使用该日期或时间戳作为事件的 logstash 时间戳:

filter {
mutate {
add_field => { "logtime" => "%{Datetime}" }
}
date {
timezone => "Asia/Chongqing"
match => ["logtime", "yyyy/MM/dd HH:mm:ss SSS"]
target => "@timestamp"
remove_field => [ "logtime" ]
}
}

这里使用了一个临时字段 logtime 来保存时间戳,原因是 date 插件会把该字段的类型转换为 date,使用一个临时的字段就不会影响到 Datetime 字段的类型(这也是自定义 @timestamp 时的常用手法)。
注意上面的 timezone 配置,如果日志中的信息是以 UTC 格式保存的,就不需要指定时区。但是笔者处理的日志中,时间信息保存的是东八区的区时,因此需要指定时区信息,date 插件才能把它转换为 UTC 时间。
下图是该记录导入后在 Kibana 中显示的情况,可以看到日期信息和时间戳是一致的:

参考:
Date filter plugin

Logstash filter 插件之 date的更多相关文章

  1. Logstash filter 插件之 grok

    本文简单介绍一下 Logstash 的过滤插件 grok. Grok 的主要功能 Grok 是 Logstash 最重要的插件.它可以解析任意文本并把它结构化.因此 Grok 是将非结构化的日志数据解 ...

  2. logstash过滤器插件filter详解及实例

    1.logstash过滤器插件filter 1.1.grok正则捕获 grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据弄成结构化和方便查询的结 ...

  3. ElasticSearch7.3学习(三十二)----logstash三大插件(input、filter、output)及其综合示例

    1. Logstash输入插件 1.1 input介绍 logstash支持很多数据源,比如说file,http,jdbc,s3等等 图片上面只是一少部分.详情见网址:https://www.elas ...

  4. Logstash filter 的使用

    原文地址:http://techlog.cn/article/list/10182917 概述 logstash 之所以强大和流行,与其丰富的过滤器插件是分不开的 过滤器提供的并不单单是过滤的功能,还 ...

  5. logstash之Filter插件

    Logstash之所以强悍的主要原因是filter插件:通过过滤器的各种组合可以得到我们想要的结构化数据 1:grok正则表达式 grok**正则表达式是logstash非常重要的一个环节**:可以通 ...

  6. logstash常用插件解析

    官方地址:https://www.elastic.co/guide/en/logstash-versioned-plugins/current/index.html 配置文件写法: # 日志导入inp ...

  7. 日志分析平台ELK之日志收集器logstash常用插件配置

    前文我们了解了logstash的工作流程以及基本的收集日志相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13761906.html:今天我们来了解下l ...

  8. logstash filter 处理json

    根据输入的json字段,分别建立索引.循环生成注册log和登录log保存到testlog文件中,结果如下: {"method":"register"," ...

  9. Logstash的插件

    Logstash的插件: input插件: File:从指定的文件中读取事件流: 使用FileWatch(Ruby Gem库)监听文件的变化. .sincedb:记录了每个被监听的文件的inode, ...

随机推荐

  1. springboot自动装配(3)---条件注解@Conditional

    之前有说到springboot自动装配的时候,都是去寻找一个XXXAutoConfiguration的配置类,然而我们的springboot的spring.factories文件中有各种组件的自动装配 ...

  2. Nginx(二)--nginx的核心功能

    反向代理 nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理. proxy_pass 既可以是ip地址,也可以是域名,同时还可以指定端 ...

  3. SecureCRT安装包和破解脚本

    第一步下载 SecureCRT安装包和破解脚本 下载 http://pan.baidu.com/s/1c1D5Ala 破解脚本 securecrt_mac_crack.pl安装包scrt-7.3.7- ...

  4. 你不知道的JavaScript(上)this和对象原型(二)

    第三章 对象 1.语法 两种形式定义:声明(文字)形式和构造形式 (1)文字语法大概是这样 1 var myObj = { 2 key: value 3 // ... 4 }; (2)构造形式大概是这 ...

  5. Linux中的 date 使用

    01. 日期格式字符串列表 %H 小时(以00-23来表示). %I 小时(以01-12来表示). %K 小时(以0-23来表示). %l 小时(以0-12来表示). %M 分钟(以00-59来表示) ...

  6. PHP中抽象类和接口的区别

    抽象类 抽象类无法被实例化,它的作用是为所有继承自它的类定义(或部分实现)接口. 使用 abstract 关键字定义抽象类. 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下,一个抽象类至 ...

  7. 【高可用架构】开发机上部署Deploy项目(一)

    准备 部署项目的细节可以看这个,传送门Centos 7部署Laravel项目 主机IP:192.168.10.17 [高可用架构]系列链接:待部署的架构介绍 演示 部署Deploy composer ...

  8. C# ling to sql 左表连接

    var begin_daily = from a in _postgreDbContext.tab1 join b in _postgreDbContext.tab2 on a.id equals b ...

  9. 南邮CTF - Writeup

    南邮CTF攻防平台Writeup By:Mirror王宇阳 个人QQ欢迎交流:2821319009 技术水平有限~大佬勿喷 ^_^ Web题 签到题: 直接一梭哈-- md5 collision: 题 ...

  10. Builder模式的目的是解耦构建过程,为什么要用内部类?

    还没有看过Builder模式的作用,看过一篇介绍Builder模式的文章,这里是关于Builder模式的思考:思考是否有比新建一个内部类更好的方法,首先想到的是 package xyz.n490808 ...