Logstash 8.x 入门实战

Logstash 8.x 入门实战:搭配 Filebeat + Elasticsearch 实现分布式日志采集分析

一、为什么需要分布式日志收集

在云原生与微服务架构下,业务被拆分为数十个独立服务,分散部署在物理机、容器、K8s 节点中,每台节点都会产生独立的日志文件。传统单机登录查看日志的方式,已经完全无法满足运维排查、业务分析的需求:

  • 故障排查效率极低:请求链路跨多个服务,需要逐台登录服务器捞日志,无法串联完整调用过程

  • 统计分析难以实现:PV/UV、接口耗时、错误率等核心指标,无法基于分散日志做统一统计

  • 日志留存无保障:服务器磁盘故障、服务扩缩容都会导致日志丢失,无法满足合规审计要求

  • 中间件日志难统一:Nginx、MySQL、Redis 等组件日志分散,无法做整体运维监控

业界针对这类问题的成熟解决方案是 Elastic Stack(原 ELK 技术栈),通过标准化的采集、清洗、存储、可视化全链路,实现海量分布式日志的统一管理。其中「Filebeat 采集 + Logstash 清洗 + Elasticsearch 存储」是最经典、最易落地的入门级架构,也是生产环境日志系统的基础方案。

二、核心组件与整体数据流

本文基于 Elastic Stack 8.15.x(当前官方长期稳定版) 进行讲解,8.x 版本是 Elastic 官方主推的稳定主线,默认开启全链路安全认证、原生支持 ECS 通用字段规范、性能与稳定性相较 7.x 有大幅提升。

2.1 各组件核心定位

  1. Filebeat 轻量级日志采集器,用 Go 语言开发,内存占用仅几十 MB,安装在产生日志的业务服务器上。它会持续监听指定日志文件,增量读取日志内容,支持断点续传、日志轮转自动识别,保证日志不丢不重,是官方推荐的边缘采集端。

  2. Logstash 数据处理管道,是整个链路的「清洗加工车间」。采用经典的 Input(输入源)→ Filter(过滤转换)→ Output(输出目的地)三段式架构,支持上百种输入输出插件,可对非结构化日志做解析、格式化、脱敏、富集等处理,将日志转为标准化结构后输出。

  3. Elasticsearch 分布式全文搜索引擎,是日志的最终存储与检索载体。支持近实时的全文检索、多维度聚合分析,能够快速在 TB 级日志中检索关键字,也支持通过 DSL 语句统计各类业务指标。

  4. Kibana 可视化交互平台,对接 Elasticsearch 数据,提供日志查询、仪表盘、告警、链路追踪等图形化功能,是日常运维分析的主要入口。

2.2 完整数据流

Nginx 产生访问日志 → Filebeat 监听文件增量采集 → 发送至 Logstash 5044 端口 → Logstash 解析日志、格式化字段、统一结构 → 写入 Elasticsearch 索引 → Kibana 可视化查询、统计、告警

三、环境准备

重要原则:Elastic Stack 所有组件的大版本必须完全一致,否则会出现协议不兼容、数据解析异常等问题,本文所有组件均采用 8.15.x 稳定版。

  • 操作系统:CentOS 7.9+ / Ubuntu 20.04+(Linux 通用)

  • 前置依赖:Logstash、Elasticsearch 均内置配套 JDK(8.x 内置 JDK 17),无需单独安装 Java 环境

  • 基础环境:提前安装好 Elasticsearch 8.15.x 并正常启动,记录好 elastic 账号密码、CA 证书路径(8.x 默认开启 HTTPS 与身份认证)

  • 服务器规划:建议 Logstash 单独部署,Filebeat 部署在业务服务器,Elasticsearch 独立集群部署

四、Logstash 8.x 安装与基础使用

4.1 下载与安装

  1. 从官方历史版本页面下载安装包,或直接通过 wget 下载:

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.15.0-linux-x86_64.tar.gz

  1. 解压到指定安装目录:

tar -zxvf logstash-8.15.0-linux-x86_64.tar.gz -C /opt/ cd /opt/logstash-8.15.0

  1. 环境变量配置(可选) Logstash 已内置配套 JDK,默认会自动识别。若系统存在多版本 JDK,可配置环境变量强制使用内置版本:
复制代码
echo "export LS_JAVA_HOME=/opt/logstash-8.15.0/jdk" >> /etc/profile 
source /etc/profile

