filter - date 日期插件
为什么要用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"
}
QA:
问:为什么一定要在logstash中将日志中获取到的时间转换成UTC时间,然后在kibana在根据实际时间在转换回来。直接使用日志的时间不可以吗?非要转换UTC时间然后再转换成展示时间。
答(个人见解):估计是为了当日志系统跨越多个时区时,方便统一查询才把时间进行统一转换。这样在UTC +0700时区发生的事故,但是人在UTC +0800时区的时间看的肯定以当地时间来看待事故发生的时间并查询日志。这样就不用考虑跨时区日志时间的问题了。
filter - date 日期插件的更多相关文章
- boostrap 日期插件(带中文显示)
不知道大家用什么样的日期插件,我最近用了bootstrap插件,整理了下,分享给大家,第四部分是我找的插件源码,可以省去大家的找的时间,按1-3的步骤用就好了,有些样式上的小问题就自己调一调: (1) ...
- 求大神帮解答calendar日期插件的问题
小颖最近公司的项目里用了一款日期插件 calendar.js 但是在用的过程中遇到了难题,就是当日期只需要选择具体的月份就可以了,不需要再选具体日期时,小颖解决不了,只能让它默认显示出月份,但是月 ...
- 轻量级的日期插件--datebox
jquery的日期插件有好几款,H5中的input也可以自带日期选择.但为什么要再写一个,有两个理由,一个是引用的文件太大,而有时候只需要很简单的功能,二个是想加一些自定义的效果不好改. 我写的这个功 ...
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- My97DatePicker日期插件
My97DatePicker是一款优秀的日期插件,它可以很方便地实现各种日期选择效果,博得广大IT开发人员的青睐. 下面来讲讲它的常用功能及设置方法. 方法/步骤 先来最简单的配置方法: (1)下 ...
- 基于JS功能强大的日期插件Kalendae
开发中需要一个日期插件,可以在zepto下使用,可以选择日期段,可以设置不可选日期 找到一个完全满足的,并且基于JS不依赖于任何库. 在线演示:http://chipersoft.com/Kalend ...
- jsp日期插件My97DatePicker
jsp日期插件My97DatePicker 强大的日期控件 使用方便简单 (2010-10-30 18:59:12) 转载▼ 标签: js javascript 日期插件 jsp it 分类: jqu ...
- (转)jQuery Mobile 移动开发中的日期插件Mobiscroll 2.3 使用说明
(原)http://www.cnblogs.com/hxling/archive/2012/12/12/2814207.html jQuery Mobile 移动开发中的日期插件Mobiscroll ...
- jquery移动端日期插件
不说多的,直接看代码<!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
随机推荐
- 我是sb
哪能倒在这? 细节很多的题怎么写????sb 考完再也不学了,太jb痛苦了. 总因为一些奇奇怪怪的原因导致我
- CF1120D Power Tree(构造题,差分,最小生成树)
很有趣的一道题. 首先可以对每个叶子进行编号.按照DFS到的顺序即可.(假设从 $1$ 到 $k$) 然后对每个点求出它管辖的所有叶子的编号.因为是DFS序所以这一定是个区间.设点 $u$ 的这个区间 ...
- webpack 配置多入口文件,输出多出口文件
const path = require('path') module.exports = { // 入口文件的配置项 entry: { // 入口文件 entry: './src/entry.js' ...
- 【Gamma】测试报告
测试方法及过程 在正式发布前,我们对后端代码.前后端接口.服务器以及前端的页面和功能做了多种测试,主要包括对后端代码的单元测试.针对接口的测试.压力测试以及功能测试. 后端代码单元测试 该部分测试主要 ...
- websocket通信1009错误,
问题说明: springboot继承 WebSocketConfigurer实现websocket通信服务,服务器端报错,"The decoded text message was too ...
- c语言之连接符
c语言之连接符 1.连接符 连接符的概念是结合define预编译指令的使用技巧,用户可以向define中传入字符串来调用不同功能的函数. 2.代码例子 #include <stdio.h> ...
- 测试效率加倍提升!shell 高阶命令快来 get 下!
背景 目前大部分的项目都是部署在Linux系统上,作为测试,掌握常用Linux命令是必须的技能.很多的工作了好几年的测试人员可能还只会简单的ls.cd.cat等等这些命令,这些命令是可以应付工作的大部 ...
- [转帖]【rinetd】CentOS7.x上轻量级TCP转发工具rinetd的安装配置
[rinetd]CentOS7.x上轻量级TCP转发工具rinetd的安装配置 https://www.jianshu.com/p/2605d247b944 这一个写的更加全面了. 2019.07.0 ...
- Golang 调用 C/C++,例子式教程
大部分人学习或者使用某样东西,喜欢在直观上看到动手后的结果,才会有继续下去的兴趣. 前言: Golang 调用 C/C++ 的教程网上很多,就我目前所看到的,个人见解就是比较乱,坑也很多.希望本文能在 ...
- Codeforces Round #557 (Div. 1) 简要题解
Codeforces Round #557 (Div. 1) 简要题解 codeforces A. Hide and Seek 枚举起始位置\(a\),如果\(a\)未在序列中出现,则对答案有\(2\ ...