web-dev-qa-db-ja.com

Logstashは@timestampをsyslogの日付に置き換えます

私は少し混乱しています。私はsyslog date (backfilling the logstash)を引き出して@timestampをそれに置き換えようとしています。私はほとんどすべてを試しました。

これは私のフィルターです

filter {
   if [type] == "syslog" {
   grok {
     match => {
"message" => ["%{SYSLOGTIMESTAMP:DATETIME} %{Word:SERVER} (?<BINARY>(.*?)(php\-cgi|php))\: %{DATA:PHP_ERROR_TYPE}\:\s\s(?<PHP_ERROR_DESC>(.*?)(e\s\d))""]
  }
}

date {
  match => { "DATETIME" => [ "MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601" ] }
  target => "@timestamp"
  add_tag => [ "tmatch" ]
}

if !("_grokparsefailure" in [tags]) {
  mutate {
    replace => [ "@source_Host", "%{SERVER}" ]
  }
}
mutate {
  remove_field => [ "SERVER" ]
}
}
}

出力例:

{
    "message" => "Sep 10 00:00:00 xxxxxxx",
    "@timestamp" => "2013-12-05T13:29:35.169Z",
      "@version" => "1",
          "type" => "xxxx",
          "Host" => "127.0.0.1:xxx",
      "DATETIME" => "Sep 10 00:00:00",
        "BINARY" => "xxxx",
"PHP_ERROR_TYPE" => "xxxx",
"PHP_ERROR_DESC" => "xxxxx",
          "tags" => [
    [0] "tmatch"
],
  "@source_Host" => "xxx"
}

tmatchはタグに含まれているので、日付フィルターが機能すると想定していますが、なぜまだそうなのですか?

@timestamp => "2013-12-05T13:29:35.169Z"

助けてくれてありがとう(私のlogstashlogstash-1.2.2-flatjar.jar

8
user3070418

日付フィルターを見てみましょう:

date {
  match => { "DATETIME" => [ "MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601" ] }
  target => "@timestamp"
  add_tag => [ "tmatch" ]
}

特に、 match パラメータ:

match => { "DATETIME" => [ "MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601" ] }

一致には配列が必要です。あなたが正確に何を渡しているかはわかりませんが、配列ではありません。これを-vで実行してみましたが、文句を言わないことに驚いています。

あなたはおそらくこれに近いものを意味します:

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

配列の最初の要素がターゲットフィールドであることに注意してください。追加の要素は、照合するパターンです。

それを過ぎると、本当に必要な1つの形式のみを渡す必要がありますが、それは送信する3つの形式に含まれているようです。

10
rutter

タイムスタンプをUTC時間ではなくタイムゾーン形式で表示したい場合は、次のようにできます

Ruby {
    code => "event['@timestamp'] = event['@timestamp'].local('-08:00')"
}

前:@timestamp => "2013-12-05T13:29:35.169Z"

後:@timestamp => "2013-12-05T05:29:35.169-08:00"

更新:ローカルメソッドはバージョン1.4.2では機能しません。したがって、別のAPIを変更します

Ruby {
    code => "event['@timestamp'] = event['@timestamp'].getlocal"
}
7
Ben Lim