Filebeat,Redis和ELK6.x集中式日誌解決方案
簡介
ELK 不是一款軟體,而是 Elasticsearch、Logstash 和 Kibana 三種軟體產品的首字母縮寫。這三者都是開源軟體,通常配合使用,而且又先後歸於 Elastic.co 公司名下,所以被簡稱為 ELK Stack。而redis作為一款效能優良的訊息佇列。更是適合用在此場景中。
下面是針對每個技術我的部落格詳解。
3.Kibana6.x 介紹
filebeat就在這裡介紹了。
Filebeat是一個日誌檔案託運工具,在你的伺服器上安裝客戶端後,filebeat會監控日誌目錄或者指定的日誌檔案,追蹤讀取這些檔案(追蹤檔案的變化,不停的讀),並且轉發這些資訊到
基本架構
下圖是經典的日誌收集流程,只不過我們這次要在filebeat與Logstash之間加上一個訊息佇列redis,Logstash服務端只需要從redis中獲取想要的資料。而所有的客戶端直接將資料發往redis。準備環境。
Centos7 3臺,Elasticsearch6.1,logstash6.1,kibana6.1,filebeat安裝包。epel的yum源
1.首先配置 filebeat。
安裝filebeat。只需 yum -y install filebeat 。安裝完成後,修改配置檔案 /etc/filebeat/filebeat.yml
內容如下:
filebeat.prospectors: - type: log enabled: true paths: - /var/log/nginx/*.log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 3 setup.kibana: output.redis: hosts: ["192.168.40.133"] port: 6379 key: "nginx-log"
這樣的配置是 從 /var/log/nginx下讀取所有以.log結尾的檔案。且傳送到redis。且redis中以list方式儲存。鍵名為 nginx-log
配置完成後。啟動redis。再啟動filebeat。
systemctl start redis
systemctl start filebeat
接下來應該讓logstash從redis中間鍵中讀取資料。那麼配置logstash。配置檔案為 /etc/logstash/conf.d/nginx.conf
input {
redis {
port => "6379"
host => "192.168.40.133"
data_type => "list"
type => "log"
key => "nginx-log"
}
}
filter {
grok {
match => {
"message" => '%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] "%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
}
}
date {
match => [ "time", "dd/MMM/YYYY:HH:mm:ss Z" ]
locale => en
}
geoip {
source => "remote_ip"
target => "geoip"
}
useragent {
source => "agent"
target => "user_agent"
}
}
output {
elasticsearch {
hosts => "192.168.40.133:9200"
index => "logstash-%{+YYYY.MM.dd}"
}
}
配置完成後,啟動logstash。 logstash -f /etc/logstash/conf.d/nginx.conf。或systemctl start logstash
這裡logstash從redis中讀取資料。而將資料過濾後再發送至Elasticsearch。過濾時用到了grok將資料格式化。user_agent,geoip等等外掛。
再啟動Elasticsearch和kibana。
在瀏覽器訪問kibana所在主機的5601埠。選擇Management。建立index parttern。
建立 logstash-*
好了,大功告成!