使用 Python 将日志文件上传到 Elasticsearch



来自访问.log文件的一些日志:

202.134.9.131 - - [24/Jun/2020:05:03:28 +0000] "GET /static/img/p-logos/ruby-rails.png HTTP/1.1" 200 7289 "http://35.230.90.99/static/css/main.css" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/58.2.2878.53403"
202.134.9.131 - - [24/Jun/2020:05:03:28 +0000] "GET /static/img/p-logos/aws.png HTTP/1.1" 200 7230 "http://35.230.90.99/static/css/main.css" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/58.2.2878.53403"
202.134.9.131 - - [24/Jun/2020:05:03:28 +0000] "GET /static/img/p-logos/js.png HTTP/1.1" 200 7335 "http://35.230.90.99/static/css/main.css" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/58.2.2878.53403"
202.134.9.131 - - [24/Jun/2020:05:03:26 +0000] "GET /static/img/business-img.png HTTP/1.1" 200 853648 "http://35.230.90.99/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/58.2.2878.53403"

我可以通过这种方式将日志上传到弹性搜索:

with open(access.log, "r") as ral:
for line in ral:
try:
log={
"user_IP" : line.split(" ")[0],
"request_date" : line.split("[")[1].split("]")[0],
"request_method" : line.split('"')[1].split(" ")[0],
"internal_url" : line.split('"')[1].split(" ")[1],
"HTTP_version" : line.split('"')[1][-3:],
"request_status ": line.split('"')[2][1:4],
"request_size" : line.split('"')[2].split(' ')[2],
"external_url" :  line.split('"')[3],
"user_agent" : line.split('"')[5]
}
res = es.index(index=index, body=log)
print(res)
except:
log={"log" : line}
res = es.index(index=index, body=log)
print(res)

但是我以这种方式面临一些问题:

  1. 它在 elasticsearch 服务器中产生大量流量。
  2. 它需要很长时间并且消耗资源用于大日志文件

在 Kibana 中,有上传 CSV、日志、JSON 文件的选项。Elasticsearch 会自动解析日志。但是在这里,我正在使用python解析日志,这需要时间和资源。

我的问题是:

  • 有没有办法在不解析的情况下上传"访问.log"文件?

我想将日志作为文件上传。我不想解析日志并将其作为 JSON 上传。我可以从 kivana 将日志作为文件上传。但是有没有办法用python做到这一点?

我会建议如下。

从端点接收日志文件。然后使用工具/应用程序将文件拆分为更多文件以进行并行处理。

使用多个input路径进行通用Logstash,以并行处理所有文件。具有自定义管道来处理日志文件中的数据。有一个output插入到弹性搜索中。

您可能需要以下内容。

  1. 会议
  2. 滤波器
  3. 尤其是 ES 处理器

相关内容

  • 没有找到相关文章

最新更新