0

私はすべてのログを集中管理するためにELKを使用しており、Artifactoryリクエストログを転送しています。私はLogstashログを見れば、正常に動作しているようだログ検索の日付が正しく設定されていません

filter{ 
     if [type] == 'artifactory-request'{ 
       grok { 
         'match'   => {"message" => "%{DATESTAMP_EVENTLOG:logtime:string}\|%{NUMBER:request_time}\|%{DATA:request_type}\|%{IP:request_ip}\|%{DATA:request_username}\|%{DATA:request_method}\|%{DATA:resource_path}\|HTTP/%{NUMBER:http_version}\|%{NUMBER:response_code}\|%{NUMBER:size}"} 
         'remove_tag' => ["_grokparsefailure"] 
       } 

       date { 
         'match' => ["logtime", "yyyyMMddHHmmss"] 
       } 

     } 
} 

が、私はそれが値をマッピングしています参照してください。 20160615130655|1|REQUEST|123.456.789.012|non_authenticated_user|GET|/9spj7rhd.fts|HTTP/1.1|401|0

これはLogstashフィルタは次のとおりです。

これはサンプルラインになります正しく:

Jun 15 13:10:30 elk docker[22890]: "@version" => "1", 
Jun 15 13:10:30 elk docker[22890]: "@timestamp" => "2016-06-15T13:10:24.000Z", 
Jun 15 13:10:30 elk docker[22890]: "file" => "/mnt/artifactory/logs/request.log", 
Jun 15 13:10:30 elk docker[22890]: "host" => "artifactory", 
Jun 15 13:10:30 elk docker[22890]: "offset" => "4667597", 
Jun 15 13:10:30 elk docker[22890]: "type" => "artifactory-request", 
Jun 15 13:10:30 elk docker[22890]: "tags" => [], 
Jun 15 13:10:30 elk docker[22890]: "logtime" => "20160615131024", 
Jun 15 13:10:30 elk docker[22890]: "request_time" => "1", 
Jun 15 13:10:30 elk docker[22890]: "request_type" => "REQUEST", 
Jun 15 13:10:30 elk docker[22890]: "request_ip" => "123.456.789.012", 
Jun 15 13:10:30 elk docker[22890]: "request_username" => "non_authenticated_user", 
Jun 15 13:10:30 elk docker[22890]: "request_method" => "GET", 
Jun 15 13:10:30 elk docker[22890]: "resource_path" => "/login.php", 
Jun 15 13:10:30 elk docker[22890]: "http_version" => "1.1", 
Jun 15 13:10:30 elk docker[22890]: "response_code" => "401", 
Jun 15 13:10:30 elk docker[22890]: "size" => "0" 
Jun 15 13:10:30 elk docker[22890]: } 

しかし、ESは私のlogtimeフィールドを好きにいないようです。それはそれ

"logtime" : { 
    "type" : "date", 
    "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis" 
} 

どのようにESを決めるん好きではない理由を私は見ることができます(私はそれを行っていないとして自動的に生成されている推測している)のマッピングを見てみると

Jun 15 13:18:00 elk docker[22580]: [2016-06-15 13:18:00,288][DEBUG][action.bulk    ] [Stellaris] [logstash-2016.06.15][4] failed to execute bulk item (index) index {[logstash-2016.06.15][artifactory-request][AVVUNhxaSE2i6S9oVvq2], source[{"message":"20160615131757|0|REQUEST|123.456.789.012|non_authenticated_user|GET|/|HTTP/1.1|302|0","@version":"1","@timestamp":"2016-06-15T13:17:57.000Z","file":"/mnt/artifactory/logs/request.log","host":"artifactory","offset":"4668979","type":"artifactory-request","tags":[],"logtime":"20160615131757","request_time":"0","request_type":"REQUEST","request_ip":"123.456.789.012","request_username":"non_authenticated_user","request_method":"GET","resource_path":"/","http_version":"1.1","response_code":"302","size":"0"}]} 
Jun 15 13:18:00 elk docker[22580]: MapperParsingException[failed to parse [logtime]]; nested: IllegalArgumentException[Invalid format: "20160615131757" is malformed at "31757"]; 

logtimeは日付ですか?入力するこの新しい形式を受け入れるように修正するにはどうすればよいですか?これは前に働いていたので、何も変えていないのでかなり混乱しています。

これは私がLogstash側で持っている唯一の出力に含ま関連の設定です:

output { 
    elasticsearch { hosts => ["elasticsearch:9200"] } 
    stdout { codec => rubydebug } 
} 

そして私は、私はデフォルトで来るものは何でも使っていElasticsearch上の任意の設定を変更していません。

どのようなアイデアをお願いしますか?私は何が欠けていますか?

多くのありがとうございます。

答えて

0

あなたが言ったように、問題はマッピングから来ています。

ログタイムフィールドを文字列から日付に変換できます。使ってlogtimeフィールドにターゲットを有する第二日付フィルタと :

date { 
      'match' => ["logtime", "yyyyMMddHHmmss"] 
      'target' => "logtime" 
    } 

これは表示されません日付とマッピングの問題で文字列に置き換えられます。
'target' => "logtime"の日付フィルタは、フィルタなしの後に配置するか、機能しません。

これは修正ですが、そのようなマッピングがある理由を調べるようにしてください。 ESマッピングはインデックスに関連付けられ、ドキュメントを受け取ると作成されます。 この文書のフィールドによって異なります。
これは、最初にartifactory-request ESに到着する文書のフィールドがlogtimeであることを意味します。 または、logtimeを日付タイプに関連付ける索引の作成に使用されるテンプレートがESにあります。

+0

ありがとう@baudsp。以前のフォーマットについて不平を言って、別のログの日付フォーマットについて不平を言った。 (うまくいけば)素早く修正するので、名前を変更しました。したがって、 'logtime'は' artifactory_logtime'などです。私がもっと調査している間、それが私の問題を解決するかどうかを見てみましょう。 ご協力いただきありがとうございます! – davidfm

関連する問題