Logstash将日志产生时间替换@timestamp

2023-11-08

一、跟着官网学习一下date插件

      日期过滤器用于从字段中解析日期,然后使用该日期或时间戳作为事件的logstash时间戳。例如,syslog事件通常具有这样的时间戳:

Bash
"Apr 17 09:32:01"

       你可以使用日期格式MMM dd HH:mm:ss来解析这个。日期过滤器对于排序事件和回填旧数据尤为重要。 如果您在活动中没有找到正确的日期,那么稍后搜索它们可能会排序错乱。在没有这个过滤器的情况下,logstash会根据第一次看到事件(在输入时间),如果时间戳还没有在事件中设置,选择一个时间戳。 例如,在文件输入的情况下,时间戳被设置为每次读取的时间。

1.1 Date过滤器配置选项

       该插件支持以下配置选项和稍后介绍的通用选项。

locale:

      值类型是字符串,这个设置没有默认值。使用IETF-BCP47或POSIX语言标记指定用于日期分析的区域设置。 简单的例子是en,美国的BCP47或者en_US的POSIX。大多数情况下需要设置语言环境来解析月份名称(MMM模式)和星期几名称(EEE模式)。如果未指定,则将使用平台默认值,但对于非英文平台默认情况下,英文解析器也将用作回退机制。

match:

      值类型是数组,默认值是[]。首先有字段名称的数组,格式模式如下,[field,formats ...]如果你的时间字段有多种可能的格式,你可以这样做:

Bash
match => [ "logdate", "MMM dd yyyy HH:mm:ss",
          "MMM  d yyyy HH:mm:ss", "ISO8601" ]

       #以上将匹配一个系统日志(rfc3164)或iso8601时间戳。

       有一些特殊的例外。 以下格式文字可帮助您节省时间并确保日期解析的正确性。

Bash
ISO8601 - 应解析任何有效的ISO8601时间戳,如2011-04-19T03:44:01.103Z
UNIX - 将解析float或int值,表示自1346149001.132以及1326149001.132以来的秒数(以秒为单位)
UNIX_MS - 将分析int值表示unix时间(以毫秒为单位),如1366125117000
TAI64N - 将解析tai64n时间值

        例如,如果您有一个字段logdate,值类似于Aug 13 2010 00:03:44,您可以使用此配置:

Bash
filter {
  date {
    match => [ "logdate", "MMM dd yyyy HH:mm:ss" ]
  }}

      如果您的字段嵌套在结构中,则可以使用嵌套语法[foo] [bar]来匹配其值。 有关更多信息,请参阅字段参考https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#logstash-config-field-references

有关语法的更多细节 :

       用于解析日期和时间文本的语法使用字母来指示时间值(月,分等)的类型,以及重复的字母来表示该值的形式(2位月份,全月份名称等)。以下是可用于解析日期和时间的内容:

y year:

Bash
yyyy  #全年号码。 例如:2015。
yy    #两位数年份。 例如:2015年的15。

M month of the year :

Bash
M     #最小数字月份。 例如:1 for January and 12 for December.。
MM    #两位数月份。 如果需要,填充零。 例如:01 for January  and 12 for Decembe
MMM   #缩短的月份文本。 例如: Jan for January。 注意:使用的语言取决于您的语言环境。 请参阅区域设置以了解如何更改语言。
MMMM  #全月文本,例如:January。 注意:使用的语言取决于您的语言环境。

d day of the month :

Bash
d   #最少数字的一天。 例如:1月份的第一天1。
dd  #两位数的日子,如果需要的话可以填零.例如:01 for the 1st of the month。

H  hour of the day (24-hour clock):

Bash
H   #最小数字小时。 例如:0表示午夜。
HH  #两位数小时,如果需要填零。 例如:午夜00。

m minutes of the hour (60 minutes per hour):

Bash
m   #最小的数字分钟。 例如:0。
mm  #两位数分钟,如果需要填零。 例如:00。

