在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战

在生产环境中,我们经常遇到 隔离内网服务器,无法直接访问内部 ELK 集群的情况。例如,数据中心的 115 机器无法直接访问 ES 内网端口,只能通过 nginx 公网代理访问 ELK。本文记录了从零开始配置 Filebeat,实现全量日志采集、推送到 ELK,并在 Kibana 完整展示日志的实战过程。

一、问题背景

  • 环境
    • 数据中心 115 机器,Linux(麒麟 V10)
    • 日志路径:/data/services/icbc-epay/logs1/*.loglogs2/*.log
    • 单日日志量:500MB+
    • 内网与 ELK(阿里云部署)不通,只能访问 nginx 公网代理域名
    • Kibana 公网访问域名:https://kibana.xxx.com
  • 目标
    1. 使用 Filebeat 采集 115 机器日志。
    2. 推送到 ELK Elasticsearch,建立每日索引。
    3. 在 Kibana Discover 中完整查看多行堆栈日志。
    4. 保证旧日志也能被采集。

二、遇到的问题

  1. Filebeat 版本 8.11 默认创建数据流索引 .ds-*
    • 数据流默认只显示时间戳和 agent 信息,多行日志 _source 不展开。
    • 导致 Discover 页面字段为空或者只显示少量日志。
  2. 日志显示不全
    • 日志堆栈是多行,需要使用 multiline 配置。
    • 旧日志已被 Filebeat registry 记录,修改 multiline 后需要重采集。
  3. Filebeat 服务启动失败
    • 由于 /var/lib/filebeat/filebeat.lock 被占用,多次重启失败。
    • 需清理 registry 或停止已有 Filebeat 进程。

三、解决方案

1. Filebeat 安装与基础配置

确保 Filebeat 已安装:

复制代码
复制代码
sudo rpm -ivh filebeat-8.11.2-x86_64.rpm  # 或者使用 apt/yum 安装

创建 Filebeat 配置 /etc/filebeat/filebeat.yml,核心配置如下:

复制代码
复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /data/services/icbc-epay/logs1/*.log
    - /data/services/icbc-epay/logs2/*.log
  multiline.pattern: '^\['
  multiline.negate: true
  multiline.match: after

# 全量采集日志,不做过滤
#processors: []

# 禁用 ILM
setup.ilm.enabled: false
setup.ilm.overwrite: false
setup.template.enabled: false

# 输出到 ES 普通索引
output.elasticsearch:
  hosts: ["https://kibana.XXXX.com:443/es"]
  username: "elastic"
  password: "YOUR_PASSWORD"
  ssl.verification_mode: none
  bulk_max_size: 500
  index: "filebeat-115-%{+yyyy.MM.dd}"

# 可选配置 Kibana,用于 Dashboard
setup.kibana:
  hosts: ["https://kibana.XXXX.com"]
  username: "elastic"
  password: "YOUR_PASSWORD"
  ssl.verification_mode: none

说明

  • multiline.pattern: '^\[' 用于将多行堆栈日志合并为一条事件。
  • setup.ilm.enabled: false 禁用 ILM,避免数据流索引。
  • 输出索引使用普通索引,每天一个索引,便于在 Discover 查看全量日志。

2. 清理旧 registry,保证 multiline 生效

Filebeat 会记录每个日志文件的读取位置(registry),修改 multiline 后,需要重采集旧日志:

复制代码
sudo systemctl stop filebeat
sudo mv /var/lib/filebeat/registry/filebeat /var/lib/filebeat/registry/filebeat.bak
sudo systemctl start filebeat

注意:大日志量重采集可能耗时较长。


3. 测试配置和输出

  • 测试 Filebeat 配置:

    filebeat test config -c /etc/filebeat/filebeat.yml

  • 测试 Elasticsearch 输出:

    filebeat test output -c /etc/filebeat/filebeat.yml

确认输出:

复制代码
dial up... OK
TLS... handshake... OK
talk to server... OK
version: 7.17.23

4. 启动 Filebeat 服务

复制代码
sudo systemctl enable filebeat
sudo systemctl start filebeat
sudo journalctl -u filebeat -f
  • 查看 harvester 是否启动:

    Harvester started for paths: [/data/services/icbc-epay/logs1/.log /data/services/icbc-epay/logs2/.log]


5. 验证日志是否推送成功

  1. 查询索引:

    curl -u elastic:YOUR_PASSWORD -k https://kibana.XXXX.com/es/_cat/indices?v | grep filebeat

输出示例:

复制代码
green  open   filebeat-8.11.2
yellow open   filebeat-115-2026.06.12   1   1          3   192.2kb
  1. 查询日志条数:

    curl -u elastic:YOUR_PASSWORD -k https://kibana.XXXX.com/es/filebeat-115-2026.06.12/_count


6. Kibana 配置

  1. Stack Management → Index Patterns 中,创建新的 Index Pattern:
    • 输入:filebeat-115-*
    • 时间字段选择:@timestamp
    • 刷新字段列表
  2. 在 Discover 页面就可以看到全量日志:
    • 多行堆栈日志会被正确合并
    • _source 可展开查看完整日志内容

7. 总结与经验

  • 数据流索引与普通索引区别
    数据流默认只显示 agent/timestamp,原始日志字段不展示。若要在 Discover 查看全量日志,推荐使用普通索引。
  • multiline 生效条件
    修改 multiline 配置后必须清理 registry 或新日志才能生效。
  • Filebeat 服务启动失败
    • 错误提示 /var/lib/filebeat/filebeat.lock 被占用 → 停止旧进程或清理 registry。
    • 配置冲突或多 output 配置 → 确保 filebeat.yml 只配置一次 output。
  • 大日志量采集优化
    • 设置 bulk_max_size: 500,避免小批量频繁发送。
    • 设置 nginx 代理 client_max_body_size 足够大,保证日志批量提交不被拒绝。

通过以上步骤,隔离内网的 115 机器已经可以完整采集日志、推送到 ELK,并在 Kibana Discover 全量查看日志,支持堆栈合并和多文件采集。

相关推荐
土星云SaturnCloud几秒前
边缘计算赋能电子焊接工位双摄AI管控:土星云SE110S-WC8实现合规检测与质量追溯全闭环
服务器·人工智能·ai·边缘计算
梦想的旅途24 分钟前
企微社群裂变实战:自动化群接龙与活动打卡系统搭建
运维·自动化·企业微信
Neolnfra12 分钟前
使用 Netdata 给服务器增加一个实时监控面板
运维·服务器
酷可达拉斯41 分钟前
自动化运维-Ansible触发器与变量
运维·服务器·自动化·ansible
不会就选b1 小时前
Linux之线程(二)
linux·运维·服务器
HiDev_1 小时前
【非标自动化】上位机快速上手(创建winform并运行起来)
运维·自动化
乐维_lwops1 小时前
乐维社区“专家坐诊”第405期问答
运维·cmdb·运维监控·答疑·运维智能体·乐维运维智能体
esabby1 小时前
韩国站群服务器租用平台推荐与外贸建站优势深度解析
运维·服务器
Aision_1 小时前
实习手记 Day:从 ELK 到 Agent 的“最后一公里”——告警消费与上下文富化
运维·人工智能·web安全·elk·网络安全·安全威胁分析
CDN3601 小时前
俄语区跨境站点优化实战:CDN+Nginx 解决 H5 白屏、交互延迟、链路卡顿问题
运维·nginx·交互·h5 加速·nginx 轻交互调优