ELK+kafka+Winlogbeat/FileBeat搭建統一日誌收集分析管理系統

天府雲創發表於2018-08-16

今天臨時收到一個企業客戶的專案需求,需要對所有WIndows業務伺服器的日誌進行集中化檢視和分析管理,畢竟像業務很多的公司而且歷史比較悠久的公司,windows和linux都是混合執行的,畢竟太老的程式和配置是不能輕易動的,尤其醫院和政府類的。

在網際網路專案中,良好的日誌監控和分析能保障業務穩定執行,不過一般情況下日誌都分散在各個生產伺服器,且開發人員無法登陸生產伺服器,這時候就需要一個集中式的日誌收集裝置,對日誌中的關鍵字進行監控,觸發異常時進行報警,協助開發人員檢視相關日誌。

好吧!話不扯遠。直接進入專案正題。

專案需求:

收集和儲存Windows AD伺服器關鍵系統日誌,應對安全審計要求。

基於Windows賬戶登入日誌進行安全事件分析。

收集WIndows server伺服器上各種應用軟體和IIS等中介軟體的訪問日誌和錯誤日誌進行分析和定位故障原因進行溯源。

日誌類別分析:

日誌主要包括系統日誌、應用程式日誌和安全日誌。每條日誌都記載著時間戳、主機名、使用者及操作行為等相關的描述,系統運維和開發人員可以通過日誌瞭解伺服器軟硬體資訊、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以瞭解伺服器的負荷,效能安全性,及時分析問題、追查錯誤根源糾正錯誤。

通常,日誌被分散的儲存不同的裝置上。如果你管理數十上百臺伺服器,你還在使用依次登入每臺機器的傳統方法查閱日誌。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日誌管理,例如:開源的syslog,將所有伺服器上的日誌收集彙總。集中化管理日誌後,日誌的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
 

在大資料時代,日誌數量巨大,種類多樣化,企業資料就如同一座亟待開發的金礦;日誌的統計和檢索的難度加大,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
 

強大的ELK日誌管理

ELK是一款開源的海量日誌搜尋分析平臺,能夠完美的解決我們上述的問題,對日誌進行集中採集和實時索引,提供實時搜尋、分析、視覺化、報警等功能,幫助企業在統一平臺實時管理日誌資料,進行線上業務實時監控、異常原因定位、資料統計分析。ELK由ElasticSearch、Logstash和Kiabana三個開源工具組成。官方網站: https://www.elastic.co/products

  • Elasticsearch是個開源分散式搜尋引擎,它的特點有:分散式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料來源,自動搜尋負載等。
  • Logstash是一個完全開源的工具,他可以對你的日誌進行收集、過濾,並將其儲存供以後使用(如,搜尋)。
  • Kibana 也是一個開源和免費的工具,它Kibana可以為 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 介面,可以幫助您彙總、分析和搜尋重要資料日誌。

ELK+kafka日誌系統原理(介質為日誌)  Windows/linux的

logstash(客戶端)--->kafka(佇列)--->kakfa上的logstash(也是一個客戶端)--->ES(儲存)--->kibana(介面)

此次專案拓撲圖(出於對客戶隱私資訊的保護暫時只畫出簡單圖示)

Logstash收集AppServer產生的Log,並存放到ElasticSearch叢集中,而Kibana則從ES叢集中查詢資料生成圖表,再返回給Browser瀏覽器渲染。

由於 Filebeat 已經完全替代了 Logstash-Forwarder 成為新一代的日誌採集器,同時鑑於它輕量、安全等特點,越來越多人開始使用它。因此專案需要詳細講解如何部署基於 Filebeat/Winlogbeat 的 ELK 集中式日誌解決方案,具體架構見圖 5。

                                                        圖 5. 基於 Filebeat 的 ELK 叢集架構

因為免費的 ELK 沒有任何安全機制,所以這裡使用了 Nginx 作反向代理,避免使用者直接訪問 Kibana 伺服器。加上配置 Nginx 實現簡單的使用者認證,一定程度上提高安全性。另外,Nginx 本身具有負載均衡的作用,能夠提高系統訪問效能。

對於日誌資料流特別大的情況,LogStash會造成擁堵,這個時候可以使用訊息佇列來進行緩衝。同時,日誌一旦進過LogStash之後,會不方面一些流處理程式來讀取。這個時候使用kafka就比較好了,因為kafka是將訊息持久化在本地,流處理應用可以從訊息的offset初始的地方來讀取。加入kafka的後的流程如下:

image_1b4g8qjmjegcnf614pqe61kbf13.png-33.1kB

日誌系統平臺搭建資訊

平臺

筆者試驗平臺為 RHEL 6.9。注意,目前 ELK(包括 Beats)不支援 AIX。具體對平臺的支援請檢視這裡