s seconds of the minute (60 seconds per minute) :

Bash
s    #最小数字秒。 例如:0。
ss   #两位数字,如果需要填零。 例如:00。

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

Bash
S    #十分之一秒。例如:0为亚秒值012
SS   #百分之一秒 例如:01为亚秒值01
SSS  #千分之一秒 例如:012为亚秒值012

Z 时区偏移或身份

Bash
Z   #时区偏移,结构为HHmm(Zulu/UTC的小时和分钟偏移量)。例如:-0700。
ZZ  #时区偏移结构为HH:mm(小时偏移和分钟偏移之间的冒号)。 例如:-07:00。
ZZZ  #时区身份。 例如:America/Los_Angeles。 注意:有效的ID在列表中列出http://joda-time.sourceforge.net/timezones.html

z 时区名称。 时区名称(z)不能被分析。

w  一年中的一周

Bash
w  #最小数字周。 例如:1。
ww  #两位数周,如果需要填零。例如:01。

D 一年中的一天

e 星期几(数量)

E 一周中的天(文本)

Bash
E,EE,EEE  #星期几缩写。 例如:Mon, Tue, Wed, Thu, Fri, Sat, Sun。 注意:这个的实际语言将取决于您的语言环境。
EEEE   #一周中的全文。 例如:Monday, Tuesday,...注意:这个的实际语言将取决于您的语言环境。

#对于非格式化语法,您需要在值的周围放置单引号字符。 例如,如果你解析ISO8601时间,“2015-01-01T01:12:23”这个小小的“T”不是一个有效的时间格式,而你想说“从字面上看,一个T”,你的格式将是 这个:“yyyy-MM-dd’T'HH:mm:ss”

#其他不太常见的日期单位,如时代(G),世纪(C),上午/下午(一),和更多,可以了解joda-time文档:http://www.joda.org/joda-time/key_format.html

tag_on_failure :

值类型是数组,默认值是[“_dateparsefailure”]。没有成功匹配时,将值追加到标签字段

target :

值类型是字符串,默认值是“@timestamp”。将匹配的时间戳存储到给定的目标字段中。 如果未提供,则默认更新事件的@timestamp字段。

timezone:

值类型是字符串,这个设置没有默认值。指定要用于日期分析的时区标准ID。有效的ID列在Joda.org可用时区页面上。如果时区无法从数值中提取,那么这非常有用,并且不是平台默认值。 如果没有指定,将使用平台默认值。 Canonical ID是很好的,因为它为您节省了夏令时。例如,America/Los_Angeles或Europe/Paris是有效的ID。该字段可以是动态的,并使用%{field}语法包含事件的一部分

2.2 常规选项

图片.png

#前面翻译好多次了这里就不翻译了。

博文来自:www.51niux.com

二、来走一下date的小例子

2.1 先不加date过滤插件查看一下logstash的输出:

#这里搞了个三月份的旧日志来测试一下

#下面是stdout { codec => rubydebug}的输出:

Bash
                      "@timestamp" => 2017-12-20T08:39:07.982Z,
                    "request_time" => "0.040",
             "nginx.access.method" => "GET",
               "nginx.access.time" => "14/Mar/2017:00:00:02 +0800",

#如果不用 date 插件,那么 Logstash 将处理时间作为时间戳。时间戳字段是 Logstash 自己添加的内置字段 @timestamp,也就是说如果你没有设置date过滤器,时间是因为这个时间是UTC时间,那么timestamp时间呢就是比北京时间采集时间少8个小时,也就是说如果我们的采集时间是16:39:07秒,那么timestamp的时间就是08:39:07。

#下面是es上面的查看:

图片.png

图片.png

图片.png

