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的標記。
相關文章
相關標籤/搜索