官网地址

本文内容

  • 语法
  • 测试数据
  • 可配置选项
  • 参考资料

date 插件是日期插件,这个插件,常用而重要。

如果不用 date 插件,那么 Logstash 将处理时间作为时间戳。时间戳字段是 Logstash 自己添加的内置字段 @timestamp,在ES中关于时间的相关查询,必须使用该字段,你当然也可以修改该字段的值。

迁移到:http://www.bdata-cap.com/newsinfo/1712677.html

语法


该插件必须是用 date 包裹,如下所示:

date {
}

可用的配置选项如下表所示:

设置 输入类型 是否为必填 默认值
add_field hash No {}
add_tag array No []
locale string No  
match array No []
periodic_flush boolean No false
remove_field array No []
remove_tag array No []
tag_on_failure array No ["_dateparsefailure"]
target string No "@timestamp"
timezone string No  

其中,add_field、remove_field、add_tag、remove_tag 是所有 Logstash 插件都有。它们在插件过滤成功后生效。这四个选项不多说。参见 ELK——Logstash 2.2 mutate 插件

测试数据


假设有 Tomcat access 日志:

192.168.6.25 - - [24/Apr/2016:01:25:53 +0800] GET "/goLogin" "" 8080 200 1692 23 "http://10.1.8.193:8080/goMain" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"

192.168.6.25 - - [24/Apr/2016:01:25:53 +0800] GET "/js/common/jquery-1.10.2.min.js" "" 8080 304 - 67 "http://10.1.8.193:8080/goLogin" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"

192.168.6.25 - - [24/Apr/2016:01:25:53 +0800] GET "/css/common/login.css" "" 8080 304 - 75 "http://10.1.8.193:8080/goLogin" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"

192.168.6.25 - - [24/Apr/2016:01:25:53 +0800] GET "/js/system/login.js" "" 8080 304 - 53 "http://10.1.8.193:8080/goLogin" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"

它是按如下 Tomcat 配置产生的:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t %m &quot;%U&quot; &quot;%q&quot; %p %s %b %D &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot;" />

若用如下 Grok 表达式解析该日志:

%{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent}

会得到如下结果:

{

          "message" => "192.168.6.25 - - [24/Apr/2016:01:25:53 +0800] GET \"/goLogin\" \"\" 8080 200 1692 23 \"http://10.1.8.193:8080/goMain\" \"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\"",

         "@version" => "1",

       "@timestamp" => "2016-05-17T08:26:07.794Z",

             "host" => "vcyber",

         "clientip" => "192.168.6.25",

           "identd" => "-",

             "auth" => "-",

        "timestamp" => "24/Apr/2016:01:25:53 +0800",

      "http_method" => "GET",

          "request" => "\"/goLogin\"",

    "request_query" => "\"\"",

             "port" => "8080",

       "statusCode" => "200",

            "bytes" => "1692",

          "reqTime" => "23",

          "referer" => "\"http://10.1.8.193:8080/goMain\"",

        "userAgent" => "\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\""

}

注意,简单起见,日志拆分到各个字段后的数据类型全是字符串。

可配置选项


match

  • 值是数组 array
  • 默认值为 []

The date formats allowed are anything allowed by Joda-Time (java time library). You can see the docs for this format here:

joda.time.format.DateTimeFormat

An array with field name first, and format patterns following, [ field, formats... ]

如果你的时间字段可能有多个格式,则可指定多个可能的日期格式:

match => [ "timestamp", "MMM dd YYY HH:mm:ss", "MMM  d YYY HH:mm:ss", "ISO8601" ]

Logstash 支持四种日期格式:

  • ISO8601 - should parse any valid ISO8601 timestamp, such as 2011-04-19T03:44:01.103Z
  • UNIX - will parse float or int value expressing unix time in seconds since epoch like 1326149001.132 as well as 1326149001
  • UNIX_MS - will parse int value expressing unix time in milliseconds since epoch like 1366125117000
  • TAI64N - will parse tai64n time values

例如,如果你有时间字段 timestamp,可能是 Aug 13 2010 00:03:44,你应该使用如下配置:

filter {

  date {

    match => [ "logdate", "MMM dd YYYY HH:mm:ss" ]

  }

}

如果字段是嵌套结构,那么你可以使用嵌套语法(nested syntax) [foo][bar] 来匹配值。更多信息,参考 the section called “Field Referencesedit

periodic_flush

Call the filter flush method at regular interval. Optional.

tag_on_failure

  • 值是 array
  • 默认值为 ["_dateparsefailure"]

Append values to the tags field when there has been no successful match

target

  • 值是 string
  • 默认值为 "@timestamp"

把 match 的时间字段保存到指定字段。若为指定,默认更新到 @timestamp。

示例:

input {

        stdin {

        }

}

