ubuntu

Ubuntu Filebeat与Logstash如何协同工作

小樊
34
2025-11-03 02:04:32
栏目: 智能运维

Ubuntu Filebeat与Logstash协同工作机制
Filebeat作为轻量级日志采集器,负责从Ubuntu服务器收集日志文件(如系统日志、应用日志),并通过Beats协议将数据发送至Logstash;Logstash作为数据处理管道,接收Filebeat传输的日志,进行过滤、解析、丰富等操作,最终将处理后的结构化数据发送至Elasticsearch等存储系统。两者协同实现了日志的高效采集灵活处理集中存储

1. 安装Filebeat与Logstash

在Ubuntu系统上,通过APT包管理器安装两者(确保网络可访问Elastic官方仓库):

# 更新软件包列表
sudo apt-get update

# 安装Filebeat
sudo apt-get install filebeat -y

# 安装Logstash
sudo apt-get install logstash -y

安装完成后,Filebeat默认配置文件位于/etc/filebeat/filebeat.yml,Logstash配置文件位于/etc/logstash/conf.d/(建议新建.conf文件,如filebeat.conf)。

2. 配置Filebeat采集日志并发送至Logstash

2.1 启用Filebeat模块(可选但推荐)

Filebeat内置模块(如systemnginxmysql)可简化常见日志格式的收集与解析。以系统日志为例,启用模块并查看配置:

# 启用system模块(收集/var/log/syslog、/var/log/auth.log等)
sudo filebeat modules enable system

# 查看已启用模块
sudo filebeat modules list

模块启用后,Filebeat会自动生成对应输入配置(如监控/var/log/syslog)。

2.2 自定义日志输入(非模块场景)

若需监控自定义日志文件(如/var/log/myapp/*.log),手动编辑/etc/filebeat/filebeat.yml,添加log类型输入:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/myapp/*.log  # 监控所有.log文件

2.3 配置Logstash输出

修改Filebeat配置,将日志发送至Logstash(默认监听5044端口):

output.logstash:
  hosts: ["localhost:5044"]  # 若Logstash在远程服务器,替换为IP地址

3. 配置Logstash接收与处理日志

创建Logstash配置文件(如/etc/logstash/conf.d/filebeat.conf),定义输入过滤输出三部分:

input {
  beats {
    port => 5044  # 监听Filebeat发送的端口
    host => "0.0.0.0"  # 允许所有IP连接(生产环境建议限制为服务器IP)
  }
}

filter {
  # 示例1:解析系统日志(需配合system模块)
  if [fileset][module] == "system" {
    if [fileset][name] == "auth" {  # 处理auth日志(如ssh登录)
      grok {
        match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} sshd(?:\[%{POSINT:pid}\])?: %{DATA:event} %{DATA:method} for (invalid user )?%{DATA:user} from %{IPORHOST:ip} port %{NUMBER:port} ssh2" }
      }
      date {
        match => ["timestamp", "ISO8601"]  # 将日志时间转换为@timestamp字段
      }
      mutate {
        remove_field => ["message", "timestamp"]  # 删除原始message和临时字段
      }
    }
  }

  # 示例2:解析Nginx访问日志(需自定义路径)
  # if [fileset][name] == "access" {
  #   grok {
  #     match => { "message" => "%{COMBINEDAPACHELOG}" }
  #   }
  #   date {
  #     match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
  #   }
  # }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]  # 发送至Elasticsearch
    index => "filebeat-%{+YYYY.MM.dd}"  # 按日期生成索引
  }
  stdout { codec => rubydebug }  # 测试时输出到终端(可选)
}

说明

4. 启动与验证服务

4.1 启动服务

# 启动Filebeat
sudo systemctl start filebeat
sudo systemctl enable filebeat  # 设置开机自启

# 启动Logstash
sudo systemctl start logstash
sudo systemctl enable logstash  # 设置开机自启

4.2 验证数据传输

5. 关键注意事项

0
看了该问题的人还看了