環境說明
- 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在同一臺機器上html
架構
-
Elasticsearch
一個近乎實時查詢的全文搜索引擎。Elasticsearch 的設計目標就是要可以處理和搜索巨量的日誌數據。linux -
Logstash
讀取原始日誌,並對其進行分析和過濾,而後將其轉發給其餘組件(好比 Elasticsearch)進行索引或存儲。Logstash 支持豐富的 Input 和 Output 類型,可以處理各類應用的日誌。正則表達式 -
Kibana
一個基於 JavaScript 的 Web 圖形界面程序,專門用於可視化 Elasticsearch 的數據。Kibana 可以查詢 Elasticsearch 並經過豐富的圖表展現結果。用戶能夠建立 Dashboard 來監控系統的日誌。spring -
Filebeat
引入Filebeat做爲日誌蒐集器,主要是爲了解決Logstash開銷大的問題。相比Logstash,Filebeat 所佔系統的 CPU 和內存幾乎能夠忽略不計。docker
日誌處理流程:
Filebeat將日誌發送給Logstash進行分析和過濾,而後由Logstash轉發給Elasticsearch,最後由Kibana可視化Elasticsearch 的數據瀏覽器
安裝 ELK 套件
ELK 的部署方案能夠很是靈活,在規模較大的生產系統中,ELK 有本身的集羣,實現了高可用和負載均衡。咱們的目標是在最短的時間內學習並實踐 ELK,所以將採用最小部署方案:在容器中搭建 ELK。bash
- 運行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
或者到官網查看最新版本直接下載:https://www.elastic.co/downloads/beats/filebeat
- 安裝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
參考連接:https://www.jianshu.com/p/7ca38fa881ae
kibana配置
點擊左上角的Discover按鈕,以下圖所示,提示建立「index pattern」: 以下圖,紅框中輸入filebeat-*,再點擊Next step: 以下圖,下拉框中選擇@timestamp,再點擊Create index pattern 在彈出的頁面上,再次點擊左上角的Discover按鈕,而後點擊右上角的Last 15 minutes,以下圖: 此時頁面上會顯示最近15分鐘內的日誌,若是最近15分鐘內沒有任何日誌上報,您也能夠點擊下圖紅框中的Today按鈕,展現今天的全部日誌:
參考連接:
https://blog.csdn.net/qq_39284787/article/details/78809538
https://blog.csdn.net/boling_cavalry/article/details/79836171
https://www.cnblogs.com/CloudMan6/p/7787870.html
https://blog.csdn.net/boling_cavalry/article/details/79950677