#可以看到Kibana显示的信息跟ES里面记录的时间是不一致的,因为Logstash采集到数据之后插入到ES中,所以ES中保留的时间也是UTC的时间,创建索引也是按照Logstash里面的时间创建的。但是Kibana呢是根据你当前浏览器的时区然后再在timestamp基础上加减时间的,所以kibana显示的时间是我们以为正确的。

博文来自:www.51niux.com

3.2 加上date插件之后再来试一试

#[14/Mar/2017:06:57:12 +0800]  #怎么在logstash里面把这个转换成"2017-11-20 12:00:00",直接这种格式我是真不会......。在nginx里面还好直接指定日志格式'{"timestamp":"$time_iso8601",',然后logstash里面通过match => ["timestamp", "ISO8601"]匹配到。

#我这里将日志传送到ES集群里面也不是主要靠filebeat采集数据到Logstash,然后Logstash再进行grok转换成json格式。如果数据很大的话grok转换成json格式挺耗资源的,所以都是事先将日志通过程序转换成json格式。

Bash
{"agent":"Windows 7","client_time":"2017-11-20 12:00:00","client_ip":"123.10.91.106"}

#类似于上面这种格式当然里面的内容要很多啊,我这里特意把日志时间往前调了一个月方便对比哈。

#然后logstash直接通过file的codec => "json"格式采集就可以了,信息都是以json格式存储在logstash本地的。

$ vim /home/elk/logstash/conf/date-test.conf

Bash
input {
    file {
         path => "/usr/local/nginx/logs/access.*"
         codec => "json"
    }
}
filter {
    date {
        match => ["client_time", "yyyy-MM-dd HH:mm:ss"]   #这里是如果client_time跟后面的格式匹配上了就会去替换,替换什么呢?target默认指的就是@timestamp,所以就是以client_time的时间更新@timestamp的时间
    }
}
output {
    stdout { codec => rubydebug }
            elasticsearch {
                hosts => ["192.168.14.60","192.168.14.61","192.168.14.62","192.168.14.63","192.168.14.64"]
                index => "logstash-nginx-access-test-51niux-com-%{+YYYY.MM}"
            }
}

$ /home/elk/logstash/bin/logstash -f /home/elk/logstash/conf/date-test.conf    #启动logstash,然后插入一条测试数据类似于我上面展示的那种json格式到被采集文件中去

#logstash打印到屏幕的输出查看:

Bash
{
           "path" => "/usr/local/nginx/logs/access.log",
          "agent" => "Windows 7",
     "@timestamp" => 2017-11-20T04:00:00.000Z,   #从屏幕端的数据可以看到timestamp时间已经不是采集时间而是采集数据里面的日志时间了,只不过将时间转变成了UTC时间。
    "client_time" => "2017-11-20 12:00:00",
       "@version" => "1",
           "host" => "localhost.localdomain",
      "client_ip" => "123.10.91.106"
}

#Kibana上面的查看:

图片.png

#注意我特意标红了啊,因为当前是12月份所以你得把时间调整到十一月,也就是上图右上角的地方可以选择时间范围。

#ES上面的索引查看:

图片.png

