在 Debian 上,Filebeat 通过系统日志路径、模块与输出插件与各类服务协同工作,实现日志采集、解析、转发与可视化。
安装与基础配置
- 安装 Filebeat(Debian 推荐使用官方 APT 源):
- 导入 GPG 并添加仓库(以 8.x 为例,按需替换版本号):
- wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- echo “deb https://artifacts.elastic.co/packages/8.x/apt stable main” | sudo tee /etc/apt/sources.list.d/filebeat.list
- 安装与开机自启:
- sudo apt-get update && sudo apt-get install filebeat
- sudo systemctl enable --now filebeat
- 主配置文件路径:/etc/filebeat/filebeat.yml。建议将输入与输出分文件管理(/etc/filebeat/inputs.d/、/etc/filebeat/outputs.d/),便于维护。
- 快速自检:
- 校验配置:sudo filebeat test config -c /etc/filebeat/filebeat.yml
- 校验输出连通:sudo filebeat test output
- 查看服务状态与日志:sudo systemctl status filebeat;sudo journalctl -u filebeat -f
与常见服务的协同方式
- 与 Elasticsearch 直连
- 适用:日志结构较统一、无需复杂处理。
- 要点:配置 hosts、可选 index 模板与 ILM 策略;开启安全时配置 username/password 或 API Key。
- 与 Logstash 协同
- 适用:需要 Grok 解析、字段丰富、分流与脱敏。
- 要点:Filebeat 输出到 Logstash 5044,Logstash 负责解析与再输出到 Elasticsearch 或外部系统。
- 与 Kibana 协同
- 适用:日志可视化与仪表板。
- 要点:通过 Index Pattern 关联 Filebeat 索引;使用 Filebeat 模块 + Kibana Dashboards 快速落地可视化。
- 与 systemd-journald 协同
- 适用:采集 journal 日志(服务标准输出/错误)。
- 要点:启用 systemd 输入模块,配置 journald 路径与 units 白名单,映射为结构化字段。
- 与 容器/编排 协同
- 适用:在 Kubernetes 中以 DaemonSet 运行,采集节点与容器日志。
- 要点:挂载 /var/log 与 /var/lib/docker/containers,使用 container 输入与 autodiscover。
典型场景配置示例
- 采集 NGINX 访问日志并直连 Elasticsearch
- Filebeat 配置片段(/etc/filebeat/filebeat.yml 或 inputs.d/nginx.yml):
- filebeat.inputs:
- type: filestream
id: nginx-access
paths:
- /var/log/nginx/access.log
fields:
service: nginx
log_type: access
processors:
- dissect:
tokenizer: ‘%{client_ip} - %{remote_user} [%{timestamp}] “%{method} %{request} HTTP/%{http_version}” %{status} %{body_bytes_sent} “%{referrer}” “%{user_agent}”’
field: “message”
target_prefix: “”
- filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
- output.elasticsearch:
hosts: [“elasticsearch:9200”]
index: “filebeat-8.11.3-nginx-%{+yyyy.MM.dd}”
- 说明:示例采用 filestream 输入与 dissect 处理器做轻量解析;生产可启用 nginx 模块 获取更丰富字段。
- 采集 MySQL 错误与慢查询日志并发送至 Logstash
- Filebeat 配置片段(inputs.d/mysql.yml):
- filebeat.inputs:
- type: filestream
id: mysql-error
paths:
- /var/log/mysql/error.log
fields:
service: mysql
log_type: error
- type: filestream
id: mysql-slow
paths:
- /var/log/mysql/mysql-slow.log
fields:
service: mysql
log_type: slowquery
- Logstash 配置片段(/etc/logstash/conf.d/mysql.conf):
- input { beats { port => 5044 } }
- filter {
if [log_type] == “slowquery” {
grok { match => { “message” => “.*?Query_time: %{NUMBER:query_time:float}” } }
date { match => [ “timestamp”, “ISO8601” ] }
}
if [log_type] == “error” {
grok { match => { “message” => “[%{TIMESTAMP_ISO8601:timestamp}] [%{LOGLEVEL:level}] %{GREEDYDATA:err}” }
}
}
- output { elasticsearch { hosts => [“elasticsearch:9200”] index => “mysql-%{+yyyy.MM.dd}” } }
- 说明:Filebeat 负责可靠采集与字段标记,Logstash 负责 Grok 解析与指标化处理。
运行与运维要点
- 权限与路径
- 以 filebeat 用户运行;确保对日志路径(如 /var/log/、journal 目录)具备读取权限;必要时在 /etc/filebeat/filebeat.yml 设置 path.data、path.logs。
- 多输出与版本化索引
- 同时输出到 Logstash 与 Elasticsearch 时,注意 pipeline 与 index 的一致性;索引建议使用 filebeat-%{[agent.version]}-%{+yyyy.MM.dd} 格式,便于滚动升级与回溯。
- 资源与背压
- 根据日志量调整 bulk_max_size、worker 数量与 queue 配置;监控 journald 与磁盘 I/O,避免采集滞后。
- 安全加固
- 启用 TLS 加密传输(Elasticsearch/Logstash),使用 API Key 或 RBAC 最小权限;对外网暴露端口时配合 防火墙 与 反向代理。
- 可视化与告警
- 在 Kibana 中创建 Index Pattern、导入 Filebeat 模块仪表板;结合 Elasticsearch Watcher 或 第三方告警 实现异常检测。