温馨提示×

CentOS上Filebeat与Logstash联用指南

小樊
36
2025-11-05 19:24:26
栏目: 智能运维

CentOS上Filebeat与Logstash联用指南

1. 前提准备

确保CentOS系统已更新至最新版本,并安装了wgetrpm等基础工具。若未安装,可通过yum install -y wget rpm命令安装。

2. 安装Elastic官方YUM仓库

为确保Filebeat与Logstash版本兼容,需先添加Elastic官方YUM仓库:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-8.x]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

3. 安装Filebeat与Logstash

通过YUM仓库安装最新稳定版本的Filebeat和Logstash:

sudo yum install -y filebeat logstash

4. 配置Filebeat

Filebeat的配置文件位于/etc/filebeat/filebeat.yml,需修改以下核心参数:

  • 定义输入源:收集系统日志(/var/log/*.log),可根据需求调整为应用日志路径(如/opt/app/logs/*.log)。
  • 设置输出目标:将日志发送至本地的Logstash服务(默认端口5044),若Logstash部署在其他服务器,需替换为对应IP。
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.log  # 监控所有.log文件
  exclude_files: ['\.gz$']  # 排除压缩文件

output.logstash:
  hosts: ["localhost:5044"]  # Logstash地址
  # 若启用SSL加密,需取消以下注释并配置证书路径
  # ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

5. 配置Logstash

Logstash的配置文件需存放在/etc/logstash/conf.d/目录下(推荐使用单独文件,如filebeat.conf),配置分为输入过滤输出三部分:

  • 输入:使用beats插件接收Filebeat发送的数据,端口需与Filebeat配置一致(5044)。
  • 过滤:通过grok插件解析非结构化日志(如Apache/Nginx日志),date插件统一时间格式。
  • 输出:将处理后的数据发送至Elasticsearch(localhost:9200),并按日期生成索引(如filebeat-2025.11.05)。
input {
  beats {
    port => 5044  # 监听Filebeat的端口
    # 若启用SSL,需取消以下注释并配置证书
    # ssl => true
    # ssl_certificate => "/etc/logstash/certs/logstash.crt"
    # ssl_key => "/etc/logstash/certs/logstash.key"
  }
}

filter {
  # 示例:解析Apache Common Log格式
  if [fileset][module] == "apache" and [fileset][name] == "access" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
      match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]  # 解析日志中的时间戳
      target => "@timestamp"  # 覆盖默认的@timestamp字段
    }
    geoip {
      source => "clientip"  # 根据客户端IP添加地理位置信息
      target => "geoip"
    }
  }

  # 示例:清理冗余字段
  mutate {
    remove_field => ["message", "headers", "agent"]  # 删除不必要的字段
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]  # Elasticsearch地址
    index => "filebeat-%{+YYYY.MM.dd}"  # 动态生成索引名
    # 若启用认证,需取消以下注释并配置账号密码
    # user => "elastic"
    # password => "your_password"
  }

  # 调试时输出到控制台(生产环境建议关闭)
  stdout {
    codec => rubydebug  # 以易读格式显示数据
  }
}

6. 启动并启用服务

配置完成后,启动Filebeat和Logstash服务,并设置为开机自启:

# 启动Filebeat
sudo systemctl start filebeat
sudo systemctl enable filebeat

# 启动Logstash
sudo systemctl start logstash
sudo systemctl enable logstash

7. 验证配置

7.1 检查服务状态

确保Filebeat和Logstash均处于运行状态:

sudo systemctl status filebeat
sudo systemctl status logstash

若状态显示为active (running),则表示服务启动成功。

7.2 查看Filebeat日志

通过日志确认Filebeat是否成功发送数据至Logstash:

sudo tail -f /var/log/filebeat/filebeat

若看到Successfully sent batch of events to logstash字样,说明连接正常。

7.3 查看Logstash日志

检查Logstash是否接收到数据并进行处理:

sudo tail -f /var/log/logstash/logstash-plain.log

若看到Pipeline startedReceived event等字样,表示数据传输正常。

7.4 验证Elasticsearch索引

通过Elasticsearch的_cat/indices接口查看是否生成了Filebeat索引:

curl -X GET "localhost:9200/_cat/indices?v"

若看到类似filebeat-2025.11.05的索引,说明数据已成功存储至Elasticsearch。

8. 常见问题排查

8.1 连接失败

  • 问题:Filebeat无法连接到Logstash,日志显示Connection refused
  • 解决:检查Logstash是否启动,netstat -tulnp | grep 5044确认端口是否监听;若Logstash部署在远程服务器,需确保防火墙开放5044端口(firewall-cmd --add-port=5044/tcp --permanent; firewall-cmd --reload)。

8.2 数据未处理

  • 问题:Logstash接收到数据但未解析(如message字段仍为原始日志)。
  • 解决:检查Filter配置中的grok模式是否匹配日志格式(可使用Grok Debugger测试模式);确保date插件的match字段与日志中的时间格式一致。

8.3 性能瓶颈

  • 问题:Logstash处理速度慢,导致数据积压。
  • 解决:增加Logstash工作线程(pipeline.workers参数,默认等于CPU核心数);调整批处理大小(pipeline.batch.size,默认125);使用Redis/Kafka作为缓冲层(在Logstash前添加Redis输入插件)。

通过以上步骤,即可在CentOS上完成Filebeat与Logstash的联用配置,实现日志的收集、处理与存储。根据实际需求,可调整输入路径、过滤规则及输出目标,构建更复杂的日志处理管道。

0