1. 程式人生 > >ELK+Filebeat的安裝和聯調

ELK+Filebeat的安裝和聯調

ELK Stack 簡介
ELK 不是一款軟體,而是 Elasticsearch、Logstash 和 Kibana 三種軟體產品的首字母縮寫。這三者都是開源軟體,通常配合使用,而且又先後歸於 Elastic.co 公司名下,所以被簡稱為 ELK Stack。根據 Google Trend 的資訊顯示,ELK Stack 已經成為目前最流行的集中式日誌解決方案。
● Elasticsearch:分散式搜尋和分析引擎,具有高可伸縮、高可靠和易管理等特點。基於 Apache Lucene 構建,能對大容量的資料進行接近實時的儲存、搜尋和分析操作。通常被用作某些應用的基礎搜尋引擎,使其具有複雜的搜尋功能;
● Logstash:資料收集引擎。它支援動態的從各種資料來源蒐集資料,並對資料進行過濾、分析、豐富、統一格式等操作,然後儲存到使用者指定的位置;
● Kibana:資料分析和視覺化平臺。通常與 Elasticsearch 配合使用,對其中資料進行搜尋、分析和以統計圖表的方式展示;
● Filebeat:ELK 協議棧的新成員,一個輕量級開源日誌檔案資料蒐集器,基於 Logstash-Forwarder 原始碼開發,是對它的替代。在需要採集日誌資料的 server 上安裝 Filebeat,並指定日誌目錄或日誌檔案後,Filebeat 就能讀取資料,迅速傳送到 Logstash 進行解析,亦或直接傳送到 Elasticsearch 進行集中式儲存和分析。

ELK 常用架構及使用場景介紹
在這個章節中,我們將介紹幾種常用架構及使用場景。
最簡單架構
在這種架構中,只有一個 Logstash、Elasticsearch 和 Kibana 例項。Logstash 通過輸入外掛從多種資料來源(比如日誌檔案、標準輸入 Stdin 等)獲取資料,再經過濾外掛加工資料,然後經 Elasticsearch 輸出外掛輸出到 Elasticsearch,通過 Kibana 展示。詳見圖 1。
圖 1. 最簡單架構
這裡寫圖片描述
這種架構非常簡單,使用場景也有限。初學者可以搭建這個架構,瞭解 ELK 如何工作。
Logstash 作為日誌蒐集器
這種架構是對上面架構的擴充套件,把一個 Logstash 資料蒐集節點擴充套件到多個,分佈於多臺機器,將解析好的資料傳送到 Elasticsearch server 進行儲存,最後在 Kibana 查詢、生成日誌報表等。詳見圖 2。
圖 2. Logstash 作為日誌搜尋器
這裡寫圖片描述


這種結構因為需要在各個伺服器上部署 Logstash,而它比較消耗 CPU 和記憶體資源,所以比較適合計算資源豐富的伺服器,否則容易造成伺服器效能下降,甚至可能導致無法正常工作。
Beats 作為日誌蒐集器
這種架構引入 Beats 作為日誌蒐集器。目前 Beats 包括四種:
● Packetbeat(蒐集網路流量資料);
● Topbeat(蒐集系統、程序和檔案系統級別的 CPU 和記憶體使用情況等資料);
● Filebeat(蒐集檔案資料);
● Winlogbeat(蒐集 Windows 事件日誌資料)。
Beats 將蒐集到的資料傳送到 Logstash,經 Logstash 解析、過濾後,將其傳送到 Elasticsearch 儲存,並由 Kibana 呈現給使用者。詳見圖 3。
圖 3. Beats 作為日誌蒐集器
這裡寫圖片描述