filter {

        grok {

                match=>["message","%{IPORHOST:clientip} %{NOTSPACE:identd} %{NOTSPACE:auth} \[%{HTTPDATE:timestamp}\] %{WORD:http_method} %{NOTSPACE:request} %{NOTSPACE:request_query|-} %{NUMBER:port} %{NUMBER:statusCode} (%{NOTSPACE:bytes}|-) %{NUMBER:reqTime} %{QS:referer} %{QS:userAgent}"]

        }

        date {

                match=>["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]

                target=>"@timestamp"

        }

}

output{

        stdout{

                codec=>rubydebug

        }

}

得到如下结果:

{

          "message" => "}192.168.6.25 - - [24/Apr/2016:01:25:53 +0800] GET \"/goLogin\" \"\" 8080 200 1692 23 \"http://10.1.8.193:8080/goMain\" \"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\"",

         "@version" => "1",

       "@timestamp" => "2016-04-23T17:25:53.000Z",

             "host" => "vcyber",

         "clientip" => "192.168.6.25",

           "identd" => "-",

             "auth" => "-",

        "timestamp" => "24/Apr/2016:01:25:53 +0800",

      "http_method" => "GET",

          "request" => "\"/goLogin\"",

    "request_query" => "\"\"",

             "port" => "8080",

       "statusCode" => "200",

            "bytes" => "1692",

          "reqTime" => "23",

          "referer" => "\"http://10.1.8.193:8080/goMain\"",

        "userAgent" => "\"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0\""

}

timezone

Specify a time zone canonical ID to be used for date parsing. The valid IDs are listed on the Joda.org available time zones page. This is useful in case the time zone cannot be extracted from the value, and is not the platform default. If this is not specified the platform default will be used. Canonical ID is good as it takes care of daylight saving time for you For example, America/Los_Angeles or Europe/Paris are valid IDs. This field can be dynamic and include parts of the event using the %{field} syntax

ELK——Logstash 2.2 date 插件【翻译+实践】的更多相关文章

  1. ELK——Logstash 2.2 mutate 插件【翻译+实践】

    官网地址 本文内容 语法 测试数据 可选配置项 mutate 插件可以在字段上执行变换,包括重命名.删除.替换和修改.这个插件相当常用. 比如: 你已经根据 Grok 表达式将 Tomcat 日志的内 ...

  2. logstash date插件介绍

    时间处理(Date) 之前章节已经提过, filters/date 插件可以用来转换你的日志记录中的时间字符串,变成 LogStash::Timestamp 对象,然后转存到 @timestamp 字 ...

  3. [elk]logstash的grok匹配逻辑grok+date+mutate

    重点参考: http://blog.csdn.net/qq1032355091/article/details/52953837 logstash的精髓: grok插件原理 date插件原理 kv插件 ...

  4. 导入旧数据需要 使用date插件

    "@version" => "1", "@timestamp" => "2016-09-12T08:31:06.630 ...

  5. [elk]logstash的最佳实战-项目实战

    重点参考: http://blog.csdn.net/qq1032355091/article/details/52953837 不得不说这是一个伟大的项目实战,是正式踏入logstash门槛的捷径 ...

  6. [elk]logstash grok原理

    logstash语法 http://www.ttlsa.com/elk/elk-logstash-configuration-syntax/ https://www.elastic.co/guide/ ...

  7. ELK logstash 处理MySQL慢查询日志(初步)

    写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数 ...

  8. [elk]logstash统计api访问失败率

    处理原始日志 日志从moogoo导出来的 { "mobile" : "13612345678", "isp" : "中国移动_广东 ...

  9. [elk]logstash&filebeat常用语句

    filebeat安装dashboard 参考: https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-getting-star ...

随机推荐

  1. 理解em,rem以及rem的失效问题

    在平常做网站写代码的时候一般都是使用px,在之前的学习时就略微的学习了一些关于em.rem的知识,但是由于一直没有用到过,所以几乎全部忘记了.今天在研究一些知识的时候用到了em,所以特意将学到的知识总 ...

  2. step by step 之餐饮管理系统四(日志模块实现)

    三天前基本上把数据库表设计的文档写好,今天想到了一个问题,还要再加几个表,一个是log表,用来记录系统日志,另外再加几个字典表,一些需要配置的数据但又不好放在像xml文件里面的数据可以放在这些字典表里 ...

  3. 使用语句查询mssql死锁

    select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name from sys.sysprocesse ...

  4. HDU1695 GCD(莫比乌斯反演)

    传送门 看了1个多小时,终于懂了一点了 题目大意:给n,m,k.求gcd(x,y) = k(1<=x<=n, 1<=y<=m)的个数 思路:令F(i)表示i|gcd(x,y)的 ...

  5. Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解

    http://hi.baidu.com/ltb6w/item/3a51f11926fda60ce75c361d Eclipse进行C/C++开发——Eclipse+CDT+MinGW的配置与使用详解 ...

  6. git ssh key创建和github使用

    github拉代码需要ssh验证 git是分布式的代码管理工具,远程的代码管理是基于ssh的,所以要使用远程的git则需要ssh的配置.   一 .设置git: 设置git的user name和ema ...

  7. 使用SQL对数据进行整理

    网上下的全国 省市区 数据比较乱(http://qq704855854.blog.163.com/blog/static/19111835520142319275411/).导入后,进行整理. SQL ...

  8. WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 系列博文 <WinDbg 命令三部曲:(一)WinDbg 命令手册> <WinDb ...

  9. vim安装YouCompleteMe 插件

    要安装YouCompleteMe ,vim须支持python.看是否支持,可以在vim中:version 查看, 如果python前有+号,就是支持,减号就是不支持. 如果不支持,需要以编译安装方式重 ...

  10. php后台开发(一)hello world

    php后台开发(一)hello world 环境安装 开发环境为Ubuntu 12.04,选择linux+apache+php的开发环境 安装 apache2 sudo apt-get install ...