确保CentOS系统已联网,且具备root
或sudo
权限。本教程基于Elastic Stack 7.x版本(兼容性最佳),需提前安装Java 8及以上环境(Logstash依赖Java运行)。
Elastic官方提供了YUM仓库,用于便捷安装Filebeat、Logstash等组件。执行以下命令添加仓库:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
通过YUM仓库安装Filebeat(轻量级日志收集器)和Logstash(数据处理管道):
sudo yum install -y filebeat logstash
Filebeat的配置文件位于/etc/filebeat/filebeat.yml
,需修改以下内容:
默认监控/var/log/*.log
(系统日志),可根据需求调整路径(如Nginx日志/var/log/nginx/*.log
):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
将Filebeat收集的日志发送至Logstash,默认监听localhost:5044
(需与Logstash输入端口一致):
output.logstash:
hosts: ["localhost:5044"]
为日志事件添加environment
(环境)、application
(应用)等标签,提升查询效率:
fields:
environment: production
application: myapp
fields_under_root: true # 将自定义字段提升至事件顶层
Logstash的配置文件需新建在/etc/logstash/conf.d/
目录下(推荐),例如创建filebeat.conf
:
sudo vi /etc/logstash/conf.d/filebeat.conf
配置文件分为**Input(输入)、Filter(过滤)、Output(输出)**三部分:
接收Filebeat发送的Beats协议数据(端口需与Filebeat输出端口一致):
input {
beats {
port => 5044
}
}
使用Grok插件解析非结构化日志(如Apache/Nginx日志),提取关键字段(如时间、IP、请求方法、状态码等):
filter {
# 解析Apache Common Log Format(需根据实际日志格式调整)
if [fileset][module] == "apache" and [fileset][name] == "access" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
# 解析时间戳并转换为Elasticsearch支持的格式
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
# 添加地理位置信息(基于客户端IP)
geoip {
source => "clientip"
target => "geoip"
database => "/usr/share/logstash/vendor/geoip/GeoLite2-City.mmdb" # 需下载GeoIP数据库
}
}
# 通用JSON解析(若日志为JSON格式)
else if [message] =~ /^\s*\{.*\}\s*$/ {
json {
source => "message"
target => "parsed_json"
}
}
}
将处理后的日志发送至Elasticsearch,索引名称按日期分割(如filebeat-2025.09.30
):
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "filebeat-%{+YYYY.MM.dd}"
manage_template => false # 禁用自动生成模板(可选)
}
# 输出到控制台(调试用,正式环境可注释)
stdout {
codec => rubydebug
}
}
配置完成后,启动Filebeat和Logstash服务,并设置为开机自启:
# 启动Filebeat
sudo systemctl start filebeat
sudo systemctl enable filebeat
# 启动Logstash
sudo systemctl start logstash
sudo systemctl enable logstash
确保Filebeat和Logstash均处于active (running)
状态:
sudo systemctl status filebeat
sudo systemctl status logstash
若Filebeat未正常发送数据,可通过以下命令查看日志:
sudo tail -f /var/log/filebeat/filebeat
若Logstash未正确处理数据,检查其日志:
sudo tail -f /var/log/logstash/logstash-plain.log
通过Elasticsearch的_cat/indices
接口查看是否生成filebeat-*
索引:
curl -X GET "localhost:9200/_cat/indices?v"
访问Kibana(默认http://<服务器IP>:5601
),进入Dev Tools,执行以下命令查询日志:
GET /filebeat-*/_search
{
"query": {
"match_all": {}
}
}
5044
端口:sudo netstat -tulnp | grep 5044
5044
端口(若开启防火墙):sudo firewall-cmd --add-port=5044/tcp --permanent
sudo firewall-cmd --reload
date
过滤器的match
参数,确保与日志中的时间格式一致。sudo systemctl status elasticsearch
cluster.name
与Logstash配置一致(默认均为elasticsearch
)。通过以上步骤,即可完成CentOS下Filebeat与Logstash的配合配置,实现日志的收集、处理与存储。根据实际需求,可进一步优化过滤规则(如添加更多Grok模式)、调整性能参数(如批量发送大小flush_size
),或集成Kibana进行可视化分析。