Logstash 参考指南(Date过滤器插件)

Date过滤器插件

其余版本,请参阅版本化的插件文档html

获取帮助

有关插件的问题,请在讨论论坛中打开一个主题,对于bug或特性请求,在Github中打开一个issue,关于Elastic支持的插件列表,请考虑Elastic支持矩阵git

描述

date过滤器用于解析字段中的日期,而后使用该日期或时间戳做为事件的logstash时间戳。github

例如,syslog事件一般有这样的时间戳:segmentfault

"Apr 17 09:32:01"

你应该使用MMM dd HH:mm:ss的日期格式来解析这个。数组

日期过滤器对于事件的排序和对旧数据的回填特别重要,若是在你的事件中没有获得正确的日期,那么之后搜索它们可能会出现顺序不对。ide

若是没有这个过滤器,logstash将根据第一次看到事件(在输入时)的时间(若是时间戳尚未在事件中设置)选择一个时间戳,例如,对于文件输入,时间戳被设置为每次读取的时间。ui

Date过滤器配置选项

这个插件支持如下配置选项以及后面描述的通用选项。编码

设置 输入类型 要求
locale string No
match array No
tag_on_failure array No
target string No
timezone string No

还能够查看全部过滤器插件支持的选项列表的通用选项。.net

locale插件

  • 值类型为string
  • 此设置没有默认值
  • 使用IETF-BCP47或POSIX语言标记指定要用于日期解析的语言环境,简单的例子有enen-US表明BCP47,en_US表明POSIX。
  • 对于解析月份名称(带有MMM的模式)和工做日名称(带有EEE的模式),一般须要设置语言环境。
  • 若是没有指定,将使用平台默认值,但对于非英语平台默认值,还将使用英语解析器做为回退机制。

match

  • 值类型为array
  • 默认值为[]
  • 首先是字段名,而后是格式模式的数组,[ field, formats... ]
  • 若是你的时间字段有多种可能的格式,你能够这样作:

    match => [ "logdate", "MMM dd yyyy HH:mm:ss",
           "MMM  d yyyy HH:mm:ss", "ISO8601" ]
  • 以上内容将匹配syslog(rfc3164)或iso8601时间戳。
  • 有一些特殊的例外,下面的格式文字能够帮助你节省时间并确保数据解析的正确性。

    • ISO8601 - 能够解析任何有效的ISO8601时间戳,像:2011-04-19T03:44:01.103Z
    • UNIX - 解析float或int值表示自纪元以来的unix时间(如1326149001秒),132和1326149001同样。
    • UNIX_MS - 解析int值表示自纪元以来的unix时间(如1366125117000毫秒)
    • TAI64N - 会解析tai64n时间值
  • 例如,若是你有一个字段logdate,其值相似于Aug 13 2010 00:03:44,那么你将使用这个配置:

    filter {
      date {
        match => [ "logdate", "MMM dd yyyy HH:mm:ss" ]
      }
    }
  • 若是字段嵌套在结构中,可使用嵌套语法[foo][bar]匹配其值,有关更多信息,请参阅字段参考资料
  • 关于语法的更多细节
  • 用于解析日期和时间文本的语法使用字母表示时间值的类型(月份、分钟等),重复使用字母表示该值的形式(两位数的月份、完整的月份名称等)。
  • 下面是用来解析日期和时间的方法:
  • y 年

    • yyyy => 整年数字,例如:2015
    • yy => 两位数的年,例如:15表明2015年。
  • M 一年中的月份

    • M => 最小位数的月份,例如:1为1月,12为12月。
    • MM => 两位数的月份,若是须要将用零填充,例如:01为1月,12为12月。
    • MMM => 缩写月文本,例如:Jan为1月,注意:使用的语言取决于你的语言环境,查看locale设置如何更改语言。
    • MMMM => 全月的文本,例如:January,注意:使用的语言取决于你的语言环境。
  • d 一月中的天

    • d => 最小位数的天,例如:1为一个月的第一天。
    • dd => 两位数的天,若是须要将用零填充,例如:01为一个月的第一天。
  • H 一天中的小时(24小时时钟)

    • H => 最小位数的小时,例如:0为午夜。
    • HH => 两位数的小时,若是须要,零填充,例如:00为午夜。
  • m 一小时中的分钟(每小时60分钟)

    • m => 最小位数的分钟,例如:0
    • mm => 两位数的分钟,若是须要,零填充,例如:00
  • s 一分钟中的秒(每分钟60秒)

    • s => 最小位数的秒,例如:0
    • ss => 两位数的秒,若是须要,零填充,例如:00
  • S 每秒最大精度的分数为毫秒(SSS),超过这个,追加零

    • S => 十分之一秒,例如:0表示亚秒值012
    • SS => 百分之一秒,例如:01为亚秒值01
    • SSS => 千分之一秒,例如:012为亚秒值012。
  • Z 时区偏移或标识

    • Z => 时区偏移结构为HHmm(Zulu/UTC的小时和分钟偏移),例如:-0700
    • ZZ => 时区偏移结构为HH:mm(在小时和分钟偏移量之间的冒号),例如:-07:00
    • ZZZ => 时区的标识,例如:America/Los_Angeles,注意:有效的id列在Joda.org可用时区页面上。
  • z 时区名称,没法解析时区名称(z)
  • w 一年中的周

    • w => 最小位数的周,例如:1
    • ww => 两位数的周,若是须要,零填充,例如:01
  • D 一年中的天
  • e 一周中的星期(数字)
  • E 一周中的星期(文本)

    • E, EE, EEE => 一周中缩短的星期,例如:MonTueWedThuFriSatSun,注意:它的实际语言取决于你的语言环境。
    • EEEE => 一周的星期全称,例如:MondayTuesday,...,注意:它的实际语言取决于你的语言环境。
  • 对于非格式化语法,须要在值周围放置单引号字符,例如,若是你正在解析ISO8601时间,"2015-01-01T01:12:23"那个“T”不是有效的事件格式,而且你你可能想说"字面上的一个T",你的格式应该是这样:"yyyy-MM-dd’T'HH:mm:ss"。
  • 其余不太常见的日期单元,如era(G)、century(C)、am/pm(a)和#更多,能够在joda-time文档中了解