4.2 快速启动验证

我们先用最简单的「控制台输入、控制台输出」模式,验证 Logstash 基础运行能力:

复制代码
bin/logstash -e 'input { stdin {} } output { stdout {} }'
  • -e:直接在命令行指定配置内容,无需编写配置文件,适合快速测试

启动等待十几秒,出现 Successfully started Logstash API endpoint 即代表启动成功。在控制台输入 hello logstash,回车后会看到结构化的输出结果,包含 message、host、@timestamp、@version 等字段。

Ctrl + D 可退出控制台模式。

4.3 核心配置结构说明

Logstash 所有配置都遵循三段式结构,这是理解 Logstash 的核心:

  • input:定义数据来源,比如接收 Filebeat 数据、读取文件、消费 Kafka 等

  • filter:定义数据处理逻辑,比如解析非结构化日志、字段转换、数据过滤、脱敏等

  • output:定义数据输出目的地,比如写入 Elasticsearch、输出到文件、发送到消息队列等

4.4 编写 Nginx 日志处理配置

我们创建一个专门处理 Nginx 访问日志的配置文件 config/nginx-log-pipeline.conf

复制代码
# 1. 输入源:接收 Filebeat 发送的日志
input {
  beats {
    port => 5044
    # 生产环境建议开启 TLS 加密传输,配置证书
    # ssl => true
    # ssl_certificate_authorities => ["/path/to/ca.crt"]
  }
}

# 2. 过滤器:解析 Nginx 日志为结构化字段
filter {
  grok {
    # 匹配 Nginx 默认 combined 格式日志
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }

  # 转换时间字段,修正时区差,覆盖默认 @timestamp
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
    timezone => "Asia/Shanghai"
  }

  # 可选:删除冗余字段
  mutate {
    remove_field => ["message", "timestamp"]
  }
}

# 3. 输出:写入 Elasticsearch 8.x
output {
  elasticsearch {
    hosts => ["https://localhost:9200"]
    index => "nginx-access-log-%{+YYYY.MM.dd}"
    # 8.x 默认开启安全认证,配置账号密码
    user => "elastic"
    password => "你的ES密码"
    # 配置 ES 的 CA 证书,解决 HTTPS 证书校验问题
    ssl_certificate_authorities => ["/opt/elasticsearch-8.15.0/config/certs/http_ca.crt"]
  }

  # 调试时可开启控制台输出,验证解析结果
  # stdout { codec => rubydebug }
}

配置说明

  • 8.x 版本 Elasticsearch 默认启用 HTTPS,连接时必须配置证书或关闭校验,生产环境不建议关闭校验

  • %{COMBINEDAPACHELOG} 是 Logstash 内置的通用匹配模式,可直接解析 Nginx 默认 combined 格式日志

  • 生产环境建议按天拆分索引,方便后续日志生命周期管理与过期删除

  • 对于自定义格式的 Nginx 日志,可通过 Grok Debugger 在线工具调试自定义表达式

4.5 后台启动与配置重载

使用以下命令后台启动 Logstash,并开启配置自动重载,修改配置后无需重启即可生效:

复制代码
nohup bin/logstash -f config/nginx-log-pipeline.conf --config.reload.automatic &

启动后可通过 logs/logstash-plain.log 查看运行日志,确认 5044 端口正常监听。

五、Filebeat 8.x 安装与对接配置

5.1 为什么选择 Filebeat

早期 ELK 架构会在每台服务器部署 Logstash 采集日志,但 Logstash 基于 Java 开发,资源占用高,会挤压业务服务资源。而 Filebeat 作为轻量级采集端,完美解决了这个问题:

  • 资源占用极低,常态内存占用仅几十 MB

  • 原生支持断点续传,重启后不会重复读取日志

  • 自动识别日志轮转,日志文件切分后不会中断采集

  • 内置大量官方模块,可一键接入 Nginx、MySQL、Redis 等常见组件

5.2 下载与安装

  1. 下载对应版本安装包:

    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.15.0-linux-x86_64.tar.gz

  2. 解压安装:

    tar -zxvf filebeat-8.15.0-linux-x86_64.tar.gz -C /opt/
    cd /opt/filebeat-8.15.0

5.3 修改核心配置

Filebeat 的核心配置文件是 filebeat.yml,我们需要配置「日志输入源」和「输出目的地」两部分。

