私の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'
}
}
アホイ!
私はパーティーに少し遅れていることは知っていますが、ここに行きます!
私はシステムに/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
のタイプを使用していることに注意してください。
それを撃ってください。これがあなたや他の人のために働くかどうか知りたいです!
乾杯!
エラーログは少し異なります。
[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ソース でこれを参照してください
うまくいきませんでした:
EEE MMM dd HH:mm:ss yyyy
私のために働いた(Apache 2.4):
EEE MMM dd HH:mm:ss.SSSSSS yyyy
Logstashには、Apacheログパーサーが組み込まれています。
ここに例があります...
grok {
type => 'company'
pattern => ["%{COMBINEDAPACHELOG}"]
add_tag => "Apache"
}
参考として、Logstashの docs を確認できます。