tag_on_failure

  • 值类型为array
  • 默认值为["_dateparsefailure"]
  • 当没有成功匹配时,将值附加到tags字段

target

  • 值类型为string
  • 默认值为"@timestamp"
  • 将匹配的时间戳存储到给定的目标字段中,若是没有提供,默认更新事件的@timestamp字段。

timezone

  • 值类型为string
  • 此设置没有默认值
  • 指定用于日期解析的时区规范ID,有效的id列在Joda.org可用时区页面上,这在没法从值中提取时区时很是有用,并且不是平台默认值。若是没有指定,将使用平台默认值,Canonical ID很好,由于它为你处理了夏令时,例如,America/Los_AngelesEurope/Paris是有效的id。该字段能够是动态的,并使用%{field}语法包含事件的一部分。

通用选项

全部过滤器插件都支持如下配置选项:

设置 输入类型 要求
add_field hash No
add_tag array No
enable_metric boolean No
id string No
periodic_flush boolean No
remove_field array No
remove_tag array No

add_field

  • 值类型为hash
  • 默认值为{}
  • 若是此过滤器成功,则向此事件添加任意字段,字段名能够是动态的,并使用%{field}包含事件的一部分。
  • 例如:

    filter {
      date {
        add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
      }
    }
    # You can also add multiple fields at once:
    filter {
      date {
        add_field => {
          "foo_%{somefield}" => "Hello world, from %{host}"
          "new_field" => "new_static_value"
        }
      }
    }
  • 若是事件具备字段“somefield”==“hello”,那么在成功时,这个过滤器将添加字段foo_hello(若是存在的话),上面的值和%{host}块将被事件中的值替换,第二个示例还将添加硬编码字段。

add_tag

  • 值类型为array
  • 默认值为[]
  • 若是此过滤器成功,则向事件添加任意tags,tags能够是动态的,并使用%{field}语法包含事件的一部分。
  • 例如:

    filter {
      date {
        add_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also add multiple tags at once:
    filter {
      date {
        add_tag => [ "foo_%{somefield}", "taggedy_tag"]
      }
    }
  • 若是事件有字段“somefield”==“hello”,这个过滤器在成功时,会添加一个标签foo_hello(第二个例子固然会添加一个taggedy_tag标签)。

enable_metric

  • 值类型为boolean
  • 默认值为true
  • 默认状况下,咱们会记录全部能够记录的指标,但你能够为特定的插件禁用指标集合。

id

  • 值类型为string
  • 此设置没有默认值
  • 在插件配置中添加惟一的ID,若是没有指定ID,则Logstash将生成一个,强烈建议在配置中设置此ID,当你有两个或多个相同类型的插件时,这一点特别有用。例如,若是你有两个电子邮件输出,在本例中添加一个命名ID将有助于在使用监控API时监控Logstash。

    filter {
      date {
        id => "ABC"
      }
    }

periodic_flush

  • 值类型为boolean
  • 默认值为false
  • 按期调用过滤器flush方法,可选的。

remove_field

  • 值类型为array
  • 默认值为[]
  • 若是此过滤器成功,则今后事件中删除任意字段,例如:

    filter {
      date {
        remove_field => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple fields at once:
    filter {
      date {
        remove_field => [ "foo_%{somefield}", "my_extraneous_field" ]
      }
    }
  • 若是事件中有字段“somefield”==“hello”,那么在成功时,若是存在名为foo_hello的字段,这个过滤器将删除该字段,第二个示例将删除一个额外的非动态字段。

remove_tag

  • 值类型为array
  • 默认值为[]
  • 若是此过滤器成功,则从事件中删除任意tags,tags能够是动态的,并使用%{field}语法包含事件的一部分。
  • 例如:

    filter {
      date {
        remove_tag => [ "foo_%{somefield}" ]
      }
    }
    # You can also remove multiple tags at once:
    filter {
      date {
        remove_tag => [ "foo_%{somefield}", "sad_unwanted_tag"]
      }
    }
  • 若是事件有字段“somefield”==“hello”,这个过滤器在成功时,会删除标签foo_hello若是它存在,第二个示例还将删除一个sad、unwanted的标记。
相关文章
相关标签/搜索