以前也介紹過 開源組件ELK日誌系統配置與管理今天也聊一聊 ELK + Filebeat 搭建日誌系統json
分佈式搜索和分析引擎。具備高可伸縮、高可靠和易管理等特色。基於 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操做。ruby
日誌收集器。蒐集各類數據源,並對數據進行過濾、分析、格式化等操做,而後存儲到 Elasticsearch。服務器
數據分析和可視化平臺。與 Elasticsearch 配合使用,對其中數據進行搜索、分析、圖表展現。網絡
一個輕量級開源日誌文件數據蒐集器,Filebeat 讀取文件內容,發送到 Logstash 進行解析後進入 Elasticsearch,或直接發送到 Elasticsearch 進行集中式存儲和分析。架構
基於ELK的使用方式,Logstash 做爲日誌蒐集器,Elasticsearch 進行日誌存儲,Kibana做爲日誌呈現,大體如下幾種架構。elasticsearch
圖中 Logstash 多個的緣由是考慮到程序是分佈式架構的狀況,每臺機器都須要部署一個 Logstash,若是確實是單服務器的狀況部署一個 Logstash 便可。分佈式
前面提到 Logstash 會對數據進行分析、過濾、格式化等操做,這一系列操做對服務器的 CPU 和內存資源的消耗都是比較高的,因此這種架構會影響每臺服務器的性能,因此並不推薦採用。性能
相比於架構一,增長了一個MQ 和 Logstash, Logstash 的輸出和輸入支持 Kafka、Redis、RabbitMQ 等常見消息隊列, MQ 前的 Logstash 只做爲日誌收集和傳輸,並不解析和過濾,先將日誌加入隊列,由 MQ 後面的 Logstash 繼續解析和過濾,這樣就不至於每臺服務器消耗資源都不少。spa
這種架構是基於架構二簡化來的,實際在使用過程當中也是能夠採起的,日誌直接進入 MQ,Logstash 消費 MQ 數據便可。操作系統
這種架構在日誌數據源和 Logstash(或 Elasticsearch) 中增長了 Beats 。Beats 集合了多種單一用途數據採集器,每款採集器都是以用於轉發數據的通用庫 libbeat 爲基石,beat 所佔的系統CPU和內存幾乎能夠忽略不計,libbeat平臺還提供了檢測機制,當下遊服務器負載高或網絡擁堵時,會自動下降發生速率。下面的例子咱們使用 Filebeat 來對文件日誌的收集,其餘的 beat 能夠忽略。
架構四相比於架構二,若是將每臺服務器上部署的 Logstash 都換成對應的 Beats ,那就是更理想的架構了。
無論怎麼樣,對於日誌解析和過濾的 Logstash 資源消耗仍是比較高的,因此若是須要,能夠將 Logstash 的部署使用分佈式,Elasticsearch 的部署使用集羣來強化整個日誌系統。
部署以前須要安裝好JDK,Java 8 版本。而後官方下載對應操做系統的安裝包,若是採用Docker部署,直接使用提供的鏡像便可。
下載包解壓後就能夠直接啓動了。
bin/logstash -f logstash.conf # logstash.conf是須要本身建立的日誌處理配置文件
配置文件的基本格式以下:
# 輸入 input { } # 分析、過濾 filter { } # 輸出 output { }
bin/elasticsearch
啓動的時候若是出現不容許root啓動,那建立一個新用戶:
groupadd elsearch
useradd elsearch -g elsearch -p elsearch
chown -R elsearch:elsearch elasticsearch
Kibana
bin/kibana
Filebeat
filebeat -e -c filebeat.yml
filebeat.yml 關鍵配置,全部/var/log/的.log文件的日誌都會輸出到 Logstash 的 5044 端口
filebeat.prospectors: - input_type: log paths: - /var/log/*.log output.logstash: hosts: ["localhost:5044"]
Logstash 例子:
配置文件內容:
input { beats { port => 5044 codec => "json" } } filter{ if [logtype] { mutate { replace => { type => "%{logtype}" }} }else{ mutate { replace => { type => 'unknow' }} } date { match => [ "createTime" , "yyyy-MM-dd HH:mm:ss" ] } } output { elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{type}-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }
配置文件說明:
使用 Filebeat 做爲 Logstash 的輸入(輸入輸出能夠有多種方式,不太瞭解的能夠先寫看看官方文檔),Logstash 監聽了 5044 端口。這個例子中對接收到的日誌進行 json 格式化,若是 json 中包含 logtype,咱們把日誌的 type 設置成 logtype,若是不包含,設置成 unknow,而後把日誌中的 createTime 格式化成 yyyy-MM-dd HH:mm:ss 的時間格式。最後輸出到 elasticsearch,index 是 elasticsearch 的索引名稱,咱們根據不一樣的 type 建立不一樣的索引。
生產環境下 Kibana 使用效果圖
出處: http://beckjin.com/2017/12/10...