人們經常說數據如金,但是,能被利用起的數據,纔是「金」。而互聯網的數據,經常以日誌的媒介的形式存在,並須要從中提取其中的"數據"。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
provision/roles/jdk8/files/jdk-8u66-linux-x64.tar.gz
P.S. 抱歉這個的確須要你本身下。由於咱們須要在本地開發好之後,再部署到生產環境,因此,咱們須要一臺服務器用來作實驗。用Vagrant能夠在你的開發機上虛擬化一臺。clone 下 OSC-AdCenter後,進入項目目錄執行:Vagrant up
ubuntu
文件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
-u vagrant -k
表示使用vagrant帳號ssh登陸目標機器
部署的這個過程,要看你的網速和elastic源的提供速度,可能會很漫長。 參考時長爲半小時。建議執行部署後,作些別的事情,好比午休。
打開Elasticsearch http://192.168.4.10:9200/_plugin/head/ 可看到界面:
打開Kibana http://192.168.4.10:5601 可看到界面:
打開各類瀏覽器,輸入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下來的。
好吧,若是你不會Ansible,你半小時可能搞不定。因此,我說的半小時,其實並不科學。可是這也偏偏說明了使用的自動化配置的好處。我一個運維外行,利用Ansible兩三天就搭建好了一個簡單日誌分析平臺。
並且若是你要在生產環境使用這套系統,你只須要在線上準備一臺乾淨的ubuntu服務器,修改inventory文件的IP就能夠了。
現實中的日誌分析平臺必定不會這麼簡單的,本次教程,只是拋磚引玉。