Elastic Stack 8.16.0 日志收集平台的搭建
简介
1.1 ELK 介绍
ELK 是 Elasticsearch、Logstash、Kibana 三款开源工具的首字母缩写,构成了一套完整的日志管理解决方案,主要用于日志的采集、存储、分析与可视化。
1)Logstash:数据管道工具,负责从多种来源(如文件、数据库、消息队列)采集日志,进行过滤、格式化后输出到目标(如 Elasticsearch);
2)Elasticsearch:分布式实时搜索与分析引擎,基于 Lucene 构建,负责存储和检索数据。支持全文检索、结构化查询和大规模数据的高效处理;
3)Kibana:数据可视化平台,提供交互式图表、仪表盘和地图,提供 Dev Tools 直接操作 Elasticsearch 中的数据并生成可视化报告;

1.2 Elastic Stack 介绍
Logstash 是基于 JVM 运行,默认堆内存 1GB,资源消耗较高,单节点处理能力受限于 CPU 和内存 ,尤其在大规模日志场景下性能瓶颈明显 。Elastic公司推出Beats家族,旨在提供轻量级、专一化的数据采集工具。Filebeat作为其中一员,专攻日志文件采集,解决了Logstash Forwarder(旧版采集器)的功能局限和性能问题。
Filebeat采用Go语言开发,具有低资源占用(CPU/内存消耗可忽略不计)、易部署等特点,尤其适合边缘节点和资源受限环境。
随着 Beats 等新成员的加入,原有名称无法涵盖全部组件。为统一品牌和技术生态,Elastic 公司将 ELK 更名为 Elastic Stack,强调其能力的全面性(如支持日志、指标、安全监控等)。

1.3 高并发高可用架构(分布式)
在高并发的架构中,ELK可以结合Kafka作为中间件,用于解耦数据生产者和消费者,处理突发的数据流量,避免Logstash或Elasticsearch过载。
1)Beats(Filebeat/Metricbeat)直接采集数据并发送至 Kafka 主题,避免数据直接冲击下游组件;
2)Logstash 从 Kafka 消费数据,进行过滤、富化等操作后批量写入 Elasticsearch;

准备工作
1)准备一台服务器,系统为CentOS8;
2)安装Docker及docker-compose;
注:在安装 Elasticsearch、Kibana、Logstash,需安装相同版本号的版本。Filebeat 和 ELK 的大版本也要保持一致。
Elasticsearch 安装
3.1 elasticsearch.yml 配置
a)创建elasticsearch用户
useradd elasticsearch
可通过 cat /etc/passwd 查看当前系统的用户信息。
b)在home目录中,创建elasticsearch目录,并授权给elasticsearch用户
mkdir elasticsearch
chown -R elasticsearch:elasticsearch /home/elasticsearch
c)在elasticsearch目录中,创建data、logs、conf目录
d)在conf目录中,创建elasticsearch.yml文件。文件的配置信息如下:
# 集群名称
cluster.name: es-cluster
network.host: 0.0.0.0
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# 关闭安全认证
xpack.security.enabled: false
3.2 elk_elasticsearch-compose.yml 配置
编写 elk_elasticsearch-compose.yml,内容如下:
version: "3"
services:elasticsearch:container_name: elasticsearchhostname: elasticsearchimage: elasticsearch:8.16.0user: "elasticsearch:elasticsearch"ports:- 9200:9200volumes:- /home/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /home/elasticsearch/data:/usr/share/elasticsearch/data- /home/elasticsearch/logs:/usr/share/elasticsearch/logsenvironment:- "discovery.type=single-node" # 设置elasticsearch为单节点- "TAKE_FILE_OWNERSHIP=true" # 在容器启动时,自动将宿主机中挂载的卷的文件操作权限赋给容器的用户(默认为UID 1000)。- "ES_JAVA_OPTS=-Xms216m -Xmx512m"- "TZ=Asia/Shanghai"
1)user: "elasticsearch:elasticsearch"
elasticsearch容器的用户为elasticsearch
2)- "TAKE_FILE_OWNERSHIP=true"
在容器启动时,自动将宿主机中挂载的卷的文件操作权限赋给容器的用户(默认为UID 1000)。
生产环境慎用:自动修改目录权限可能存在安全风险,建议预配置权限
3.3 执行安装
进入elk_elasticsearch_compose.yml 目录,执行如下:
docker-compse -f elk_elasticsearch_compose.yml up -d
3.4 docker 常用命令
1)查看容器id
docker ps
2)查看容器实时日志
docker logs -f 容器id
3)将日志实时追加到日志文件中
docker logs -f 容器id >> test.log 2>&1
4)进入容器
docker exec -it 容器id bash
Logstash 安装
4.1 logstash.yml 配置
在home目录中,创建logstash/conf目录,创建logstash.yml文件,文件的配置信息如下:
# 通过filebeat数据输入,端口为5044
input {beats {port => 5044}
}# 数据处理
filter {grok { # Grok结构化文本解析,解析日志信息match => [ "message", "(?<logTime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s+\[(?<thread>.*)\]\s+(?<level>\w*)\s{1,2}+(?<class>\S*)\s+-\s+(?<content>.*)\s*"] }date { # 时间处理match => ["timestamp_string", "ISO8601"]}mutate { # 字段操作remove_field => [message, timestamp_string]}
}# 数据输出
output { elasticsearch { # 输出到elasticsearchhosts => ["http://192.168.199.210:9200"]index => "logstash-test"}stdout { # 输出到控制器,用于调试codec => rubydebug}
}
1)logstash配置分为三部分,分别为
input { ... } # 数据输入
filter { ... } # 数据处理
output { ... } # 数据输出
2)grok的match
a)logstash接收到内容会放到message字段中,通过正则表达式匹配message中的信息;
b)可配置多个解析规则,当任意一个 message 匹配上了这个正则,则 grok 执行完毕;
c)如果配置了多个规则,grok依然没有匹配上,message 也会输出到 ES,只是这条日志在 ES 中不会展示 logTime、level 等字段;
grok的正则表达式编写比较麻烦,可通过 kibana 进行调试
http://IP:5601/app/dev_tools#/grokdebugger