JDK

JDK 是 IBM Java 8。ELK 需要 Oracle 1.7(或者是 OpenJDK 1.7) 及以上,如果是 IBM Java,則需要 8 及以上的版本。

具體資訊

瀏覽器

Kibana 4.x 不支援 IE9 及以下;Kibana 3.1 雖然支援 IE9,但是不支援 Safari(iOS)和 Chrome(Android)。具體對瀏覽器的支援,請看這裡

軟體版本

  • Filebeat:1.2.3;
  • Logstash:2.3.4;
  • Elasticsearch:2.3.4;
  • Kibana:4.5.4;
  • Nginx:1.8.1。

注意事項

logstash版本:1.5.4(因不支援beats輸入外掛,故棄用),2.2.1或者更高的版本(目前使用版本)

由於ELK無論linux和windows執行都正常,建議生產環境使用linux系統

另外由於某些Windows Server伺服器預設是禁止啟用powershell的,因此安裝過程可能會遇到如下問題。

無法載入檔案 C:\Program Files\winlogbeat\install-service-winlogbeat.ps1,因為在此係統中禁止執行指令碼。有關詳細資訊,請參閱 "get-help about_signing"。08以上是自帶powershell的,而03則需要安裝netframework之後才能安裝powershell。

安裝步驟

步驟一、下載Java元件並安裝

下載最新版本的jdk,解壓縮雙擊安裝。備註:請務必使用java8以上的版本,否則ELK不能正常使用。

步驟二、新增JAVA_HOME 環境變數

右鍵“這臺電腦“-〉屬性-〉高階系統設定-〉環境變數,在系統變數裡新建JAVA_HOME,值為C:\Java\jdk1.8.0_152,如下圖所示

步驟三、安裝配置nginx,為kibana配置反向代理

首先從網址http://nginx.org/download/nginx-1.9.4.zip下載nginx.

解壓nginx-1.9.4.zip到f:\elk,目錄更名為nginx.

修改f:\elk\nginx\conf\nginx.conf檔案,增加如下內容

