网站首页 > 精选教程 正文
本文将介绍如何将 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 架构
image
引入 Filebeat
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
image
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 项目日志了
image
猜你喜欢
- 2024-10-17 测试开发技能实践-搭建ELK日志管理系统
- 2024-10-17 ELK ——你的日志分析三剑客(2) elk日志解析
- 2024-10-17 Linux搭建ELK日志收集,elasticsearch+kibana+filebeat轻量级
- 2024-10-17 如何在CentOS 7 / Fedora 31/30/29上安装ELK Stack
- 2024-10-17 ClickHouse日志平台这样建,分分钟秒掉ELK
- 2024-10-17 分布式日志管理系统:从ELK到EFK 分布式管理软件
- 2024-10-17 快速搞定docker部署Filebeat、ELK全家桶
- 2024-10-17 ELK架构部署以及应用 elk架构图
- 2024-10-17 在Docker上搭建ELK+Filebeat日志中心
- 2024-10-17 Docker 安装ELK及Docker常见命令 docker安装elk7.6
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)