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

人們經常說數據如金,但是,能被利用起的數據,纔是「金」。而互聯網的數據,經常以日誌的媒介的形式存在,並須要從中提取其中的"數據"。html

從這些數據中,咱們能夠作用戶畫像(每一個用戶都點了什麼廣告,對哪些開源技術感興趣),安全審計,安全防禦(若是1小時內登陸請求數到達必定值就報警),業務數據統計(如開源中國天天的博客數是多少,可視化編輯格式和markdown格式各佔比例是多少)等等。node

之因此能作這些,是由於用戶的全部的行爲,都將被記錄在nginx日誌中或其它web服務器的日誌中。日誌分析要作的就是將這些日誌進行結構化,方便咱們的業務人員快速查詢。日誌分析平臺要作的就是這些。linux

說完這些,你是否是以爲日誌分析平臺很難作,須要十人的團隊加班幾個月才能完成?nginx

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

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

簡單日誌分析架構圖

簡單日誌分析架構圖

我作了簡化,架構圖中的每一個組件均可以分別放到不一樣的機器。這裏簡單介紹下這些你組件:shell

  • 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 upubuntu

文件Vagrantfile有描述這臺機器的配置:瀏覽器

Vagrant.configure(2) do |config|

  ANSIBLE_RAW_SSH_ARGS = []
  machine_box = "trusty-server-cloudimg-amd64-vagrant-disk1"
  machine_box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"

  config.vm.define "oscadcenter" do |machine|
    machine.vm.box = machine_box
    machine.vm.box_url = machine_box_url
    machine.vm.hostname = "oscadcenter"
    machine.vm.network "private_network", ip: "192.168.4.10" ##指定這臺機器的IP,只能宿主機能訪問
    machine.vm.provider "virtualbox" do |node|
        node.name = "oscadcenter"
        node.memory = 4048
        node.cpus = 2
    end
   end

end

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

Vagrant機器的默認帳號密碼都是: vagrant,因此你可使用ssh vagrant@192.168.4.10登陸這臺機器。也可使用vagrant命令登陸,在Vagrantfile所在目錄下執行:vagrant ssh oscadcenter

部署日誌分析平臺

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

服務器準備好了,咱們只須要一條命令就能夠部署OSC-AdCenter了:

ansible-playbook ./provision/playbook.yml  -i ./provision/inventory  -u vagrant -k

而後輸入ssh登陸密碼:vagrant

簡單說明:

  • ansible-playbook是ansible的一個命令

  • ./provision/playbook.yml是描述你的服務器配置的文本,你能夠想像成全部的部署腳本都寫在這個文件中

  • ./provision/inventory是服務器在playbook在的host與ip的映射表,好比playbook中這麼寫:

    ---
    - hosts: adcenter

    那麼,inventory文件就是這樣的:

    [adcenter]
    192.168.4.10

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

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

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

測試部署是否成功

  1. 打開Elasticsearch http://192.168.4.10:9200/_plugin/head/ 可看到界面:

    es

  2. 打開Kibana http://192.168.4.10:5601 可看到界面:

  3. 打開各類瀏覽器,輸入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看:

- hosts: analysis
  sudo: yes
  vars_files:
    - ./vars/base-env.yml
    - ./vars/analysis-logstash.yml

  roles:
    - common # 執行一些基礎工做
    - openresty # 安裝openresty
    - {role: "analysis-openresty-conf",   nginx_server_conf: "analysis.conf"} # 配置openresty
    - jdk8 # 安裝jdk8,並設置JAVA_HOME到 /etc/profile中
    - ansible-role-elasticsearch  #安裝 es
    - ansible-role-kibana-4 # 安裝kibana4
    - ansible-logstash # 安裝logstash

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

而後呢?

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

最後

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

並且若是你要在生產環境使用這套系統,你只須要在線上準備一臺乾淨的ubuntu服務器,修改inventory文件的IP就能夠了。

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

附:項目源代碼位置 http://git.oschina.net/zacker330/OSC-AdCenter

相關文章
相關標籤/搜索