#这其实挺有用的,因为你日志排序的时候包括分析的时候以及创建索引的时候如果你不用date转换的话,默认都是走的采集时间,如果你是实时日志那倒是差别不是太大,但是采集的日志如果不是很实时呢,比如说是离线转换格式日志,还比如说filebeat会把日志存会再发送等等,那你日志产生的时间戳就不对了,然后呢实现的思路肯定有很多,重点就是date插件这个知识点,了解掌握住就哦了,剩下的就是看需求去嗨了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Logstash将日志产生时间替换@timestamp 的相关文章

  • 单引号、双引号、倒引号

    单引号 单引号在shell中用于字符串的输出 在单引号里的字符串 所有的字符都被认为是普通的字符 即不会转译特殊字符 演示示例如下 root Centos8 echo I am a boy I am a boy root Centos8 e
  • win+e快捷键失效或恢复的解决方案

    新建xxx reg文件 加入4个注册表项 Windows Registry Editor Version 5 00 HKEY CLASSES ROOT Folder shell explore command DelegateExecute
  • 为什么根域名服务器只有 13 台?

    今天聊个有意思的话题 世界上共有 13 个根域名服务器 其中主根域名服务器是在美国 那美国有没有可能通过根域名服务器掐断中国的互联网呢 在说结论之前 我们先来了解 DNS到底是怎么工作的 为什么根域名服务器只有 13 台 美国可以让中国从互
  • RabbitMQ —— 初窥门径

    前言 RabbitMQ作为当下主流的消息中间件之一 无疑是我们Java后端开发技术成长路线的重要一环 在这篇文章中荔枝将会梳理入门RabbitMQ的知识 文章涉及RabbitMQ的基本概念及其环境配置 荔枝的RabbitMQ是在Docker
  • update_configure.sh

    bin bash Author DT Date 20190725 游戏目录 RELEASE home sealgull sealgullgame release RE TBX RELEASE tbx RE XML RELEASE Confi
  • ES嵌套(Nested)文档使用

    1 nested介绍 nested 嵌套对象 用于数组中的元素是对象的 该nested类型是object数据类型的专用版本 它允许可以彼此独立地查询它们的方式对对象数组进行索引 其他相关ES操作及介绍请参考 ElasticSearch6 5
  • Symbol.iterator的理解

    es6中有三类结构生来就具有Iterator接口 数组 类数组对象 Map和Set结构 var arr 1 2 3 4 let iterator arr Symbol iterator console log iterator next v
  • MySQL 安装指南

    本教程教你如何在基于 Ubuntu 的 Linux 发行版上安装 MySQL 对于首次使用的用户 你将会学习到如何验证你的安装和第一次怎样去连接 MySQL Sergiu MySQL 是一个典型的数据库管理系统 它被用于许多技术栈中 包括流
  • c++ 写x64汇编 5参数_V8 引擎如何生成 x64 机器码——以浮点数加法为例

    摘要 本文将主要从以下两个方面介绍 V8 引擎如何在 Intel x64 平台下生成浮点数加法的机器码 首先 从 C 语言和 x64 汇编的角度举例说明为什么浮点数加法的运算结果不准确 然后 查看 V8 引擎中生成浮点数加法机器码相关的源码
  • Qt FTP地址下载中文乱码问题

    Qt FTP地址下载中文乱码问题 前言 一 为什么乱码 二 解决办法 1 使用QUrl的编码和解码函数 2 使用时遇到的其他问题 总结 前言 最近在做Qt项目 使用FTP下载 需要存储ftp地址 ftp地址中文直接复制出现乱码如下 正常 f
  • 【2022最新Java面试宝典】—— Java集合面试题(52道含答案)

    目录 一 集合容器概述 1 什么是集合 2 集合的特点 3 集合和数组的区别 4 使用集合框架的好处 5 常用的集合类有哪些 6 List Set Map三者的区别 7 集合框架底层数据结构 8 哪些集合类是线程安全的 9 Java集合的快
  • H.265的参考帧管理

    原文地址 https blog csdn net VioletHan7 article details 81384424 文章目录 HM参考帧管理分析 1 参考帧管理的基本知识 2 HEVC参考帧集技术 RPS 3 RPS预测 4 HM中的
  • js中对象数组根据对象id去重

    js中对象数组根据对象id去重 可以使用 Array filter 方法结合 Array findIndex 方法来去重 具体实现如下 const arr id 1 name apple id 2 name banana id 1 name
  • python 图像处理(5):图像的批量处理

    有些时候 我们不仅要对一张图片进行处理 可能还会对一批图片处理 这时候 我们可以通过循环来执行处理 也可以调用程序自带的图片集合来处理 图片集合函数为 skimage io ImageCollection load pattern load
  • 最新C51单片机毕业设计选题推荐

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下是学长亲手
  • 智能垃圾分类策略

    背景介绍 随着中国经济的快速发展以及城市化水平的进一步提升 城市生活垃圾产量急剧增加 如何有效治理 垃圾围城 问题 弱化 废弃资源 对环境和人体的危害 成为当今时代的主旋律 基于上述问题 想到是否可以通过智能化垃圾分类机器人 辅助人们进行垃
  • Vue/Vue-Cli/ElementUI报错bug+使用方案合集(持续更新,建议收藏)(23-05-26更新)

    持续更新 建议收藏关注 一 Vue Vue Cli 1 Vue Router路由跳转页面下移问题 问题 通过Vue Router跳转页面时 页面不是从页面顶部显示 解决方法 在src router index js中添加以下代码 解决路由跳
  • EasyExcel导入解析数据为空

    实体 Data AllArgsConstructor NoArgsConstructor public class LayerDTO 环号 private Integer ringNumber 地层名称 private String lay
  • 2021年系统集成项目管理工程师(软考中级)连夜整理考前重点

    第一章 信息化基础知识 发布在文章里的内容没有格式化 可在我的资源中下载 原文word版下载 一 信息与信息化 1 信息论奠基者香农认为 信息就是能够用来消除不确定性的东西 8种状态需要3位比特表示 5位比特则可表示64种状态 信息 物质材
  • HIVE判断题总结

    1 hive将元数据保存在关系数据库中 大大减少了在查询过程中执行语义检查的时间 Hive stores metadata in a relational database greatly reducing semantic checkin

