web-dev-qa-db-ja.com

Logstash用のGrokを使用してApache2エラーログを解析する

私のApache2エラーログを解析しようとしていて、少し問題があります。フィルターと一致していないようです。タイムスタンプの部分が間違っているのは確かですが、確かではありません。それを理解するためのドキュメントが本当に見つかりません。また、fields.errmsgの内容を取得する方法はありますか@message

ログ

[Wed Jun 26 22:13:22 2013] [error] [client 10.10.10.100] PHP Fatal error:  Uncaught exception '\Foo\Bar'

配送業者設定

input {
        file {
                'path' => '/var/log/Apache2/*-error.log'
                'type' => 'Apache-error'
        }

}

filter {
        grok {
                type => "Apache-error"
                pattern => "\[%{HTTPDATE:timestamp}\] \[%{Word:class}\] \[%{Word:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}"
        }
}


output {
        stdout {}
        redis {
                'data_type' => 'list'
                'Host' => 'logstash.server.net'
                'key' => 'logstash'
        }
}
14
Ascherer

アホイ!

私はパーティーに少し遅れていることは知っていますが、ここに行きます!

私はシステムに/etc/logstash/patterns.d/ディレクトリを作成し、その中にApache-errorという名前のファイルが含まれています。

Apache_ERROR_TIME %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}
Apache_ERROR_LOG \[%{Apache_ERROR_TIME:timestamp}\] \[%{LOGLEVEL:loglevel}\] (?:\[client %{IPORHOST:clientip}\] ){0,1}%{GREEDYDATA:errormsg}

/etc/logstash/patterns.d/は、次のようにlogstash構成で参照されます。

grok {
  patterns_dir => [ "/etc/logstash/patterns.d" ]
  match => [ "message", "%{Apache_ERROR_LOG}" ]
}

Adamがコメントで述べたように、 Grok Debugger でテストできます。送信したサンプルログエントリで問題なく動作するようです。私は私のクライアントの1つとかなりしっかりと仕事をしてきました。

上記のパターンは、最終的なメッセージをerrormsgフィールドに配置します。したがって、messageフィールドを削除するだけです。

これは私のlogstash構成で現在使用しているものです。

filter {
  if [type] == "Apache_error_log" {

    grok {
      patterns_dir => [ "/etc/logstash/patterns.d" ]
      match => [ "message", "%{Apache_ERROR_LOG}" ]
    }

    if !("_grokparsefailure" in [tags]) {

      mutate {
        remove_field => [ "message" ]
        add_field =>  ["timestamp_submitted", "%{@timestamp}"]
      }

      date {
        # Try to pull the timestamp from the 'timestamp' field (parsed above with
        # grok). The Apache time format looks like: "18/Aug/2011:05:44:34 -0700"
        #                        Sat Feb 08 06:31:09 2014
        match => [ "timestamp", "EEE MMM dd HH:mm:ss yyyy" ]
        remove_field => [ "timestamp" ]
      }

      geoip {
        source => "clientip"
      }
    }
  }
}

Apache_error_logではなくApache-errorのタイプを使用していることに注意してください。

それを撃ってください。これがあなたや他の人のために働くかどうか知りたいです!

乾杯!

29
pedrohdz

エラーログは少し異なります。

[Tue Dec 08 12:30:35.997887 2015] [ssl:info] [pid 1178:tid 1072] (70014)End of file found: [client 10.129.24.77:49987] AH01991: SSL input filter read failed.

しかし、私は完全に機能する定義済みのパターンを見つけました:

HTTPD24_ERRORLOG

Logstashソース でこれを参照してください

10
Robbie Aldrich

うまくいきませんでした:

EEE MMM dd HH:mm:ss yyyy

私のために働いた(Apache 2.4):

EEE MMM dd HH:mm:ss.SSSSSS yyyy
3
Detzler

Logstashには、Apacheログパーサーが組み込まれています。

ここに例があります...

grok {
   type    => 'company'
   pattern => ["%{COMBINEDAPACHELOG}"]
   add_tag => "Apache"
}

参考として、Logstashの docs を確認できます。

2
Adam