温馨提示×

centos filebeat与logstash如何配合

小樊
43
2025-12-05 15:47:10
栏目: 智能运维

在 CentOS 上让 Filebeat 与 Logstash 协同工作

架构与端口

  • Filebeat 部署在需要采集日志的每台主机,负责读取文件并发送到 LogstashBeats 输入端口 5044
  • Logstash 监听 5044,进行解析与加工(如 GrokDate),再输出到 Elasticsearch(常见端口 9200)。
  • 整体链路:Filebeat → Logstash → Elasticsearch → Kibana

安装与准备

  • 安装组件(以 YUM 为例,确保已配置 Elastic 或系统仓库):
    • 安装 Filebeat:sudo yum install filebeat
    • 安装 Logstash:sudo yum install logstash
  • Logstash 与 Filebeat 不在同一台机器,在防火墙放行 TCP 5044
    • sudo firewall-cmd --permanent --zone=public --add-port=5044/tcp
    • sudo firewall-cmd --reload
  • 注意:Logstash 基于 Java,需预先安装 JDK 8/11/15(按所用版本要求)。

配置步骤

  • Filebeat 配置(示例:/etc/filebeat/filebeat.yml
    • 采集 Nginx 访问与错误日志,并打上自定义类型,便于 Logstash 分流处理:
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
          - /var/log/nginx/access.log
          - /var/log/nginx/error.log
        fields:
          log_type: nginx-access   # 用于 Logstash 条件判断
        fields_under_root: false
      
      - type: log
        enabled: true
        paths:
          - /var/log/nginx/error.log
        fields:
          log_type: nginx-error
        fields_under_root: false
      
      output.logstash:
        hosts: ["logstash_host:5044"]
      
  • Logstash 配置(示例:/etc/logstash/conf.d/filebeat.conf
    • 接收 Beats 数据,按类型解析,写入按日命名的索引:
      input {
        beats {
          port => 5044
        }
      }
      
      filter {
        if [fields][log_type] == "nginx-access" {
          grok {
            match => { "message" => "%{COMBINEDAPACHELOG}" }
          }
          date {
            match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
          }
        }
        if [fields][log_type] == "nginx-error" {
          grok {
            match => { "message" => "%{ERRORLOG}" }
          }
          date {
            match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
          }
        }
      }
      
      output {
        elasticsearch {
          hosts => ["elasticsearch_host:9200"]
          index => "nginx-%{+YYYY.MM.dd}"
          # 如启用安全认证,补充:
          # user => "elastic"
          # password => "your_password"
        }
      }
      
  • 说明
    • 通过 fields.log_type 在 Logstash 中做条件分支,不同日志走不同 Grok 规则。
    • 索引命名可按业务自定义,示例为 nginx-YYYY.MM.dd

启动与验证

  • 启动服务并设置开机自启:
    • sudo systemctl start filebeat && sudo systemctl enable filebeat
    • sudo systemctl start logstash && sudo systemctl enable logstash
  • 查看运行状态与日志:
    • sudo systemctl status filebeat
    • sudo systemctl status logstash
    • sudo journalctl -u filebeat -f
    • sudo journalctl -u logstash -f
  • 验证数据是否写入 Elasticsearch
    • 查看索引:curl -X GET "localhost:9200/_cat/indices?v"
    • 查询文档:curl -X GET "localhost:9200/filebeat-*/_search?pretty"(如启用了安全认证,请在命令中加入 -u elastic:password

常见问题与优化

  • 配置语法:Filebeat 使用 YAML,注意缩进与冒号后的空格;修改配置后先语法校验再重启。
  • 多实例与管道:Logstash 可通过 pipelines.yml 管理多个管道;单个实例也可在 /etc/logstash/conf.d/ 下放置多个 .conf 文件并按需包含。
  • JVM 资源:在 config/jvm.options 中合理设置 -Xms/-Xmx(如 -Xms512m -Xmx512m),避免 OOM。
  • 多行日志:遇到 Java 堆栈等多行日志,在 Filebeat 使用 multiline 合并后再发送到 Logstash,减少解析错误。
  • 索引与模板:生产建议统一索引前缀与 ILM 策略;如使用内置模板,可在输出中指定 template.name / template.path / template.overwrite

0