随机推荐

  • 【推荐收藏】1000+ Python第三方库大合集

    awesome python 是 vinta 发起维护的 Python 资源大全 内容包括 Web 框架 网络爬虫 网络内容提取 模板引擎 数据库 数据可视化 图片处理 文本处理 自然语言处理 机器学习 日志 代码分析等 本文内容较多 喜欢
  • Docker搭建Redis主从复制模式

    前言 一 docker相关命令 二 用命令方式搭建 1 创建redis主服务器redis master 成功会输出一段字符 2 创建两个redis从服务器redis slave 1和redis slave 2 3 查看启动的容器 创建后会启
  • 在单页应用中,如何优雅的上报前端性能数据

    最近在做一个较为通用的前端性能监控平台 区别于前端异常监控 前端的性能监控主要需要上报和展示的是前端的性能数据 包括首页渲染时间 每个页面的白屏时间 每个页面所有资源的加载时间以及每一个页面中所以请求的响应时间等等 本文的介绍的是如何设计一
  • 2021-07-11

    如何使用Microsoft Your Phone 很多小伙伴在Win10上想要使用 Microsoft Your Phone 的时候 发现会提示 您所在的地区不可用 解决方法很简单 不需要翻墙 在设置里将 地区 改成国外 美国英国都可以 然
  • jsp中文乱码如何解决_Kali Linux 2020版 中文乱码和中文设置问题解决方案

    kali linux 2020版 虚拟机文件默认为英语状态 好多小伙伴表示英语看的太费劲了或者出现乱码的情况 下面来教大家如何处理 以乱码为例 包含中文设置 方便大家看 以中文演示 注 因为我的新装的kali 当前用户并不是root用户 并
  • Codeforces Round #552 (Div. 3)

    A Restoring Three Numbers time limit per test 1 second memory limit per test 256 megabytes input standard input output s
  • opengl绘制的图形在前面不显示,绕到后面才显示

    具体说一下情况 就是带相机漫游功能的场景中 绘制的多边形物体 从z轴正向看的话 显然没有图像 但是把相机绕到z轴负方向就绘制出了图像 这个问题主要是因为在工程中glEnable GL CULL FACE 造成的 注释掉即可 下面摘抄自网上
  • 如何查看动态代理中$Proxy0.class文件 如何生成

    如图 System getProperties put jdk proxy ProxyGenerator saveGeneratedFiles true
  • Python socket 访问网站发送 HTTP POST请求,从而深刻理解 HTTP 协议

    用最原始的包 socket 居然可以访问网站模拟发送 POST 请求 只要发送的字符串符合 HTTP 协议 这是最大的收获 更进一步的参考 https www jianshu com p f196c74e72dd import socket
  • UE4蓝图(很经典) 间隔1秒就执行一次,间隔循环执行

    首先 我们理解一个东西 这个东西是刷新次数 一般来说就是delta就是 如果你的刷新频率为 那么delta就是1 60 0 016 所以说 每一秒中大概要60次 按刷新频率为60hz来算 这样子看呢 我的电脑就差很多了啦 不过道理都一样子
  • 系统异常重启检测-mcelog

    mcelog 是Linux 系统上用来检查硬件错误 特别是内存和CPU错误的工具 比如服务器隔一段时间莫名的重启一次 而message和syslog又检测不到有价值的信息 通常发生MCE报错的原因有如下 1 内存报错或者ECC问题 2 处理
  • 小程序抛出Unterminated string literal异常的处理

    Unterminated string literal的异常原因是因为JS编程中对var对象赋值时 字符串出现回车导致的 如下图所示 如何解决这个问题 如果不需要回车 那么用 的形式取消掉回车 或者手动退格键删除回车 如果需要回车那么在字符
  • 嗯,我们出了一套做爬虫必备的 JS 逆向课程

    阅读本文大概需要 4 分钟 爬虫是大数据时代不可或缺的数据获取手段 它是综合技术的应用体现 有取就有失 有攻就有防 开发者为了保护数据 不得已想出了很多办法来限制爬虫对数据的获取 WEB 网站的构成使得 JavaScript 成为了开发者阻
  • selenium java自动化测试_《Selenium3 Java 自动化测试实战》--测试环境搭建

    1 测试环境搭建 1 1 安装Java 1 1 1 下载地址 https www java com zh CN download windows 64bit jsp 1 1 2 配置环境变量 1 2 安装 IntelliJ IDEA 1 2
  • 二、进程管理(一)进程与线程

    目录 1 1 进程的概念 1 1 1 进程的作用和组织 1 1 2 进程的状态与转换 1 1 3 进程控制 1 1 4 进程的通信 1 2 线程的概念 1 2 1线程的概念 1 2 2用户级线程和内核级线程 1 2 3多线程模型 1 1 进
  • 树莓派can总线_CAN总线知识点荟萃

    CAN协议和标准规范有哪些 表1 CAN协议和标准 从 CAN 总线协议颁布以来 CAN 总线经过了 ISO11898 1 ISO11898 2 ISO11898 3 ISO11898 4 ISO11898 5 ISO11898 6 国际标
  • 第五章:(1)S7-200 SMART PLC的编程语言及编程元件

    编程语言 1 梯形图 LAD 2 功能块图 FBD 3 语句表 STL S7 200 SMART PLC的编程元件 常用分类 中文 英文 注释 例 输入继电器 I I0 0 输出继电器 Q Q0 0 使用时不能超过PLC所提供的最大外部接线
  • Not allowed to load local resource: file:///D:/xxx.jpg

    问题 Not allowed to load local resource file D xxx jpg 出现以上情况的原因是浏览器不允许访问本地路径 所以你需要配置一个虚拟的路径代替本地的路径 解决方法 思路 通过tomcat代理 在to
  • 常见提高并发量的方式

    1 避免锁表操作 2 缓存常用数据 3 Redis使用时 连接串参数设置
  • Logstash将日志产生时间替换@timestamp

    一 跟着官网学习一下date插件 日期过滤器用于从字段中解析日期 然后使用该日期或时间戳作为事件的logstash时间戳 例如 syslog事件通常具有这样的时间戳 Bash Apr 17 09 32 01 你可以使用日期格式MMM dd