Elastic Stack 8.16.0 日志收集平台的搭建

news2025/3/15 21:13:41

简介

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: elasticsearch
    hostname: elasticsearch
    image: elasticsearch:8.16.0
    user: "elasticsearch:elasticsearch"
    ports:
      - 9200:9200
    volumes:
      - /home/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /home/elasticsearch/data:/usr/share/elasticsearch/data
      - /home/elasticsearch/logs:/usr/share/elasticsearch/logs
    environment:
      - "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 {   # 输出到elasticsearch
    hosts =>  ["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: logstash
    hostname: logstash
    image: logstash:8.16.0
    command: logstash -f ./conf/logstash.conf
    volumes:
      - /home/logstash/conf/logstash.conf:/usr/share/logstash/conf/logstash.conf
    environment:
      - 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: filestream
  enabled: true
  paths:
    - /home/app/*.log
  # 多行日志合并(处理Java异常堆栈)
  multiline:
    pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'
    negate: false
    match: 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: true
  codec.json:
    pretty: true  

在测试的时候,可以通过output.console,将信息输出到控制台。

5.2 elk_filebeat_compose.yml 配置

elk_filebeat_compose.yml 的内容如下:

version: "3"
services:
  filebeat:
    container_name: filebeat
    hostname: filebeat
    image: elastic/filebeat:8.16.4
    user: root
    volumes:
      # 映射到容器中【作为数据源】
      - /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: kibana
    hostname: kibana
    image: kibana:8.16.0
    ports:
      - 5601:5601
    volumes:
      - /home/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
    environment:
      - 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

结尾

以上为本篇分析的全部内容。

关于本篇内容你有什么自己的想法或独到见解,欢迎在评论区一起交流探讨下吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2315656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

江科大51单片机笔记【16】AD/DA转换(下)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

Podman 运行redis 报错

Podman 运行redis 报错 一、报错内容 find: .: Permission denied chown: changing ownership of .: Permission denied二、问题分析 SELinux 模式 SELinux(Security-Enhanced Linux)是一种安全模块,旨在通过强制访问控制(MAC)来增强 Linux 系统的安全性。SELinux 具有…

基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)

这是一个结合图像和音频的情绪识别系统&#xff0c;从架构、数据准备、模型实现、训练等。包括数据收集、预处理、模型训练、融合方法、部署优化等全流程。确定完整系统的组成部分&#xff1a;数据收集与处理、模型设计与训练、多模态融合、系统集成、部署优化、用户界面等。详…

以太坊AI代理与PoS升级点燃3月市场热情,2025年能否再创新高?

币热网深度报道&#xff1a;以太坊AI代理与PoS升级引爆3月热潮&#xff0c;2025年能否再攀历史新高&#xff1f; 原文来源&#xff1a;币热网 - 区块链信息资讯平台 以太坊升级&#xff0c;市场热情高涨 近期&#xff0c;以太坊市场犹如被一股神秘力量点燃&#xff0c;掀起了…

Web网页制作(静态网页):千年之恋

一、是用的PyCharm来写的代码 二、代码中所用到的知识点&#xff08;无 js&#xff09; 这段HTML代码展示了一个简单的注册页面&#xff0c;包含了多个HTML元素和CSS样式的应用。 这段HTML代码展示了一个典型的注册页面&#xff0c;包含了常见的HTML元素和表单控件。通过CSS样…

tomcat应用的作用以及安装,以及tomcat软件的开机自启动。

一.tomcat介绍 1.作用 tomcat是一款用来部署网站服务器的一款软件。 动态网站主流语言&#xff1a; PHP, lamp/lnmp平台 Java语言&#xff0c;运行在tomcat平台。【只要这个网站或者软件是Java语言写的&#xff0c;我们都可以在tomcat平台上去运行这个java程序。】 网站是…

Unity中WolrdSpace下的UI展示在上层

一、问题描述 Unity 中 Canvas使用World Space布局的UI&#xff0c;想让它不被3d物体遮挡&#xff0c;始终显示在上层。 二、解决方案 使用shader解决 在 UI 的材质中禁用深度测试&#xff08;ZTest&#xff09;&#xff0c;强制 UI 始终渲染在最上层。 Shader "Custo…

Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

一、缓存雪崩&#xff1a; 1、什么是缓存雪崩&#xff1a; 如果缓在某一个时刻出现大规模的key失效&#xff0c;那么就会导致大量的请求打在了数据库上面&#xff0c;导致数据库压力巨大&#xff0c;如果在高并发的情况下&#xff0c;可能瞬间就会导致数据库宕机。这时候如果…

leetcode:728. 自除数(python3解法)

难度&#xff1a;简单 自除数 是指可以被它包含的每一位数整除的数。 例如&#xff0c;128 是一个 自除数 &#xff0c;因为 128 % 1 0&#xff0c;128 % 2 0&#xff0c;128 % 8 0。 自除数 不允许包含 0 。 给定两个整数 left 和 right &#xff0c;返回一个列表&#xff…

vue3-computed计算属性和reactive响应式系统结合使用

1.前言 vue3中使用reactive函数创建一个响应式对象&#xff0c;当对象数据发生变化的时候&#xff0c;依赖这些数据的计算属性和模板会自动的更新。 2.实例 2.1 简写 <template><div><p>用户名: {{ userName }}</p><p>用户名的大写形式: {{ u…

Pycharm 社区版安装教程

找到安装包双击安装文件---点击下一步 一般路径是&#xff1a;C:\Rambo\Software\Development 选择完成后就是如下地址&#xff1a; C:\Rambo\Software\Development\PyCharm Community Edition 2024.3.3 点击上述3个位置就可以了----下一步 等待安装就可以了---完成后点击完成…

Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;六&#xff09;创建、管理和删除本地用戶和组 前言一、用户和组概念用户类型对比表格主要组和补充组对比表格&#xff1a; 二、本地用户账户增删改查三、本地组账户 前言 上篇博客我们详细了解了从红帽和 DNF 软件仓库下载…

分享vue好用的pdf 工具实测

vue3-pdf-app&#xff1a; 带大纲&#xff0c;带分页&#xff0c;带缩放&#xff0c;带全屏&#xff0c;带打印&#xff0c;带下载&#xff0c;带旋转 下载依赖&#xff1a; yarn add vue3-pdf-appornpm install vue3-pdf-app 配置类&#xff1a; 创建文件 pdfConfig.ts /…

Markdown Poster – 免费Markdown转图片工具|优雅图文海报制作与社交媒体分享

Markdown Poster是什么 Markdown Poster 是一款高效的 Markdown 转图片工具&#xff0c;利用灵活编辑和实时预览功能帮助用户轻松制作优雅的图文海报。该工具内置丰富的海报模板和多种主题选项&#xff0c;支持导出为图片和 HTML 代码&#xff0c;适用于社交媒体分享、网站集成…

掌握市场先机:9款销售渠道管理工具深度测评

本文主要介绍了以下9款销售渠道管理工具&#xff1a;1.纷享销客&#xff1b; 2.销帮帮&#xff1b; 3.小满CRM&#xff1b; 4.有赞&#xff1b; 5.Oracle NetSuite&#xff1b; 6.Salesforce Sales Cloud&#xff1b; 7.Cin7&#xff1b; 8.Pipedrive&#xff1b; 9.BigCommerc…

OpenCV图像加权函数:addWeighted

1 addWeighted函数 在OpenCV 里&#xff0c;addWeighted 函数的作用是对两个图像进行加权求和&#xff0c;常用于图像融合、图像过渡等场景。函数如下&#xff1a; cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1&#xff1a;第一个输入图…

docker桌面版启动redis,解决无法连接

docker run -d --name redis -p 6379:6379 -v E:\2\redis\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf 在本地创建一个目录&#xff0c;里面有个redis.conf文件&#xff0c;内容如下&#xff0c;启动时绑定这个配置文件目…

Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。

Scratch是一款由麻省理工学院&#xff08;MIT&#xff09; 设计开发的少儿编程工具。其特点是&#xff1a;使用者可以不认识英文单词&#xff0c;也可以不使用键盘&#xff0c;就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以…

Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能

近日&#xff0c;Navicat 家族迎来了一位全新成员 — Navicat for Snowflake。Snowflake 是一款基于云架构的现代数据仓库解决方案&#xff0c;以其弹性扩展、高性能和易用性著称。这次首发的Navicat for Snowflake 专为简化 Snowflake 数据库管理任务而精心打造。它凭借其直观…

深度学习基础:线性代数本质2——线性组合、张成的空间与基

目录 一、线性组合 1. 用一个有趣的角度看向量坐标 2. 如果我们选择不同的基向量会怎样&#xff1f; 3. 线性组合 4. 张成的空间 ① 二维向量的张成的空间 ② 三维向量的张成的空间​编辑 5.线性相关 6.线性无关 7. 基的定义 一、线性组合 1. 用一个有趣的角度看向量坐…