温馨提示×

CentOS Filebeat与Logstash如何联动

小樊
39
2025-12-19 12:41:48
栏目: 智能运维

在 CentOS 上让 Filebeat 与 Logstash 协同工作


一 架构与端口约定

  • Filebeat 负责采集本地日志文件,作为轻量采集器将数据发送到 LogstashBeats 输入插件(默认端口 5044)
  • Logstash5044 端口监听 Beats 数据,进行解析与加工(如 GrokDatemutate 等),再输出到 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: log
  enabled: true
  paths:
    - /var/log/*.log

output.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: log
        enabled: true
        paths:
          - /opt/logs/app1/*.log
        fields:
          project: "app1"
      - type: log
        enabled: true
        paths:
          - /opt/logs/app2/*.log
        fields:
          project: "app2"
        fields_under_root: true
      output.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: log
        enabled: true
        paths:
          - /apps/usr/appdata/logs/*.log
        multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]'
        multiline.negate: false
        multiline.match: after
      
  • 安全与网络
    • 若跨主机部署,开放 Logstash 主机 5044/TCP 入站;生产环境建议启用 TLS认证(在 Beats 与 Logstash 双方配置证书与密码/密钥)。

0