CentOS Filebeat与Logstash怎样联动

作者:袖梨 2026-06-28

在 CentOS 上让 Filebeat 与 Logstash 协同工作

CentOS Filebeat与Logstash如何联动

一 架构与端口约定

  • Filebeat 负责采集本地日志文件,作为轻量采集器将数据发送到 Logstash 的 Beats 输入插件(默认端口 5044)。
  • Logstash 在 5044 端口监听 Beats 数据,进行解析与加工(如 Grok、Date、mutate 等),再输出到 Elasticsearch 或标准输出用于调试。
  • 常见输出索引命名:filebeat-%{+YYYY.MM.dd} 或按业务字段拆分如 %{[index_prefix]}-%{+YYYY.MM.dd}。

二 安装与目录

  • 在 CentOS 上可直接通过 YUM 安装(示例命令,需具备对应仓库权限):
    • 安装 Filebeat:sudo yum install filebeat
    • 安装 Logstash:sudo yum install logstash
  • 常用配置路径:
    • Filebeat:/etc/filebeat/filebeat.yml
    • Logstash 管道配置:/etc/logstash/conf.d/*.conf
  • 服务管理:
    • 启动/开机自启:sudo systemctl start|enable filebeatsudo systemctl start|enable logstash
    • 查看日志:sudo journalctl -u filebeat -fsudo journalctl -u logstash -f

三 最小可用配置示例

  • Filebeat 配置(/etc/filebeat/filebeat.yml):收集系统日志并发送到本机 Logstash
filebeat.inputs:- type: logenabled: truepaths:- /var/log/*.logoutput.logstash:hosts: ["localhost:5044"]
  • Logstash 配置(/etc/logstash/conf.d/filebeat.conf):接收 Beats 数据并写入 ES
input {beats {port => 5044}}filter {# 示例:解析 Apache 访问日志;其他日志请替换为合适的 grok 模式grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}date {match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]}}output {elasticsearch {hosts => ["localhost:9200"]index => "filebeat-%{+YYYY.MM.dd}"}}
  • 启动顺序建议:先启动 Logstash(确保 5044 监听正常),再启动 Filebeat。

四 验证与常见问题

  • 服务与连通性检查
    • 状态:sudo systemctl status filebeatsudo systemctl status logstash
    • 日志:sudo journalctl -u filebeat -fsudo journalctl -u logstash -f
    • 连通性(在 Filebeat 主机上):nc -vz <logstash_ip> 5044
  • Elasticsearch 数据校验
    • 索引列表:curl -X GET "localhost:9200/_cat/indices?v"
    • 查询样本:curl -X GET "localhost:9200/filebeat-*/_search?pretty"
  • 调试技巧
    • 临时将 Logstash 输出改为 stdout { codec => rubydebug } 观察事件结构。
    • 使用 Filebeat 自检:filebeat test configfilebeat test output(可快速发现配置与输出连通性问题)。

五 进阶用法

  • 多项目索引拆分(按 Filebeat 自定义字段路由)
    • Filebeat 增加字段:
      filebeat.inputs:- type: logenabled: truepaths:- /opt/logs/app1/*.logfields:project: "app1"- type: logenabled: truepaths:- /opt/logs/app2/*.logfields:project: "app2"fields_under_root: trueoutput.logstash:hosts: ["logstash:5044"]
    • Logstash 按字段设置索引前缀:
      input { beats { port => 5044 } }filter {if [project] == "app1" {mutate { add_field => { "index_prefix" => "filebeat-app1" } }} else if [project] == "app2" {mutate { add_field => { "index_prefix" => "filebeat-app2" } }} else {mutate { add_field => { "index_prefix" => "filebeat-default" } }}}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "%{[index_prefix]}-%{+YYYY.MM.dd}"}}
  • 多行日志(如 Java 堆栈)
    • Filebeat 片段:
      - type: logenabled: truepaths:- /apps/usr/appdata/logs/*.logmultiline.pattern: '^[[:space:]]+(at|.{3})[[:space:]]'multiline.negate: falsemultiline.match: after
  • 安全与网络
    • 若跨主机部署,开放 Logstash 主机 5044/TCP 入站;生产环境建议启用 TLS 与 认证(在 Beats 与 Logstash 双方配置证书与密码/密钥)。

相关文章

精彩推荐