簡體   English   中英

使用Elasticsearch Logstash索引日志(使用預處理Python腳本)

[英]Indexing logs with Elasticsearch Logstash (using preprocessing Python script)

我對Elasticsearch Logstash有問題。 我的目標是使用logstash自動將日志發送到elasticsearch。

我的原始日志如下所示:

2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise1 email1@gmail.com    POST    /application/controller/action Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko    {"getid":"1"}   86rkt2dqsdze5if1bqldfl1
2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise2 email2@gmail.com    POST    /application/controller2/action2    Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"2"}   86rkt2rgdgdfgdfgeqldfl1
2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise3 email3@gmail.com    POST    /application/controller2/action2    Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"2"}

問題是我不想以這種形式插入日志。 我想在python中使用預處理腳本,以便在使用logstash注入Elastic之前轉換數據。
開始時,我只想使用python腳本登錄elasticsearch。 但是我有大量的日志分散在許多文件夾和文件中,並不斷更新,因此我認為使用logstash或filebeat的功能更強大。 我正在嘗試使用filebeat和gork過濾器(不足以滿足我的情況),但是我認為在記錄之前無法使用預處理腳本。

日志應該在python腳本的末尾看起來像這樣:

{"page": "/application/controller/action", "ip": "165.225.76.76", "browser": "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko", "action": "action", "client": "entreprise1", "email": "email1@gmail.com", "feature": "application_controller_action", "time": "2016-09-01 10:58:41", "method": "POST", "controller": "controller", "application": "application"} 
{"page": "/application/controller2/action2", "ip": "165.225.76.76", "browser": "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko", "action": "action2", "client": "entreprise2", "email": "email2@gmail.com", "feature": "application_controller2_action2", "time": "2016-09-01 10:58:41", "method": "POST", "controller": "controller2", "application": "application"} 
{"page": "/application3/controller/action3", "ip": "165.225.76.76", "browser": "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko", "action": "action3", "client": "entreprise3", "email": "email3@gmail.com", "feature": "application_controller3_action3", "time": "2016-09-01 10:58:41", "method": "POST", "controller": "controller3", "application": "application"}

我在logstash過濾器中努力實現python腳本。 我知道這是可以實現的,但是基本上它是用ruby腳本完成的(cf: https : //www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html

1)您認為可以使用logstash解決我的問題嗎?

2)如果是,我的python腳本應將原始日志行作為輸入,並將json格式化的行作為輸出?

3)當在日志文件中添加一行日志時,每次都會重新插入整個文件,我該如何處理?

4)您認為可以使用filebeat做到嗎? 根據您的說法,最適合我的情況是什么?

現在,我的配置logstash文件如下所示:

input {
  file {
    path => "/logpath/logs/*/*.txt"
    start_position => "beginning"
  }
}

filter {
  # Here is where I should use my script to transform my logs into my json needed format
  date {
    match => ["time", "YYYY-MM-dd HH:mm:ss" ]
  }

  geoip {
    source => "ip"
    target => "geoip"
  }


}

output {
  stdout  {
    codec => dots {}
  }

  elasticsearch {
    index => "logs_index"
    document_type => "logs"
    template => "./logs_template.json"
    template_name => "logs_test"
    template_overwrite => true
  }

}

我真的要在此先感謝任何可以幫助我並考慮我的要求的人。

迪米特里

PS:抱歉,語法不是我的主要語言。

將日志轉換為json格式的標准方法是在logstash配置中使用grok,json過濾器。 為了減少Logstash上的負載以處理日志文件拍子,可以將其與配置一起使用。

因此,可以解決此問題的最佳配置是filebeat-> logstash-> Elasticsearch堆棧。

您不需要python腳本,而是使用filebeat捕獲特定位置的所有日志並將其轉發到logstash。

在累積了所有日志的服務器上安裝filebeat,如果將所有日志定向到特定的文件夾中會很好。 首先安裝filebeat,然后設置配置以將日志轉發到logstash

這是filebeat配置:

filebeat:
  prospectors:
    -
      paths:
        - "*log_path_of_all_your_log_files*"
      input_type: log
      json.message_key: statement
      json.keys_under_root: true

  idle_timeout: 1s
  registry_file: /var/lib/filebeat/registry
output:

  logstash:
    hosts: ["*logstash-host-ip:5044*"]
    worker: 4
    bulk_max_size: 1024
shipper:
logging:
  files:
    rotateeverybytes: 10485760 # = 10MB
    level: debug

現在,在這里,連同您的logstash配置一起,您需要具有GROK過濾器才能將您的日志轉換為json格式(在logstash配置文件中進行更改),然后將其轉發到elasticsearch kibana或任何您想要的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM