多行conf文件将日志文件解析为elasticsearch

时间:2015-05-22 07:16:19

标签: elasticsearch logstash

我有这个日志文件:http://dpaste.com/3FE2VNY

我只想提取某些信息,例如日期时间和发布的事件数量。我尝试将其放入elasticsearch会导致挂起logstash。不知道我做错了什么,因为我是新手。

我尝试做的是简单地抓取日志文件中的所有内容并将其传递给elasticsearch。我知道必须使用grok来获取特定部分,但我还没有达到那个级别。

我的目标是提取:

start: Mon Apr 27 13:35:25 2015
finish: Mon Apr 27 13:35:36 2015
number of events posted: 10

日志文件:

test_web_events.py: START: Mon Apr 27 13:35:25 2015
# TESTCASE TestWebPost ==================================================
# START TEST METHOD #################################: test_10_post_valid_json
[2015-04-27T13:35:25.657887] HTTP DELETE http://pppdc9prd3net:8080/rastplatz/v1/sink/db?k0=bradford4
{}
HTTP response: 200
0
POSTING event_id b29b6c7c-48cd-4cd9-b3c4-aa0a7edc1f35 to businessevent
Content-Type: text/plain
POSTING event_id 13678af1-3e3a-4a6e-a61c-404eb94b9768 to businessevent
Content-Type: text/plain
POSTING event_id 47b70306-2e7c-4cb2-9e75-5755d8d101d4 to businessevent
Content-Type: text/plain
POSTING event_id 6599cdb2-0630-470d-879d-1130cf70c605 to businessevent
Content-Type: text/plain
POSTING event_id d088ce29-fa0d-4f45-b628-045dba1fd045 to businessevent
Content-Type: text/plain
POSTING event_id 07d14813-b561-442c-9b86-dc40d1fcc721 to businessevent
Content-Type: text/plain
POSTING event_id b6aea24a-5424-4a0f-aac6-8cbaecc410db to businessevent
Content-Type: text/plain
POSTING event_id 016386bd-eac5-4f1c-8afc-a66326d37ddb to businessevent
Content-Type: text/plain
POSTING event_id 6610485d-71af-4dfa-9268-54be5408a793 to businessevent
Content-Type: text/plain
POSTING event_id 92786434-02f7-4248-a77b-bdd9d33b57be to businessevent
Content-Type: text/plain
Posted 10 events
# END TEST METHOD ###################################: test_10_post_valid_json
test_web_events.py: FINISH: Mon Apr 27 13:35:36 2015

conf file:

input {
  file {
    path => "/home/bli1/logstash-1.5.0/tmp/bradfordli2_post.log"
    codec => multiline {
      pattern => "^."
      negate => true
      what => "previous"
    }
  }
}
output {
  elasticsearch { protocol => http host => "127.0.0.1:9200"}
  stdout { codec => rubydebug }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

multiline {
    pattern => "START:"
    negate => "true"
    what => "previous"
}

这指示多行过滤器/编解码器将所有不包含START的行放在上一个logevent中。

然后,您可以使用grok模式提取3条信息。注意你必须通过在grok模式开头使用多行开关来指示grok查看多行消息,如下所示:

grok {
    match => ["message", "(?m)Posted %{NONNEGINT:nrEvents} events"]
}

如果您正在使用多线程输入/多个并行工作线程,请发出警告。 logstash多行处理中存在当前的错误,这些错误可能导致来自各种事件的行在并行处理时相互混合。我也不确定这是否与您相关,但请看一下:

https://github.com/elastic/logstash/issues/1754

另一个信息。我真的不明白mutline过滤器和编解码器之间的区别以及何时使用其中一个。我在我的项目中使用过滤器,但它工作正常。