這種架構解決了 Logstash 在各伺服器節點上佔用系統資源高的問題。相比 Logstash,Beats 所佔系統的 CPU 和記憶體幾乎可以忽略不計。另外,Beats 和 Logstash 之間支援 SSL/TLS 加密傳輸,客戶端和伺服器雙向認證,保證了通訊安全。
因此這種架構適合對資料安全性要求較高,同時各伺服器效能比較敏感的場景。
引入訊息佇列機制的架構
到筆者整理本文時,Beats 還不支援輸出到訊息佇列,所以在訊息佇列前後兩端只能是 Logstash 例項。這種架構使用 Logstash 從各個資料來源蒐集資料,然後經訊息佇列輸出外掛輸出到訊息佇列中。目前 Logstash 支援 Kafka、Redis、RabbitMQ 等常見訊息佇列。然後 Logstash 通過訊息佇列輸入外掛從佇列中獲取資料,分析過濾後經輸出外掛傳送到 Elasticsearch,最後通過 Kibana 展示。詳見圖 4。
圖 4. 引入訊息佇列機制的架構
這裡寫圖片描述
這種架構適合於日誌規模比較龐大的情況。但由於 Logstash 日誌解析節點和 Elasticsearch 的負荷比較重,可將他們配置為叢集模式,以分擔負荷。引入訊息佇列,均衡了網路傳輸,從而降低了網路閉塞,尤其是丟失資料的可能性,但依然存在 Logstash 佔用系統資源過多的問題。
基於 Filebeat 架構的配置部署詳解
前面提到 Filebeat 已經完全替代了 Logstash-Forwarder 成為新一代的日誌採集器,同時鑑於它輕量、安全等特點,越來越多人開始使用它。這個章節將詳細講解如何部署基於 Filebeat 的 ELK 集中式日誌解決方案,具體架構見圖 5。
圖 5. 基於 Filebeat 的 ELK 叢集架構
這裡寫圖片描述
因為免費的 ELK 沒有任何安全機制,所以這裡使用了 Nginx 作反向代理,避免使用者直接訪問 Kibana 伺服器。加上配置 Nginx 實現簡單的使用者認證,一定程度上提高安全性。另外,Nginx 本身具有負載均衡的作用,能夠提高系統訪問效能。

下面我們基於圖5的模式搭建一套ELK fileBeat的系統
環境資訊
centos 6.5 64位作業系統
jdk 1.8

192.168.18.160 (filebeat收集日誌,nginx做為web伺服器)
192.168.18.161 (filebeat收集日誌,nginx做為web伺服器)
192.168.18.162 (logstash)
192.168.18.163(elasticsearch,kibana,nginx做方向代理)

filebeat-5.2.2
logstash-5.2.2
elasticsearch-5.2.2
kibana-5.2.2
nginx-1.6.3

elk的安裝不能使用root使用者安裝

elasticsearch安裝
解壓
[elk@cdh4 opt]# unzip elasticsearch-5.2.2.zip

啟動過程會出現下面這些錯誤,這個是需要修改Linux的環境資訊
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [elk] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

問題一:ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [elk] is too low, increase to at least [2048]
解決:切換到root使用者,編輯limits.conf 新增類似如下內容
vi /etc/security/limits.conf 

新增如下內容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

問題二:max number of threads [1024] for user [elk] is too low, increase to at least [2048]
解決:切換到root使用者,進入limits.d目錄下修改配置檔案。
vi /etc/security/limits.d/90-nproc.conf 
修改如下內容:
* soft nproc 1024
#修改為
* soft nproc 2048

問題三:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決:切換到root使用者修改配置sysctl.conf
vi /etc/sysctl.conf 
新增下面配置:
vm.max_map_count=655360
並執行命令:
sysctl -p
問題四:system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解決:修改elasticsearch.yml配置檔案
新增下面配置:
bootstrap.system_call_filter: false

重啟elasticsearch服務
[elk@cdh4 bin]$ ./elasticsearch
在通過web介面訪問可以
這裡寫圖片描述

安裝 kibana
1、解壓kibana
[elk@cdh4 opt]$ tar -zxvf kibana-5.2.2-linux-x86_64.tar.gz

修改 kibana.yml檔案
server.host: “192.168.18.163”
啟動服務
[elk@cdh4 bin]$ ./kibana
通過瀏覽器驗證安裝成功
這裡寫圖片描述

安裝 filebeat
1、解壓
[elk@cdh1 opt]$ tar -zxvf filebeat-5.2.2-linux-x86_64.tar.gz

修改filebeat.yml 檔案
- input_type: log
  paths:
    - /opt/log/*.log

output.logstash:
  hosts: ["192.168.18.162:5043"]

啟動
[elk@cdh1 filebeat-5.2.2-linux-x86_64]$ ./filebeat

安裝logstash
1、解壓
[elk@cdh3 opt]$ unzip logstash-5.2.2.zip

建立路徑,建立pipeline檔案
[elk@cdh3 conf.d]$ pwd
/opt/logstash-5.2.2/conf.d
[elk@cdh3 conf.d]$ cat first-pipeline.conf 
input {
    beats {
        port => "5043"
    }
}
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}
output {
    elasticsearch {
        hosts => [ "192.168.18.163:9200" ]
        index => "testlog-%{+YYYY.MM.dd}"
    }
}

啟動logstash 需要制定pipeline檔案
[elk@cdh3 logstash-5.2.2]$ bin/logstash -f conf.d/first-pipeline.conf

驗證
在filebeat對應的目錄下面不停的追加內容

[elk@cdh1 log]$ echo '1.1.1.3 - - [04/Jan/2015:05:13:42 +0000] "GET /test.png HTTP/1.1" 200 203023 "http://test.com/" "Mozilla/5.0"' >>a.log

通過 kibana來檢視資訊的數量
這裡寫圖片描述