注意:8.x 版本已废弃旧的 log 输入类型,统一使用 filestream 类型作为文件采集标准输入。

  1. 配置日志输入源 找到 filebeat.inputs 部分,修改为监听 Nginx 访问日志:

    filebeat.inputs:

    • type: filestream

      开启该采集配置

      enabled: true

      日志文件路径,支持通配符

      paths:
      • /www/wwwlogs/access.log

      可配置多个路径

      - /var/log/nginx/*.log

  2. 配置输出到 Logstash 找到 Outputs 部分,注释掉默认的 elasticsearch 输出,开启 logstash 输出:

    注释默认的 ES 直接输出

    #output.elasticsearch:

    hosts: ["localhost:9200"]

    开启 Logstash 输出

    output.logstash:

    Logstash 服务地址与端口,对应 input 中配置的 5044 端口

    hosts: ["192.168.65.114:5044"]

    若 Logstash 开启 TLS,需配置证书

    ssl.certificate_authorities: ["/path/to/ca.crt"]

5.4 启动与断点续传机制

后台启动 Filebeat:

复制代码
nohup ./filebeat -e -c filebeat.yml -d "publish" &

Filebeat 会在 data/registry 目录下记录每个日志文件的读取偏移量,保证服务重启后从上次的位置继续读取,不会丢日志也不会重复采集。

  • 如果需要清空历史记录、重新从头采集日志,可以停止 Filebeat 后删除 data/registry 目录,再重新启动即可。

5.5 进阶:使用 Nginx 内置模块(生产推荐)

8.x 版本 Filebeat 内置了大量官方模块,其中 Nginx 模块可以自动解析访问日志、错误日志,输出符合 ECS 通用字段规范的结构化数据,无需手写 Grok 表达式,大幅降低配置成本:

复制代码
# 查看可用模块
./filebeat modules list

# 启用 nginx 模块
./filebeat modules enable nginx

# 修改模块配置,指定日志路径
vim modules.d/nginx.yml

该方式适合生产环境标准化部署,字段统一、维护成本低。

六、Elasticsearch 8.x 基础使用与验证

6.1 Elasticsearch 简介

Elasticsearch 是基于 Lucene 构建的分布式全文搜索引擎,也是 Elastic Stack 的核心存储组件。8.x 版本在安全、性能、可观测性上做了大量增强:默认开启全链路安全认证、支持向量检索、存储性能优化等,非常适合日志存储、全文检索、数据分析场景。

6.2 验证日志写入

启动完 Filebeat 和 Logstash 后,访问几次 Nginx 站点产生新日志,通过 ES 的 REST 接口验证日志是否成功写入。

注意:8.x 默认 HTTPS 协议,访问时需要携带账号密码与 CA 证书。

  1. 查看索引是否创建成功

    curl --cacert /opt/elasticsearch-8.15.0/config/certs/http_ca.crt
    -u elastic:你的ES密码
    https://localhost:9200/_cat/indices?v

如果列表中出现 nginx-access-log-日期 格式的索引,说明日志已经成功写入。

  1. 统计当日日志总条数

    curl --cacert /opt/elasticsearch-8.15.0/config/certs/http_ca.crt
    -u elastic:你的ES密码
    -X GET "https://localhost:9200/nginx-access-log-*/_count"
    -H 'Content-Type: application/json' -d'
    {
    "query": {
    "range": {
    "@timestamp": {
    "gte": "now-1d"
    }
    }
    }
    }
    '

  2. 查询前 10 条日志内容

    curl --cacert /opt/elasticsearch-8.15.0/config/certs/http_ca.crt
    -u elastic:你的ES密码
    -X GET "https://localhost:9200/nginx-access-log-*/_search?size=10&pretty"

返回结果中可以看到 clientip、request、response、agent 等拆分后的字段,说明 Grok 解析成功。

6.3 Kibana 可视化查询

如果安装了 Kibana,进入界面后创建对应索引的数据视图(8.x 版本原索引模式已更名为数据视图),之后就可以:

  • 通过关键字快速检索日志,支持多维度条件过滤

  • 用仪表盘统计每日 PV、UV、热门接口、错误状态码占比

  • 配置告警规则,异常日志实时通知运维人员

七、完整链路联调步骤

  1. 启动 Elasticsearch,确认 9200 端口正常,账号密码可正常登录

  2. 启动 Logstash,查看日志确认 5044 端口监听成功,无报错

  3. 启动业务服务器上的 Filebeat,查看日志确认已成功连接 Logstash

  4. 访问 Nginx 站点,产生新的访问日志

  5. 调用 ES 查询接口,确认日志成功写入且字段解析正确

  6. 在 Kibana 中创建数据视图,验证可视化查询能力

