如何在半小時搭建一個簡單的日誌分析平臺?

發表於2016-09-28

人們常常說資料如金,可是,能被利用起的資料,才是“金”。而網際網路的資料,常常以日誌的媒介的形式存在,並需要從中提取其中的”資料”。

從這些資料中,我們可以做使用者畫像(每個使用者都點了什麼廣告,對哪些開源技術感興趣),安全審計,安全防護(如果1小時內登入請求數到達一定值就報警),業務資料統計(如開源中國每天的部落格數是多少,視覺化編輯格式和markdown格式各佔比例是多少)等等。

之所以能做這些,是因為使用者的所有的行為,都將被記錄在nginx日誌中或其它web伺服器的日誌中。日誌分析要做的就是將這些日誌進行結構化,方便我們的業務人員快速查詢。日誌分析平臺要做的就是這些。

說完這些,你是不是覺得日誌分析平臺很難做,需要十人的團隊加班幾個月才能完成?

自從有了Elasticsearch、Logstash、Kibana,俗稱ELK,小公司也可以很輕鬆地做日誌分析了。說白了,1天幾G的日誌,ELK完全可以吃得消。就像標題說的,只需要1個人半小時就可以搭建好了。前提是你已經熟悉了Ansible。下文也假設你已經熟悉Anbile,如果不熟悉可以看看我的另一篇文章:Puppet,Chef,Ansible的共性

本文目的就是教你如何在搭建一個日誌分析平臺的雛形。有了這個雛形,你可以慢慢迭代出更強大,更適合你業務的日誌分析平臺。同時,提供可執行的原始碼:OSC-AdCenter

簡單日誌分析架構圖

如何在半小時搭建一個簡單的日誌分析平臺?

我做了簡化,架構圖中的每個元件都可以分別放到不同的機器。這裡簡單介紹下這些你元件:

  • your app:你的應用,我們的原始碼中,把這個給省略了
  • Openresty:基於Nginx的Web開發平臺,你可以想像它基於Nginx做了很多擴充套件,類似淘寶的Tengine。為什麼我們不直接使用Nginx呢?因為在Openresty上,我們可以做更多事情。
  • Logstash:日誌收集,結構化資料後,push到Elasticsearch中,基於JRuby。可使用其它日誌收集工具替代,比如Beats
  • Elasticsearch:分散式搜尋引擎,基於Lucene
  • Kibana:用於視覺化資料,基於NodeJs

日誌分析平臺開發所需要工具

  • Ansible 2.0+:簡單的自動化配置工具,運維工具。關於自動化配置還有什麼好說的呢?
  • Vagrant:作業系統虛擬化工具,開發時使用。如果沒有聽過,Docker總聽過吧。這傢伙就和Docker完全類似的功能,也早於Docker出現。
  • 一個簡單的支援yml格式高亮的文字編輯器,比如Atom
  • 自行下載JDK8:jdk-8u66-linux-x64.tar.gz放到專案路徑:provision/roles/jdk8/files/jdk-8u66-linux-x64.tar.gz P.S. 抱歉這個的確需要你自己下。
  • 什麼?不用寫程式碼嗎?的確不用需要寫。如果你要擴充套件這個雛形就會需要寫一些指令碼。

啟動一臺伺服器

因為我們需要在本地開發好以後,再部署到生產環境,所以,我們需要一臺伺服器用來做實驗。用Vagrant可以在你的開發機上虛擬化一臺。clone 下 OSC-AdCenter後,進入專案目錄執行:Vagrant up

檔案Vagrantfile有描述這臺機器的配置:

更多關於Vagrantfile:https://www.vagrantup.com/docs/vagrantfile/

Vagrant機器的預設賬號密碼都是: vagrant,所以你可以使用ssh vagrant@192.168.4.10登入這臺機器。也可以使用vagrant命令登入,在Vagrantfile所在目錄下執行:vagrant ssh oscadcenter

部署日誌分析平臺

在你的開發機上,安裝好ansible:

伺服器準備好了,我們只需要一條命令就可以部署OSC-AdCenter了:

然後輸入ssh登入密碼:vagrant

簡單說明:

  • ansible-playbook是ansible的一個命令
  • ./provision/playbook.yml是描述你的伺服器配置的文字,你可以想像成所有的部署指令碼都寫在這個檔案中
  • ./provision/inventory是伺服器在playbook在的host與ip的對映表,比如playbook中這麼寫:

    那麼,inventory檔案就是這樣的:

具體請看文件:http://docs.ansible.com/ansible/intro_inventory.html

  • -u vagrant -k 表示使用vagrant賬號ssh登入目標機器

部署的這個過程,要看你的網速和elastic源的提供速度,可能會很漫長。 參考時長為半小時。建議執行部署後,做些別的事情,比如午休。

測試部署是否成功

  1. 開啟Elasticsearch http://192.168.4.10:9200/_plugin/head/ 可看到介面:如何在半小時搭建一個簡單的日誌分析平臺?
  2. 開啟Kibana http://192.168.4.10:5601 可看到介面:如何在半小時搭建一個簡單的日誌分析平臺?
    1. 開啟各種瀏覽器,輸入url:http://192.168.4.10/1.gif?account=oschina&e=pv&p=p233444&url=www.oschina.net&title=學習&sh=1200&sw=800&cd=400&lang=en,然後可在Elasticsearch中和kibana中看到相應的資料

我使用Chrome訪問了兩次url,再使用Safari訪問了一次。就這樣,Elasticsearch中出現了3條資料,而Kibana中我們可統計出,過去4小時中,Chrome佔了2/3,而Safari佔 1/3。

部署過程都執行了什麼?

從部署指令碼的入口./provision/playbook.yml看:

這裡的ELK的role都是從Ansible 的 Galaxy上download下來的。

然後呢?

  1. 學習Kibana的查詢語法,根據業務需求來統計分析日誌。
  2. 對當前的日誌分析平臺實施監控,哪天系統掛了,你都不知道。
  3. 與現在有的系統結合。
  4. 解決當單個Elasticsearch,特別龐大時的擴容問題

最後

好吧,如果你不會Ansible,你半小時可能搞不定。所以,我說的半小時,其實並不科學。但是這也恰恰說明了使用的自動化配置的好處。我一個運維外行,利用Ansible兩三天就搭建好了一個簡單日誌分析平臺。

而且如果你要在生產環境使用這套系統,你只需要線上上準備一臺乾淨的ubuntu伺服器,修改inventory檔案的IP就可以了。

現實中的日誌分析平臺一定不會這麼簡單的,本次教程,只是拋磚引玉。

相關文章