如何在CentOS集群中利用Filebeat实现日志监控
确保CentOS集群中的所有节点已安装Elasticsearch(接收日志的中央存储库)和Kibana(可视化分析工具,可选但推荐)。若未安装,可通过Elastic官方文档完成部署。
# 添加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=Elastic 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
# 安装Filebeat
sudo yum install -y filebeat
# 下载Filebeat RPM包(以8.11.3为例)
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.11.3-x86_64.rpm
# 安装
sudo rpm -ivh filebeat-8.11.3-x86_64.rpm
# 启动服务
sudo systemctl start filebeat
# 设置开机自启
sudo systemctl enable filebeat
编辑主配置文件/etc/filebeat/filebeat.yml,核心配置项如下:
指定要监控的日志文件路径,支持通配符(如/var/log/*.log监控所有.log文件):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log # 系统日志
- /var/log/nginx/*.log # Nginx日志(若有)
- /var/log/mysql/*.log # MySQL日志(若有)
exclude_files: ['.gz$'] # 排除压缩文件
fields:
cluster_name: "my_centos_cluster" # 自定义集群标识
log_type: "system" # 日志类型(用于后续区分)
fields_under_root: true # 将fields提升为顶级字段
将日志发送至Elasticsearch集群(替换为实际的Elasticsearch节点地址):
output.elasticsearch:
hosts: ["es-node1:9200", "es-node2:9200", "es-node3:9200"] # Elasticsearch集群地址
username: "elastic" # 认证用户名(若开启安全功能)
password: "your_password" # 认证密码
index: "centos-cluster-logs-%{+yyyy.MM.dd}" # 索引名称(按日期分割)
增强日志信息,便于后续分析:
processors:
- add_host_metadata: ~ # 添加主机信息(IP、主机名等)
- add_cloud_metadata: ~ # 添加云环境信息(若在云上部署)
针对Java应用等产生的多行日志(如堆栈跟踪),需合并为一条事件:
filebeat.inputs:
- type: log
...
multiline.pattern: '^\[' # 匹配日志行开头的左括号(根据实际日志格式调整)
multiline.negate: true # 取反,即匹配pattern以外的行
multiline.match: after # 将匹配行以后的内容合并到上一条事件
multiline.timeout: 5s # 超时时间(无新日志时发送合并后的事件)
若集群中有容器,可启用自动发现功能:
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true # 根据容器标签自动配置
templates:
- condition.equals:
docker.container.image: "nginx" # 针对Nginx容器
config:
- type: log
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
# 重启服务使配置生效
sudo systemctl restart filebeat
# 检查服务状态
sudo systemctl status filebeat
查看Filebeat日志,确认无错误:
tail -f /var/log/filebeat/filebeat
使用curl命令查看Elasticsearch中是否接收到日志:
curl -XGET "http://es-node1:9200/_cat/indices?v&pretty"
若看到类似centos-cluster-logs-2025.09.20的索引,说明日志已成功发送。
http://kibana-server:5601)。centos-cluster-logs-*。在filebeat.yml中优化以下参数,适应大规模集群:
queue.mem.events: 4096 # 内存队列事件数(默认1024,增大可提高吞吐量)
queue.mem.flush.min_events: 512 # 触发刷新的最小事件数
queue.mem.flush.timeout: 1s # 刷新超时时间
若需要对日志进行复杂过滤(如提取字段、转换格式),可在Filebeat与Elasticsearch之间添加Logstash:
output.logstash:
hosts: ["logstash-server:5044"]
并在Logstash中编写pipeline.conf进行处理。
启用X-Pack监控,将Filebeat的运行状态发送至Elasticsearch:
xpack.monitoring.collection.enabled: true
xpack.monitoring.elasticsearch.hosts: ["es-node1:9200"]
logrotate)正常工作,避免单个日志文件过大。通过以上步骤,即可在CentOS集群中利用Filebeat实现高效的日志监控,为后续的日志分析、故障排查提供基础。