八、8.x 版本常见问题与排错方案

1. Logstash 连接 ES 报证书校验失败

  • 原因:8.x ES 默认开启 HTTPS,未配置 CA 证书会导致握手失败

  • 解决:在 elasticsearch 输出配置中添加 ssl_certificate_authorities 指定 CA 证书路径;测试环境可临时添加 ssl_verification_mode => "none" 关闭校验,生产环境不推荐

2. Grok 解析失败,字段未拆分

  • 原因:Nginx 日志格式与默认模板不匹配,自定义格式无法直接用 COMBINEDAPACHELOG

  • 解决:复制一行真实日志,用在线 Grok Debugger 工具调试匹配表达式;生产环境推荐使用 Filebeat Nginx 模块替代手写 Grok

3. Filebeat 不采集新日志

  • 检查日志文件路径是否正确,Filebeat 进程是否有读取日志文件的权限

  • 检查 registry 文件是否损坏,停止 Filebeat 后删除 data/registry 目录重试

  • 查看 filebeat 日志,确认是否有文件读取、连接失败的报错

4. 日志时间与北京时间差 8 小时

  • 原因:Logstash 默认使用 UTC 时间存储

  • 解决:在 filter 的 date 插件中指定 timezone => "Asia/Shanghai",将日志时间转换为东八区

5. Logstash 启动慢、内存占用高

  • 原因:默认 JVM 堆内存配置为 1G,测试环境资源不足

  • 解决:修改 config/jvm.options,调整 -Xms-Xmx 参数,测试环境可设为 512m;生产环境根据日志量调整为 2-4G

6. 日志重复采集

  • 常见于日志轮转、手动修改日志文件的场景

  • 避免手动修改已采集过的日志文件;配置合理的日志轮转策略,确保轮转后的文件不被重复监听

九、生产环境扩展方向

本文演示的是基础入门架构,在生产环境中可以从以下方向做优化升级:

  1. 增加 Kafka 缓冲层:在 Filebeat 和 Logstash 之间加入 Kafka,应对流量洪峰,避免日志突增冲垮 Logstash,实现采集与处理解耦

  2. 标准化日志结构:业务日志优先打印 JSON 结构化日志,减少 Grok 解析成本,提升处理效率

  3. 性能优化:Logstash 配置多管道、调整批量写入大小、工作线程数;ES 集群部署,分片副本合理规划

  4. 高可用部署:Logstash 多节点部署,Filebeat 配置多地址负载均衡;ES 三节点起步集群,避免单点故障

  5. 日志生命周期管理:通过 ES ILM 索引生命周期管理,自动实现热温冷数据分层、过期日志自动删除,降低存储成本

  6. 安全加固:全链路开启 TLS 加密传输,配置最小权限账号,开启审计日志,满足等保合规要求

相关推荐
Ai思想家10 小时前
私有化部署的服务器选型与容量规划
人工智能·安全·ai
珠***格12 小时前
双碳目标下:四可装置如何助力光伏消纳与碳数据上报
网络·人工智能·分布式·安全·边缘计算
科力锐品牌君14 小时前
行业龙头|科力锐全链路防勒索 + 多中心容灾方案,构筑河南翔宇医疗业务安全闭环!
网络·数据库·分布式·安全·数据安全·备份
txg66616 小时前
VULOC:基于汇编切片的漏洞定位框架,精准锁定二进制中的危险代码
汇编·人工智能·深度学习·安全·网络安全
数据知道17 小时前
IDOR 不安全的直接对象引用:API 越权实战检测
java·开发语言·网络·安全·网络安全
上海云盾-小余18 小时前
2026 网站基础防护指南:新手搭建低成本安全体系全过程总结
安全
2401_8949155318 小时前
Geo 优化源码部署常见报错排查:连接失败、地图加载、地域词失效解决方案
服务器·开发语言·python·安全·php
Nayxxu1 天前
Gemini Computer Use 安全清单:浏览器、桌面、移动端自动化怎么控权限
运维·安全·自动化
Sagittarius_A*1 天前
哈希与认证基础(一):哈希函数的安全目标:原像、第二原像与碰撞
算法·安全·信息安全·密码学·哈希算法