[LogStash] Comment ignorer les _grokparsefailure?


(Blured Derulb) #1

Bonjour,

Je ne souhaite que les lignes qui ne matchent pas l'expression de mon grok filter ne soient pas importées. Pour l'instant elles le sont quand même. Mon fichier de pipeline contient :

input {
    file {
        path => "C:/logstash-1.5.4/logstash-1.5.4/middle-global.2015-08-10.log"
        start_position => beginning
    }
}
filter {
    grok {
        match => { "message" => "%{DATESTAMP:date}.\[%{USERNAME:server}\].*INFO.*accessLogs \- %{IP:ip}.\- \- \[%{HTTPDATE:timestamp}*\].\"%{WORD:verb}.%{URIPATH:service}?%{URIPARAM:params}.HTTP/%{NUMBER:httpversion}\".%{NUMBER:responseCode}.%{NUMBER:responseSize}.%{QS:threadName}.%{QS:agent}.%{NUMBER:treatmentTime}"}
    }	
    geoip {
        source => "ip"
    }
}
output {
    elasticsearch {
        protocol => "http"
    }
    stdout {}
}

Par exemple dans l'index correspondant j'ai :

  "hits": {
    "total": 1816,
    "max_score": 1,
    "hits": [
      {
        "_index": "logstash-2015.08.25",
        "_type": "logs",
        "_id": "AU9lReDSGenJVJoHL__T",
        "_score": 1,
        "_source": {
          "message": "2015-08-06 00:00:01,344 [middle] [middleScheduler-1        ] INFO  org.apache.solr.core.SolrCore - SolrIndexSearcher has not changed - not re-opening: org.apache.solr.search.SolrIndexSearcher",
          "@version": "1",
          "@timestamp": "2015-08-25T14:31:59.079Z",
          "host": "Opti780-info-3",
          "path": "C:/logstash-1.5.4/logstash-1.5.4/middle-global.2015-08-12.log",
          "tags": [
            "_grokparsefailure"
          ]
        }
      },

Si j'essai en rajoutant l'instruction : tag_on_failure => [], le tag _grokparsefailure est supprimé mais pas la ligne importée.

Est-ce normal ?

A+,
Denis.


(Blured Derulb) #2

j'ai trouvé une technique peut être que ça pourra reservir :

{ 
    file {
        path => "C:/logstash-1.5.4/logstash-1.5.4/middle-global.2015-08-15.log"
        start_position => beginning
    }
}
filter {
    grok {
        match => { "message" => "%{DATESTAMP:date}.\[%{USERNAME:server}\].*INFO.*accessLogs \- %{IP:ip}.\- \- \[%{HTTPDATE:timestamp}*\].\"%{WORD:verb}.%{URIPATH:service}?%{URIPARAM:params}.HTTP/%{NUMBER:httpversion}\".%{NUMBER:responseCode}.%{NUMBER:responseSize}.%{QS:threadName}.%{QS:agent}.%{NUMBER:treatmentTime}"}
    }		
    geoip {
        source => "ip"
    }
	if "_grokparsefailure" in [tags] {
		drop {}
	}
}
output {
    elasticsearch {
        protocol => "http"
    }
    stdout {}
} 

(David Pilato) #3

Oui. Rajoute un filtre drop si la condition _grokpparsefailure in [tags] est vraie.

Et supprime l'option tag on failure.


(system) #4