確保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進行可視化分析。