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

wvt8vs2t  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(401)

我有这个日志文件: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文件:

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 }
}
vxqlmq5t

vxqlmq5t1#

你可以用这样的方法:

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

这指示多行筛选器/编解码器将所有不包含start:的行放入上一个logevent中。
然后可以使用grok模式提取3条信息。注意,您必须指示grok使用grok模式开头的多行开关查看多行消息,如下所示:

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

如果您使用的是多线程输入/多个并行工作线程,请给出警告。目前logstash多行处理中存在一些bug,这些bug可能导致并行处理时各种事件的行相互混合。我也不确定这是否与你有关,但看看这个:
https://github.com/elastic/logstash/issues/1754
另一条消息。我真的不明白什么是多行过滤器和编解码器之间的区别,以及当使用一个或另一个。我在我的项目中使用过滤器,但它工作正常。

相关问题