如上面的日志信息,通过解析后,会解析出level、thread、class、content 和 logTime
4.2 elk_logstash_compose.yml 配置
elk_logstash_compose.yml 的内容如下:
version: "3"
services:logstash:container_name: logstashhostname: logstashimage: logstash:8.16.0command: logstash -f ./conf/logstash.confvolumes:- /home/logstash/conf/logstash.conf:/usr/share/logstash/conf/logstash.confenvironment:- elasticsearch.hosts=http://192.168.199.210:9200- xpack.monitoring.elasticsearch.hosts=http://192.168.199.210:9200 # 解决logstash监控连接报错- "TZ=Asia/Shanghai"- "LS_JAVA_OPTS=-Xms216m -Xmx512m"ports:- 5044:5044
同3.3,执行 elk_logstash_compose.yml 进行安装
Filebeat 安装
5.1 filebeat.yml 配置
在home目录中,创建filebeat目录,创建conf、data 和 logs 文件夹。在conf中,创建logstash.yml文件,文件的配置信息如下:
filebeat.inputs:
- type: filestreamenabled: truepaths:- /home/app/*.log# 多行日志合并(处理Java异常堆栈)multiline:pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'negate: falsematch: after
# 使用processors 提取字段
processors:# 第一步:使用 dissect 分解原始日志行- dissect:tokenizer: '%{timestamp} [%{thread}] %{level} %{logger} - %{message}'field: "message" # 原始日志字段(默认存储为 message)target_prefix: "" # 直接提取到根字段(非嵌套)# 第二步:解析时间戳(覆盖默认@timestamp)- timestamp:field: timestamp # 从 dissect 提取的timestamp字段layouts:- '2006-01-02 15:04:05.000' # Go 时间格式(必须与日志中的时间格式完全匹配)test:- '2025-03-07 10:12:23.123' # 测试用例(可选)第三步:删除临时字段- drop_fields:fields: ["timestamp", "log.offset", "input.type"] # 清理无用字段
# 输出到 Elasticsearch
output.elasticsearch:hosts: ["http://192.168.199.210:9200"]index: "filebeat-%{+yyyy.MM.dd}"
# 输出到控制台(测试时可查看结果)
output.console:pretty: truecodec.json:pretty: true
在测试的时候,可以通过output.console,将信息输出到控制台。
5.2 elk_filebeat_compose.yml 配置
elk_filebeat_compose.yml 的内容如下:
version: "3"
services:filebeat:container_name: filebeathostname: filebeatimage: elastic/filebeat:8.16.4user: rootvolumes:# 映射到容器中【作为数据源】- /var/lib/docker/containers:/var/lib/docker/containers- /home/app:/home/app# 方便查看数据及日志- /home/filebeat/logs:/usr/share/filebeat/logs- /home/filebeat/data:/usr/share/filebeat/data- /home/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
1)user: root
Filebeat 需要访问宿主机的文件,需要有 root 的权限
2)- /home/app:/home/app
注:在 filebeat.yml 中配置了文件的 paths 为 /home/app 下的文件,此处需要将 /home/app3 和容器进行映射,否则 filebeat 将访问不到日志文件
同3.3,执行 elk_logstash_compose.yml 进行安装
Kibana 安装
6.1 kibana.yml 配置
在home目录中,创建kibana/conf目录,创建kibana.yml文件,文件的配置信息如下:
# 服务端口
server.port: 5601
# 服务IP
server.host: "0.0.0.0"
# ES
elasticsearch.hosts: ["http://192.168.199.210:9200"]
# 汉化
i18n.locale: "zh-CN"
6.2 elk_kibana_compose.yml 配置
elk_kibana_compose.yml 的配置如下:
version: "3"
services:kibana:container_name: kibanahostname: kibanaimage: kibana:8.16.0ports:- 5601:5601volumes:- /home/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.ymlenvironment:- elasticsearch.hosts=http://192.168.199.210:9200- "TZ=Asia/Shanghai"- XPACK_SECURITY_ENABLED=false # 关闭安全模块(非必要功能)- ELASTICSEARCH_ASSISTANT_ENABLED=false # 禁用 Elastic Assistant 插件:ml-citation{ref="3,4" data="citationList"}
Kibana安装时,需关闭安全模块(非必要功能)和禁用Elastic Assistant 插件
注:不同版本的 ELK 可能会存在不同的问题
测试示例
容器都安装成功后,在 /home/app 中添加日志文件,测试的日志信息如下:
2025-03-04 01:34:24.143 [http-nio-8094-exec-7] INFO c.q.s.s.i.SessionUserInterceptor - session user check ... false
2025-03-04 01:35:13.984 [nioEventLoopGroup-5-7] INFO c.q.e.addsub.netty.WebSocketHandler - handlerRemove 调用fa163efffe9f832c-000079e3-00000973-55cbd5b44071a452-2c89d78a
结尾
以上为本篇分析的全部内容。
关于本篇内容你有什么自己的想法或独到见解,欢迎在评论区一起交流探讨下吧。
相关文章:
Elastic Stack 8.16.0 日志收集平台的搭建
简介 1.1 ELK 介绍 ELK 是 Elasticsearch、Logstash、Kibana 三款开源工具的首字母缩写,构成了一套完整的日志管理解决方案,主要用于日志的采集、存储、分析与可视化。 1)Logstash:数据管道工具,负责从…...
江科大51单片机笔记【16】AD/DA转换(下)
写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…...
Podman 运行redis 报错
Podman 运行redis 报错 一、报错内容 find: .: Permission denied chown: changing ownership of .: Permission denied二、问题分析 SELinux 模式 SELinux(Security-Enhanced Linux)是一种安全模块,旨在通过强制访问控制(MAC)来增强 Linux 系统的安全性。SELinux 具有…...
基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)
这是一个结合图像和音频的情绪识别系统,从架构、数据准备、模型实现、训练等。包括数据收集、预处理、模型训练、融合方法、部署优化等全流程。确定完整系统的组成部分:数据收集与处理、模型设计与训练、多模态融合、系统集成、部署优化、用户界面等。详…...
WordPress the_category与single_cat_title的区别
在wordpress网站主题开发用常会用到调用分类目录的名称,the_category与single_cat_title都可以调用出分类目录的名称。 <?php single_cat_title(); ?> <?php the_category(); ?>但是,不少人搞不清楚二者有什么区别,其实很简…...
以太坊AI代理与PoS升级点燃3月市场热情,2025年能否再创新高?
币热网深度报道:以太坊AI代理与PoS升级引爆3月热潮,2025年能否再攀历史新高? 原文来源:币热网 - 区块链信息资讯平台 以太坊升级,市场热情高涨 近期,以太坊市场犹如被一股神秘力量点燃,掀起了…...
Go语言入门基础详解
一、语言历史背景 Go语言由Google工程师Robert Griesemer、Rob Pike和Ken Thompson于2007年设计,2009年正式开源。设计目标: 兼具Python的开发效率与C的执行性能内置并发支持(goroutine/channel)简洁的类型系统现代化的包管理跨…...
Web网页制作(静态网页):千年之恋
一、是用的PyCharm来写的代码 二、代码中所用到的知识点(无 js) 这段HTML代码展示了一个简单的注册页面,包含了多个HTML元素和CSS样式的应用。 这段HTML代码展示了一个典型的注册页面,包含了常见的HTML元素和表单控件。通过CSS样…...
JVM 的不同组成部分分别有什么作用?
JVM(Java Virtual Machine)主要由以下几个核心组成部分构成: 1. 类加载器子系统 (Class Loader Subsystem): 作用: 加载类: 负责查找并加载 Java 类文件(.class 文件)到 JVM 中。 类文件可以来…...
正则表达式 - 修饰符
正则表达式 - 修饰符 正则表达式是一种强大的文本处理工具,它广泛应用于数据验证、文本搜索、替换、匹配等场景。在正则表达式中,修饰符是用于调整正则表达式行为的特殊字符。本文将详细解析正则表达式中的常用修饰符,帮助读者更好地理解和运用正则表达式。 1. 字符串定位…...
K8s 1.27.1 实战系列(十二)Ingress
一、Ingress介绍 1、Ingress 的核心概念 Ingress 是 Kubernetes 中管理外部流量访问集群内服务的 API 对象,通过 7 层(HTTP/HTTPS)协议实现流量路由、负载均衡和 SSL 终止。它弥补了传统 Service(如 NodePort 和 LoadBalancer)的不足,例如端口占用过多、不支持路径路由…...
tomcat应用的作用以及安装,以及tomcat软件的开机自启动。
一.tomcat介绍 1.作用 tomcat是一款用来部署网站服务器的一款软件。 动态网站主流语言: PHP, lamp/lnmp平台 Java语言,运行在tomcat平台。【只要这个网站或者软件是Java语言写的,我们都可以在tomcat平台上去运行这个java程序。】 网站是…...
Unity中WolrdSpace下的UI展示在上层
一、问题描述 Unity 中 Canvas使用World Space布局的UI,想让它不被3d物体遮挡,始终显示在上层。 二、解决方案 使用shader解决 在 UI 的材质中禁用深度测试(ZTest),强制 UI 始终渲染在最上层。 Shader "Custo…...
postgresql 数据库使用
目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…...
Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级
一、缓存雪崩: 1、什么是缓存雪崩: 如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果…...
【SpringMVC】常用注解:@RequestParam
1.作用 如果控制器标注的方法的参数名称与前端传递过来的参数名称不一致,使得SpringMVC无法自动启动,那么我们可以使用该注解实现前后端参数的绑定。 2.相关属性 value/name:这两个属性都是一个作用,都是描述参数的名称&#x…...
JVM垃圾收集器相关面试题(1)
垃圾收集与内存管理摘要 一.核心垃圾收集算法对比 算法原理优点缺点适用场景标记-清除两次遍历(标记存活对象→清除未标记对象)实现简单内存碎片化、双遍历效率低老年代(结合整理)标记-复制内存对半分,存活对象复制到…...
详解SQL数据查询功能
数据查询 一、 单表查询1. 选择表中的若干列2. 选择表中的若干元组3. ORDER BY 子句4. 聚合函数5. GROUP BY 子句6. LIMIT 子句综合示例: 二、 多表查询1. 等值连接查询 (Equi-Join)2. 非等值连接查询 (Non-Equi Join)3. 自然连接查询 (Natural Join)4. 复合条件连接…...
车载以太网测试-11【网络层-ICMP协议】
目录 1 摘要2 ICMP协议帧结构2.1 IP头部2.2 ICMP头部2.3 ICMP数据部分2.4 示例:ICMP回显请求(Ping请求) 3 ICMP协议在车载以太网的应用3.1 为什么需要ICMP?3.1.1 网络连通性测试3.1.2 错误报告3.1.3 网络性能监测3.1.4 路径MTU发现…...
leetcode:728. 自除数(python3解法)
难度:简单 自除数 是指可以被它包含的每一位数整除的数。 例如,128 是一个 自除数 ,因为 128 % 1 0,128 % 2 0,128 % 8 0。 自除数 不允许包含 0 。 给定两个整数 left 和 right ,返回一个列表ÿ…...
【QT】-一文读懂抽象类
抽象类(Abstract Class)是面向对象编程中的一个概念,指的是无法被实例化的类,它通常作为其他类的基类。抽象类的作用是定义一个接口(或约定),让派生类(继承自抽象类的类)来实现具体的功能。 抽象类的特点: 包含纯虚函数(Pure Virtual Function): 抽象类通常包含一…...
vue3-computed计算属性和reactive响应式系统结合使用
1.前言 vue3中使用reactive函数创建一个响应式对象,当对象数据发生变化的时候,依赖这些数据的计算属性和模板会自动的更新。 2.实例 2.1 简写 <template><div><p>用户名: {{ userName }}</p><p>用户名的大写形式: {{ u…...
Dubbo请求调用本地服务
文章目录 前言配置 Dubbo 本地调用方法一:application.yml 中配置方法二:DubboReference 注解中指定 注意个人简介 前言 在微服务架构中,Apache Dubbo 作为一款高性能、轻量级的 RPC 框架,被广泛应用于分布式系统。通常ÿ…...
Pycharm 社区版安装教程
找到安装包双击安装文件---点击下一步 一般路径是:C:\Rambo\Software\Development 选择完成后就是如下地址: C:\Rambo\Software\Development\PyCharm Community Edition 2024.3.3 点击上述3个位置就可以了----下一步 等待安装就可以了---完成后点击完成…...
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组 前言一、用户和组概念用户类型对比表格主要组和补充组对比表格: 二、本地用户账户增删改查三、本地组账户 前言 上篇博客我们详细了解了从红帽和 DNF 软件仓库下载…...
在虚拟环境里面配置Linux系统
Linux系统有很多版本,常用的有Ubantu乌班图,和CentOS 不同的版本在使用的时候,有部分执行方式的不同 安装的流程都一样 首先,想要安装Ubantu,要去它的官网,找下载连接,然后下载iso后缀的安装…...
React开发指南:核心、实践与案例
文章目录 一、React核心架构与设计哲学1.1 虚拟DOM与Diff算法1.2 JSX编译原理1.3 组件化设计模式1.4 Fiber架构解析1.5 组件生命周期(类组件) 二、React核心特性详解2.1 数据流管理2.2 Hooks革命2.3 Context API进阶2.4 自定义Hooks设计模式 三、React 1…...
分享vue好用的pdf 工具实测
vue3-pdf-app: 带大纲,带分页,带缩放,带全屏,带打印,带下载,带旋转 下载依赖: yarn add vue3-pdf-appornpm install vue3-pdf-app 配置类: 创建文件 pdfConfig.ts /…...
Redis分布式锁深度剖析:从原理到Redisson实战,破解脑裂与高并发锁难题
一、📌 分布式锁的核心应用场景 场景类型典型案例风险说明🚀 高并发场景电商秒杀、票务抢购库存超卖风险⏰ 定时任务场景集群日志清理、数据统计任务重复执行🔄 幂等场景支付接口重试、订单创建资金重复扣款 二、🔧 Redis分布式锁…...
Markdown Poster – 免费Markdown转图片工具|优雅图文海报制作与社交媒体分享
Markdown Poster是什么 Markdown Poster 是一款高效的 Markdown 转图片工具,利用灵活编辑和实时预览功能帮助用户轻松制作优雅的图文海报。该工具内置丰富的海报模板和多种主题选项,支持导出为图片和 HTML 代码,适用于社交媒体分享、网站集成…...
