Docker ELK+Filebeat安裝與配置
環境說明
- linux CentOS Linux release 7.5.1804 (Core)
- docker Docker version 1.13.1
- elk sebp/elk latest
- filebeat filebeat-6.4.0
elk跟filebeat在同一臺機器上
架構
-
Elasticsearch 一個近乎實時查詢的全文搜尋引擎。Elasticsearch 的設計目標就是要能夠處理和搜尋巨量的日誌資料。
-
Logstash 讀取原始日誌,並對其進行分析和過濾,然後將其轉發給其他元件(比如 Elasticsearch)進行索引或儲存。Logstash 支援豐富的 Input 和 Output 型別,能夠處理各種應用的日誌。
-
Kibana 一個基於 JavaScript 的 Web 圖形介面程式,專門用於視覺化 Elasticsearch 的資料。Kibana 能夠查詢 Elasticsearch 並通過豐富的圖表展示結果。使用者可以建立 Dashboard 來監控系統的日誌。
-
Filebeat 引入Filebeat作為日誌蒐集器,主要是為了解決Logstash開銷大的問題。相比Logstash,Filebeat 所佔系統的 CPU 和記憶體幾乎可以忽略不計。
日誌處理流程: Filebeat將日誌傳送給Logstash進行分析和過濾,然後由Logstash轉發給Elasticsearch,最後由Kibana視覺化Elasticsearch 的資料
安裝 ELK 套件
ELK 的部署方案可以非常靈活,在規模較大的生產系統中,ELK 有自己的叢集,實現了高可用和負載均衡。我們的目標是在最短的時間內學習並實踐 ELK,因此將採用最小部署方案:在容器中搭建 ELK。
- 執行ELK映象需要vm.max_map_count至少需要262144記憶體
切換到root使用者修改配置sysctl.conf
vi /etc/sysctl.conf
在尾行新增以下內容
vm.max_map_count=262144
並執行命令
sysctl -p
elk啟動的時候可能會提示如下錯誤: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 檢視容器日誌:docker logs 容器ID 參考連結:
https://blog.csdn.net/jiankunking/article/details/65448030
- 安裝docker
線上安裝吧,如果自定義安裝請搜尋下安裝方法,這裡就不再描述了
yum install docker
啟用服務
systemctl start docker
開機啟動
systemctl enable docker
- 執行ELK映象
sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk
- 配置logstash
檢視容器資訊
docker ps -a
進入容器
sudo docker exec -it elk /bin/bash
或
sudo docker exec -it 容器ID /bin/bash
修改02-beats-input.conf
cd /etc/logstash/conf.d/
vi 02-beats-input.conf
/etc/logstash/conf.d/02-beats-input.conf修改成如下圖所示:
這裡vi命令使用有點問題,我是通過DEL鍵一行一行的刪掉了那3行的
將以下三行刪除掉。這三行的意思是是否使用證書,本例是不使用證書的,如果你需要使用證書,將logstash.crt拷貝到客戶端,然後在filebeat.yml裡面新增路徑即可
ssl => true
ssl_certificate => "/pki/tls/certs/logstash.crt"
ssl_key => "/pki/tls/private/logstash.key"
注意:sebp/elk docker是自建立了一個證書logstash.crt,預設使用*通配配符,如果你使用證書,filebeat.yml使用的伺服器地址必須使用域名,不能使用IP地址,否則會報錯
這裡如果不去掉這三行配置的話,在後面啟動filebeat時,會提示如下錯誤:
2018-09-12T10:01:29.770+0800 ERROR logstash/async.go:252 Failed to publish events caused by: lumberjack protocol error
2018-09-12T10:01:29.775+0800 ERROR logstash/async.go:252 Failed to publish events caused by: client is not connected
2018-09-12T10:01:30.775+0800 ERROR pipeline/output.go:109 Failed to publish events: client is not connected
- 重啟elk容器
docker restart 容器ID
- kibana視覺化頁面
在瀏覽器輸入:http://ip:5601 ,稍等一會即可看到kibana啟動成功管理頁面
Elasticsearch的JSON介面:http://[Host IP]:9200/_search?pretty
安裝Filebeat
filebeat有多種安裝方式,我這裡採用rpm包的安裝方式,可自動註冊為systemd的服務
- 下載filebeat的rpm包
cd /opt/softwares
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.4.0-x86_64.rpm
- 安裝filebeat
rpm -ivh filebeat-6.4.0-x86_64.rpm
- 配置filebeat
cd /etc/filebeat
vi filebeat.yml
配置改成如下所示:
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/datas/logs/*/*.log
tags: ["測試環境"]
multiline:
pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
# pattern: '^\s*("{)'
negate: true
match: after
max_lines: 1000
timeout: 30s
enabled:filebeat 6.0後,enabled預設為關閉,必須要修改成true paths:為你想要抓取分析的日誌所在路徑 multiline:如果不進行該合併處理操作的話,那麼當採集的日誌很長或是像輸出xml格式等日誌,就會出現採集不全或是被分割成多條的情況 pattern:配置的正則表示式,指定匹配的表示式(匹配以 2017-11-15 08:04:23:889 時間格式開頭的字串),如果匹配不到的話,就進行合併行。 參考連結
配置改為上圖所示。 註釋掉Elasticsearch output,開啟Logstash output。 hosts:elk所在機器IP地址 如果直接將日誌傳送到Elasticsearc,請編輯此行:Elasticsearch output 如果直接將日誌傳送到Logstash,請編輯此行:Logstash output 只能使用一行輸出,其它的注掉即可
- 啟動filebeat服務
啟動filebeat
systemctl start filebeat.service
檢視filebeat狀態
systemctl status filebeat.service
檢視filebeat日誌
tail -f /var/log/filebeat/filebeat
kibana配置
點選左上角的Discover按鈕,如下圖所示,提示建立“index pattern”: 如下圖,紅框中輸入filebeat-*,再點選Next step: 如下圖,下拉框中選擇@timestamp,再點選Create index pattern 在彈出的頁面上,再次點選左上角的Discover按鈕,然後點選右上角的Last 15 minutes,如下圖: 此時頁面上會顯示最近15分鐘內的日誌,如果最近15分鐘內沒有任何日誌上報,您也可以點選下圖紅框中的Today按鈕,展示今天的所有日誌: