首页 文章

使用Elasticsearch Logstash索引日志(使用预处理Python脚本)

提问于
浏览
0

我的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"}

我'm struggling with the implementation of python script in logstash filter. I know it'可以实现的东西,但基本上它是用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:对不起语法,英语不是我的主要语言 .

1 回答

  • 0

    将日志转换为json格式的标准方法是在logstash配置中使用grok,json过滤器 . 并且为了减少Logstash对进程日志的负载,filebeat可以与您的配置一起使用 .

    因此,可以解决这个问题的最好的配置是 filebeat->logstash->Elasticsearch stack.

    您不需要python脚本,而是使用filebeat从特定位置捕获所有日志并将其转发到logstash .

    在所有日志累积的服务器上安装filebeat,如果您将所有日志都指向特定文件夹,那将会很好 . 首先安装filebeat,然后设置配置以将日志转发到logstash

    Here is the filebeat configuration:

    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或您想要的任何位置 .

相关问题