如何将python项目日志接入到ELK?

本文将介绍如何将 Python 项目的日志接入到 ELK(Elasticsearch、Logstash 和 Kibana)这一流行的日志管理平台。我们将详细讨论如何使用 Filebeat 进行日志收集,并通过 Logstash 解析 Python 日志,并将其存储在 Elasticsearch 中,最后使用 Kibana 进行可视化展示。

简介

ELK 是一个开源的日志管理平台,它可以帮助开发人员更好地监控和管理应用程序的日志。ELK 由三个组件组成:Elasticsearch、Logstash 和 Kibana。

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。

Logstash 是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集与解析,并将其存入 ElasticSearch 中。

Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。

Filebeat 是一个轻量级的数据传送工具,主要用于转发和集中日志数据。它是 ELK(Elasticsearch、Logstash、Kibana)日志系统中的一个组件,尤其擅长于收集和转发日志事件。Filebeat 监视您指定的日志文件或位置,收集日志事件,并将它们转发到 Elasticsearch 或 Logstash 进行索引。引入 Filebeat 作为日志搜集器,主要是为了解决 Logstash 开销大的问题。相比 Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计。

常规 ELK 架构

如何将python项目日志接入到ELK?
image

引入 Filebeat

如何将python项目日志接入到ELK?
image

安装 ELK

在 Docker 上搭建 ELK+Filebeat 日志中心

启动 ElasticSearch

可直接 docker run 模式启动,或使用docker-compose 模式

docker run -d -p 9200:9200 --name elasticsearch elasticsearch

启动 Logstash

可直接 docker run 模式启动,或使用docker-compose 模式,logstash 中可以自行创建 es 的 index 以及编写日志内容解析的 grok 语句

1. 新建配置文件logstash.conf
input {
beats {
port => 5044
}
}

output {
stdout {
codec => rubydebug
}
elasticsearch {
#填写实际情况elasticsearch的访问IP,因为是跨容器间的访问,使用内网、公网IP,不要填写127.0.0.1|localhost
hosts => ["{$ELASTIC_IP}:9200"]

}
}

# 2.启动容器,暴露并映射端口,挂载配置文件
docker run -d --expose 5044 -p 5044:5044 --name logstash -v "$PWD":/config-dir logstash -f /config-dir/logstash.conf

启动 Filebeat

可直接 filebeat 文件 模式启动,或使用docker-compose 模式

# 1.下载Filebeat压缩包
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-linux-x86_64.tar.gz

# 2.解压文件
tar -xvf filebeat-5.2.2-linux-x86_64.tar.gz

# 3.新建配置文件filebeat.yml
filebeat:
prospectors:
- paths:
- /tmp/test.log #日志文件地址
input_type: log #从文件中读取
tail_files: true #以文件末尾开始读取数据
output:
logstash:
hosts: ["{$LOGSTASH_IP}:5044"#填写logstash的访问IP

# 4.运行filebeat
./filebeat-5.2.2-linux-x86_64/filebeat -e -c filebeat.yml

启动 Kibana

可直接 docker run 模式启动,或使用docker-compose 模式

docker run -d --name kibana -e ELASTICSEARCH_URL=http://{$ELASTIC_IP}:9200 -p 5601:5601 kibana

测试

模拟日志数据

# 1.创建日志文件
touch /tmp/test.log

# 2.向日志文件中写入一条nginx访问日志
echo '127.0.0.1 - - [13/Mar/2017:22:57:14 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"' >> /tmp/test.log

访问 http://{$KIBANA_IP}:5601

如何将python项目日志接入到ELK?
image
如何将python项目日志接入到ELK?
image

生产环境中部署时,还需使用数据卷进行数据持久化,容器内存问题也需考虑,elasticsearch 与 logstash 都是相对吃内存的,如果不加以限制,很可能会拖垮你整个服务器。

Python 日志接入 ELK

python 日志接入 ELK,主要问题是日志的格式解析,日常我们的 python 项目日志都是存储在 logs 目录下,根据 Python 程序的配置,分散到各个.log 文件。在程序部署使用 docker 或者 k8s 时,均可以通过挂载的方式,挂载到某一台宿主机上。我们的 Filebeat 可以配置读取相应的日志文件。再通过 Logstash 内配置内容解析,字段格式化等等操作,将非格式化的日志内容解析成结构化的数据,并详细解析不同的字段。

Filebeat 配置

filebeat:
  prospectors:
    -
     paths:
       - /home/***/logs/app.log #日志文件地址
     input_type: log #从文件中读取

logstash 配置

input {
beats {
port => 5044
}
}
filter {
grok {
    match => { "message" => "%{WORD:log_level}:%{DATA:log_message}" }
  }
  grok {
    match => { "message" => "Request: %{TIMESTAMP_ISO8601:request_time} %{WORD:request_method} %{URIPATHPARAM:request_url}" }
  }

}

output {
stdout {
codec => rubydebug
}
elasticsearch {
#填写实际情况elasticsearch的访问IP,因为是跨容器间的访问,使用内网、公网IP,不要填写127.0.0.1|localhost
hosts => ["es_ip:9200"]
index => "python-pro-%{+YYYY.MM.dd}" ## 自定义es的index
}
}

访问 Kibana:

打开浏览器,访问 Kibana 的 Web 界面(默认地址为http://localhost:5601)。在 Kibana 中,创建一个新的索引模式,选择刚刚配置的索引名称(例如”python-pro-“)。现在你可以在 Kibana 中查看和分析你的 Python 项目日志了

如何将python项目日志接入到ELK?
image


原文始发于微信公众号(有追求的开发者):如何将python项目日志接入到ELK?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/257036.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!