热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

filterdate日期插件

为什么要用date插件:我们希望日志展示的时间就是日志生成的时间,一般日志中都会附加时间,这样方便根据时间查找问题。但在logstash中

为什么要用date插件:

我们希望日志展示的时间就是日志生成的时间,一般日志中都会附加时间,这样方便根据时间查找问题。但在logstash中,默认使用@timestamp时间值来表示日志的时间,@timestamp值的获取是根据logstash本身什么时候处理这条日志数据而产生的。也就是说@timestamp并不是日志中的时间,所以不管日志是实时的还是非实时的日志,都无法保证日志产生的精确时间。所以我们就需要使用date插件来匹配日志中产生的时间并将值赋给@timestamp`,这样最后展示的时间就是日志生成时间。

常用选项:

  • match
    [field,formats...],匹配日期型字段的格式,并统一处理成ISO8086时间戳。

  • locale
    用于指定本地语言,比如设置为es,es-US等,主要用于解析非数字的月和天,比如Monday,Jan等。如果时间日期都是数字的话,不用关心这个值。

  • target
    默认@timestamp,用于指定转化后的日期保存的字段名。

  • timezone
    指定用于日期解析的时区规范。如果无法从值中提取时区,则使用此处定义的时区。如果未指定,则使用此机器上的时区

match format语法的更多详细介绍:

y year

yyyy // 全年号码,例如:2018
yy // 两位数年份,例如:2018年的18

M month

M // 最小数字月份,如1-12
MM // 两位数月份,如01-12
MMM // 缩短的月份文本,如Jan,Feb,Dec...
MMMM // 全月文本,如January..

d day

d //最少数字的一天,如1-31
dd //两位数日子,如01-31

H hour

H //最小数字小时,如0表示午夜
HH //两位数小时,如果需要填零,如午夜00

m minutes

m //最小数字分钟,如0
mm //两位数字分钟,如00

s seconds

s //最小数字秒,如0
ss //最小数字秒,如00

S 秒的小数部分,最大精度是毫秒(SSS)。除此之外,零附加

S //十分之一秒
SS //百分之一秒
SSS //千分之一秒

Z 时区偏移或身份。不能被分析

Z //时区偏移,如+0800
ZZ //时区偏移,如+08:00
ZZZ //时区身份,如America/Los_Angeles

W 一年中的一周

W //最小数字周,如1
WW //两位数字周,如01

E 一周中的天

E,EE,EEE //星期几缩写,如Mon,Tue,Wed...
EEEE //星期几全拼,如Monday,Tuesday...

例: 如果想要解析ISO8601的时间"2018-01-01T01:12:23",可以写成"yyyy-MM-dd'T'HH:mm:ss"


示例:
匹配nginx日志中的时间。

[root@node2006 logstash]# cat text.conf
input {stdin {}
}filter {dissect {mapping => {"message" => "[%{time}]|%{remote_addr}|%{verb} %{request} HTTP/%{httpversion}|%{status}|%{body_bytes_sent}"}remove_field => [ "request_all" ]remove_field => [ "message" ]}
# date {
# match => [ "time", "dd/MMM/yyyy:HH:mm:ss Z" ]
# locale => "en"
# target => "@timestamp"
# }}
output {stdout{codec => rubydebug}
}


未添加date插件(注释date代码块):


[root@node2006 logstash]# bin/logstash -f text.conf
[21/Jan/2019:14:59:49 +0800]|183.212.160.154|GET /siteapp/regionInfoApp/regions HTTP/1.1|502|166 #提供的一行nginx日志数据
....
{"body_bytes_sent" => "166","time" => "21/Jan/2019:14:59:49 +0800", #这个是匹配的time字段"@timestamp" => 2019-01-23T06:57:40.923Z, #这个是logstash处理这条日志的时间,我们肯定需要logstash处理的时间"host" => "node2006","remote_addr" => "183.212.160.154","@version" => "1","status" => "502","httpversion" => "1.1","verb" => "GET","request" => "/siteapp/regionInfoApp/regions"
}


增加date插件(打开date代码块注释):

[root@node2006 logstash]# bin/logstash -f text.conf
[21/Jan/2019:14:59:49 +0800]|183.212.160.154|GET /siteapp/regionInfoApp/regions HTTP/1.1|502|166
...
{"remote_addr" => "183.212.160.154", "status" => "502","body_bytes_sent" => "166","httpversion" => "1.1","@timestamp" => 2019-01-21T06:59:49.000Z, #timestamp的时间和time的年月日已经相同了,只是小时比time少了8小时,因为logstash将timestamp改成了UTC时间,原time时间是UTC+8,但不用担心,在kibana上,会将此时间根据你系统时进行自动调整显示。"time" => "21/Jan/2019:14:59:49 +0800", #"host" => "node2006","verb" => "GET","request" => "/siteapp/regionInfoApp/regions","@version" => "1"
}


1202606-20190123154556739-460962365.png

QA:
问:为什么一定要在logstash中将日志中获取到的时间转换成UTC时间,然后在kibana在根据实际时间在转换回来。直接使用日志的时间不可以吗?非要转换UTC时间然后再转换成展示时间。
答(个人见解):估计是为了当日志系统跨越多个时区时,方便统一查询才把时间进行统一转换。这样在UTC +0700时区发生的事故,但是人在UTC +0800时区的时间看的肯定以当地时间来看待事故发生的时间并查询日志。这样就不用考虑跨时区日志时间的问题了。


转载于:https://www.cnblogs.com/dance-walter/p/10309397.html


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 现象:[root@localhost~]#dockerrun-d-p9000:80centos:httpdbinsh-cusrlocalbinstart.shd5b2bd5a7bc ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Non-ASCIIhelponitsownisOK: ... [详细]
  • 导读执行UPDATE时,WEHRE条件列虽已有索引,但还会锁全表,肿么回事?问题描述叶师傅有次上课过程中执行UPDATE测试案例时,发现虽然WHERE条件列已有索 ... [详细]
author-avatar
哈哈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有