server{

        listen       80;

        server_name  localhost;

        location / {

       proxy_set_header Host $host;

        proxy_pass http://localhost:5601;

        }

這樣做解決了5601埠被防火牆遮蔽,導致外部使用者訪問不了的問題。

步驟四、安裝elasticsearch

解壓elasticsearch-1.7.1.zip壓縮包到F:\elk\elasticsearch地址下

開啟命令列,輸入如下命令

Pushd f:\elk\elasticsearch\bin\

Service install 
產生如下輸出

然後輸入

service manager

出現如下介面

修改“Startup type “ ,從Manual到Automatic。
然後點選”Start“, elasticsearch將立即開始執行。

在瀏覽器中輸入http://localhost:9200,出現如下介面,表明elasticsearch安裝成功。

步驟五、安裝head外掛

解壓elasticsearch-head-master.zip壓縮包內容到elasticsearch\plugins資料夾下,修改elasticsearch-head-master名稱為head,在瀏覽器中輸入http://localhost:9200/_plugin/head/即可檢視Elasticsearch中資料

 

 

步驟六、安裝logstash

解壓logstash-2.2.1.zip壓縮包到F:\elk\logstash地址下

在f:\elk\logstash\bin裡新建Logstash.conf

內容如下

input {
beats {
port => "5544"
codec => json {
charset => "UTF-8"
}
}
}
filter {
if [type] == "info" {
grok {
match => {
"message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s+\[(?<thread>.*)\]\s+(?<level>\w*)\s+(?<class>\S*)\s+\[(?<method>\S*)\]\s+\: (?<message>.*)\s*"

overwrite => ["message"]
}
}
if [type] == "error"{
grok {
match => {
"message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s+\[(?<thread>.*)\]\s+(?<level>\w*)\s+(?<class>\S*)\s+\[(?<method>\S*)\]\s+\- (?<message>.*)\s*"

overwrite => ["message"]
}
}
}
output {
elasticsearch { 
hosts => ["localhost:9200"] 
index => "test-%{+YYYY-MM}"
}
stdout { codec => rubydebug }
}

 

步驟七、新建Logstash 啟動批處理檔案

在資料夾f:\elk\logstash\bin下新建run.bat 檔案

檔案內容如下
logstash.bat agent -f logstash.conf

增加這個批處理的目的是為了解決在windows環境下logstash執行一段時間就會掛起的問題。

 

步驟八、將Logstash安裝成windows服務
首先從網址https://nssm.cc/release/nssm-2.24.zip下載nssm。

解壓nssm-2.24.zip,然後從解壓目錄中拷貝nssm-2.24\win64\nssm.exe到f:\elk\logstash\bin裡,然後在命令列裡輸入

Pushd f:\elk\logstash\bin

接著執行

Nssm install logstash

出現安裝介面

 

請填寫如下資訊:
Path: f:\elk\logstash\bin\run.bat
Startup directory: f:\elk\logstash\bin
介面如下:


點選"Details"頁籤,填寫如下內容

Display name:logstash

Startup type:Automatic

介面如下:


接下來點選"Dependencies"頁籤,填寫如下資訊

This service depends on the followingsystem components: elasticsearch-service-x86

介面如下:



新增依賴的原因是,logstash的輸出配置的是Elasticsearch,如果Elasticsearch沒有啟動,logstash無法正常工作。

最後單擊install service按鈕,執行安裝過程,出現如下介面,表示服務已經安裝成功。

 

步驟九、將Kibana安裝成windows服務

將步驟八下載的nssm拷貝到資料夾f:\elk\kibana\bin下。

然後在命令列裡輸入

Pushd f:\elk\kibana\bin

接著執行

Nssm install kibana

出現安裝介面

請填寫如下資訊:
Path: f:\elk\kibana\bin\kibana.bat
Startup directory: f:\elk\kibana\bin
 

介面如下:


類似步驟八

點選"Details"頁籤,填寫如下內容

Display name:kibana

Startup type:Automatic

介面如下:


接下來點選"Dependencies"頁籤,填寫如下資訊

This service depends on the followingsystem components:

elasticsearch-service-x86

logstash

介面如下:


 

最後單擊install service按鈕,執行安裝過程,出現如下介面,表示服務已經安裝成功。


你可以在"f:\elk\kibana\config\kibana.yml"中修改kibana的執行埠。

 

 步驟十、安裝FileBeat

(一)、安裝

1.將資料夾中filebeat-5.5.1-winsows-x86_64.zip壓縮包(也可自行下載)解壓到C:\filebeat資料夾

2.以管理員身份執行PowerShell(此處不要用cmd.exe),在控制檯中輸入以下命令安裝

CD C:\filebeat

.\install-service-filebeat.ps1

3.安裝過程中會出現以上錯誤,此時需更改執行策略,語句如下

Set-executionpolicy RemoteSigned

選擇:y  執行完後重新執行安裝命令

.\install-service-filebeat.ps1

至此安裝成功,此時可看到filebeat服務為關閉狀態

4.在開始選單-執行輸入Services.msc開啟本地服務操作欄,找到filebeat.exe,啟動服務

 

(二)、配置

1.開啟C:\filebeat資料夾,找到filebeat.yml配置檔案,開啟

2.將以下內容替換到配置檔案中,根據需要更改配置內容(注意,由於檔案為yml格式,所以同一模組中的行列需對齊,否則無法讀取該配置檔案)

 

(三)、資料檢視

重新啟動服務,往配置檔案所在的日誌目錄中插入資料,開啟http://localhost:9200/_plugin/head/http://localhost:5601即可檢視新增的日誌資料

█效能

在沒有日誌產生的情況下,winlogbeat程式工作記憶體9M,有日誌產生的情況下,小於100M記憶體。

7

█維護

Windows Service維護

;啟動服務

net start winlogbeat

;停止服務

net stop winlogbeat

;解除安裝服務

powershell "C:\Program Files\winlogbeat\uninstall-service-winlogbeat.ps1"

附錄部分配置檔案

編輯檔案【winlogbeat.conf】,設定日誌收集引數、轉發伺服器引數等。
C:\Program Files\winlogbeat\winlogbeat.yml
# The supported keys are name (required), tags, fields, fields_under_root,
# forwarded, ignore_older, level, event_id, provider, and include_xml. Please
# visit the documentation for the complete details of each option.
# https://go.es.io/WinlogbeatConfig
# 收集三類日誌:Application/Security/System,72小時前的日誌忽略。以下預設,無需修改
winlogbeat.event_logs:
- name: Application
ignore_older: 72h
- name: Security
- name: System
# 註釋所有Elasticsearch相關的配置引數
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
# 配置Logstash相關引數,預設只需要配置hosts
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["1.1.1.1:5044"]
其中1.1.1.1時遠端logstash伺服器的IP地址,實際部署時請設定為正確的IP引數。
請確保防火牆策略允許Windows AD伺服器能夠訪問到logstash伺服器IP的TCP5044埠。

【參考資料】

1、ELK+Filebeat 集中式日誌解決方案詳解 https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral(講解的很詳細推薦閱讀

2、ELK+kafka日誌系統搭建-實戰 - CSDN部落格 https://blog.csdn.net/wangdaoge/article/details/53130263

3、ELK日誌管理平臺 - CSDN部落格 https://blog.csdn.net/polaris_1/article/details/54381502

相關文章