人们经常说数据如金,但是,能被利用起的数据,才是“金”。而互联网的数据,经常以日志的媒介的形式存在,并须要从中提取其中的"数据"。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就能够了。
现实中的日志分析平台必定不会这么简单的,本次教程,只是抛砖引玉。