在滴滴雲 DC2 雲伺服器上搭建 ELK 日誌採集系統

java06051515發表於2018-12-06

前段時間大學同學聚會,一個在讀的博士同學談到他們實驗室做實驗時,物理伺服器需要向老師申請且組內同學都共用那些機器。由於執行一些大資料和人工智慧的專案比較耗費資源,且對資源環境的隔離要求比較高,因而很多時候用機器還得排隊(畢竟學校經費和底層基礎設施沒有公司充裕),不是很方便。於是我就對他說到,為什麼不嘗試在公有云上面購買 VM 呢?便宜又好用,實驗室每個月經費買虛擬機器是 綽綽有餘 的,同時因為公有云可以按需使用,磁碟高可用且支援動態擴容,還能在某個時刻打快照,非常適合搭專案環境使用。

朋友目前的一個實驗任務是從海量分散式系統中收集作業系統、資料庫、訊息中介軟體及應用程式的日誌,並利用大資料演算法挖掘 隱藏 在資料中有潛在價值的資訊。

想到可能還有更多的同學會遇到類似的問題、甚至可能是類似的任務,於是便寫了本篇部落格以幫助有此需要的同學,使之能夠在短時間內搭建一套行之有效的 資料採集系統 ,方便快速上手使用。

快速瞭解 ELK 系統

 是一套開源日誌採集套件,使用起來非常方便。先快速瞭解下每個服務是幹什麼的。

  • Filebeat: 利用 Go 語言編寫的日誌檔案爬取工具,所佔系統的記憶體和 CPU 非常小。它能夠實時監控指定日誌目錄或檔案,不斷追蹤讀取這些檔案的變化,最後透過 TCP/IP 協議將日誌資料傳送到其它系統中進行處理。

  • Logstash: 一個基於服務端的資料處理管道,由 JRuby 編寫且執行在 JVM 上,主要用於日誌解析、資料淨化和格式化(轉換成 JSON 格式)。

  • Elasticsearch: 一個基於半結構化儲存的全文搜尋引擎,主要用於對海量日誌資料進行查詢、聚合統計等。資料查詢利用了帶有限狀態轉化機的倒排索引,能夠在秒級查詢到對應的目標。

  • Kibana: 一個 Web UI 介面,能夠對採集到的日誌資料進行視覺化展示,透過豐富的圖表化展現和動態可互動的搜尋功能,讓海量的資料更容易被理解。

在虛擬機器上搭建日誌採集元件

巧婦難為無米之炊。首先,需要在 滴滴雲 上購買一臺 VM。作業系統任意選,這裡我選擇的是 Ubuntu 14.04。由於 ElasticSearch 需要儲存採集到的日誌資料,因而對儲存空間要求相對較高,我選擇了 100G 的磁碟;同時,因為 Logstash 會不停的解析和處理資料,所以 CPU 和記憶體需要適當大一點,這裡我選擇了 2 核 4G 記憶體的配置。現在讓我們開始 ELK 日誌系統搭建之旅。

首先安裝 JDK8

安裝完之後,執行如下命令:

  update - alternatives   -- config  java

可以看到 Java 的 HOME 目錄為 /usr/lib/jvm/java-8-oracle。接著,配置 Java 環境變數,執行如下命令:

  vim   ~ / . bashrc

在檔案末尾貼上上以下幾行:

為了使配置生效,還需要 source 一下:

  source   ~ / . bashrc

最後,透過 java -version 檢視 JDK 版本資訊。若出現類似以下顯示,則表明安裝成功:

安裝 ELK 套件

首先,透過 wget 下載 deb 包,以下命令分別下載最新版(6.5.1)的 Filebeat、Logstash、Elasticsearch 和 Kibana:

下載完成後,會存在以下四個 deb 包

  • elasticsearch-6.5.1.deb

  • filebeat-6.5.1-amd64.deb

  • kibana-6.5.1-amd64.deb

  • logstash-6.5.1.deb

之後,就可以透過 dpkg -i xxx.deb 命令進行安裝了

修改配置檔案,讓資料流打通

  1. 進入 /etc/filebeat 目錄,修改 filebeat.yml 檔案,設定要採集的日誌檔案路徑,和要傳送到的 Logstash IP 地址。由於是在同一臺 VM 上混部,所以 IP 可以設定為 127.0.0.1。若 Logstash 部署在另外一臺 VM 上,則需要配置那臺 VM 的 IP 地址。

Filebeat 包中已經安裝了預設的 索引模板 (index template)。 如果你採用 filebeat.yml 檔案的預設配置,即 Filebeat 直連 ElasticSearch 時,會自動上傳索引模板(filebeat.template.json),該索引模板定義了索引名及如何對 Filebeat 上傳的資料建立索引。但是如何需要將日誌傳送到 Logstash 中,則不會自動上傳索引模板,必須手動上傳,因此需要執行如下命令:

  curl   - XPUT   - H   'Content-Type: application/json'   http : //localhost:9200/_template/filebeat-6.5.1 -d@filebeat.template.json

  1. 在 /etc/logstash/conf.d 目錄下面建立 pipeline.yml,並輸入如下內容:

而且,需要進入到 /usr/share/logstash/bin 目錄,執行如下命令安裝  logstash-input-beats  外掛:

  . / logstash - plugin  install  logstash - input - beats

  1. 進入到 /etc/elasticsearch 目錄中,修改 elasticsearch.yml 檔案:

  1. 進入到 /etc/kibana 目錄,修改 kibana.yml 檔案。此處的 server.host 一定要配置成 0.0.0.0

最後,啟動所有的服務,在 /usr/share/(elk)/bin 目錄中執行啟動檔案,啟動時注意使用者許可權的問題。同時記住要先啟 Elasticserch,再啟 Kibana,否則會報錯。待準備環境都就緒之後,就可以執行 Filebeat 爬取日誌資料了。此時登入到瀏覽器,可以透過 Kibana UI 介面檢索( 視覺化 )海量日誌內容,如果需要定製化介面或者將日誌資料拉出來用於其它用途,則可以呼叫 Elasticsearch 的 RESTful API 與之進行互動。

總結

隨著分散式系統的普及,如何在眾多物理伺服器上採集海量日誌並進行統一處理,然後利用大資料演算法挖掘日誌中有潛在價值的資訊,變得越來越重要。

本文只是在單臺 VM 上搭建了一套日誌採集環境,進行演示。如果需要在分散式系統中使用,也很簡單,只需將 Filebeat 獨立安裝在各個宿主機上就可以了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2284081/,如需轉載,請註明出處,否則將追究法律責任。

相關文章