首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Elasticsearch Logstash索引日志(使用预处理Python脚本)

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

Stack Overflow用户
提问于 2018-06-18 09:32:27
回答 1查看 1.3K关注 0票数 0

我和Elasticsearch Logstash有个问题。我的目标是用logstash自动发送日志到elasticsearch。

我的原始日志看起来是这样的:

代码语言:javascript
复制
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的弹性之前转换我的数据。

一开始,我只想使用python脚本登录elasticsearch。但我有大量的日志分开在许多文件夹和文件,不断更新,所以我认为它是更强大的使用logstash或文件拍。我尝试使用filebeat和gork过滤器(对我的情况来说还不够),但我认为在登录之前不可能使用预处理脚本。

在python脚本的末尾,日志应该是这样的:

代码语言:javascript
复制
{"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)你认为用逻辑库解决我的问题是可能的吗?

2)如果是,我的python脚本应该以原始日志行作为输入,将json格式化的行作为输出?

3)当将一行日志添加到日志文件中时,每次都重新插入整个文件,我如何处理?

4)你认为用文件拍就能做到吗?据你所说,什么是对我的案子最好的?

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

代码语言:javascript
复制
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
  }

}

我真的很想事先感谢任何能帮助我并考虑我的要求的人。

迪米特里

对不起,英语不是我的主要语言。

EN

回答 1

Stack Overflow用户

发布于 2018-06-19 08:04:52

将日志转换为json格式的标准方法是在logstash配置中使用grok,json过滤器。而且,为了减少Logstash对处理日志的负载,可以在配置中使用filebeat。

因此,能够解决这一问题的最佳配置是filebeat->logstash->Elasticsearch堆栈.。

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

在所有日志正在累积的服务器上安装文件节拍,如果您将所有日志定向到一个特定的文件夹中,这将是很好的。先安装文件,然后设置配置,将日志转发到logstash

这里是文件节拍配置:

代码语言:javascript
复制
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或任何您想要的地方。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50906439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档