【编者按】“在审视任何一个新东西的时候,我都会先去尝试发现它与production ready之间到底有多少距离”,这是杜航写做本文的初衷。杜航首先考虑到的是log的处理,尤为对于Docker这个短暂存在的运行环境,log的处理更为重要。Volume虽然能够解决这个问题,可是随着容器数量的增多,工做量也会剧增。杜航决定在灵雀云上搭建一个ELK stack(ELK是一套经常使用的开源日志监控和分析系统,包括一个分布式索引与搜索服务Elasticsearch,一个管理日志和事件的工具logstash,和一个数据可视化服务Kibana)。git
做者杜航,Websense云基础架构组开发经理,专一于OpenStack和Docker。如下为原文:github
第一次接触CaaS这个概念,第一次接触灵雀云的时候,我并无像不少人同样立刻推送一个应用以体验Docker所带来的快感。由于我从不怀疑docker的出现所解决环境依赖性问题,提升了产品部署速度。我也从不怀疑灵雀云做为一个CaaS共有云平台对容易的管理,调度,运行的能力。这就是Docker以及CaaS平台出现带来的优点,一分钟以前我还刚把代码提交到github,一分钟以后我提交的代码已经在生产环境上线。多是由于我长期和一个十分严谨又追求完美的英国团队,特别是英国运维团队合做的背景,在审视任何一个新东西的时候我都会先去尝试发现它与production ready之间到底有多少距离。因此当我准备把应用推送到灵雀云以前,我首先考虑的是除了应用以外我还须要部署什么样的服务来达到生产环境的标准。docker
第一点考虑到的是log的处理。我想我不须要花太多篇幅解释log的重要性,你们应该都有体会。Docker做为一个短暂存在(ephemeral)的运行环境,数据的持久化是一个要解决的问题。CaaS平台不会像IaaS那样给你vm的登陆管理权限,因此你不能想把docker容器运行在物理主机或者虚拟主机上那样经过将存储卷映射到主机上或者连接一个数据容器(data-only container)来保存log数据。灵雀云平台提供了存储卷的功能,能够将log数据存放在一个稳定的云存储平台(从连接看是AWS S3)并提供下载。当时当你管理上百个甚至上千个容器的时候,这种方式也会给你带来很大的工做量。综合以上缘由,我决定在灵雀云上搭建一个ELK stack。(E – Elasticsearch, L – Logstash, K – Kibana)安全
我没有使用网上现有的ELK image,缘由有三:架构
深度CentOS依赖者;运维
体验一下灵雀云提供的代码仓库集成的功能;elasticsearch
将容器镜像存储在灵雀云镜像仓库能够提升服务启动速度tcp
代码能够在github找到https://github.com/darkheaven1983/elk分布式
如下是如何在灵雀云上部署ELK stack的具体步骤:工具
1. 关联github代码仓库与灵雀云构建系统,指明Dockerfile在github的路径,并建立一个构建
2. git push代码到github触发灵雀云构建docker镜像
镜像build成功以后会出如今我的镜像参仓库里面
3. 经过灵雀云CLI提供的compose功能一键部署ELK stack。Alauda支持的compose在docker compose yaml文件的基础之上作了一些针对本身平台的改动。
如下是elk-alauda.yml的内容
elasticsearch: extends: file: ./docker-compose.yml service: elasticsearch expose: - "9200" volumes: - /var/lib/elasticsearch:10 kibana: extends: file: ./docker-compose.yml service: kibana ports: - "5601/http" links: - elasticsearch:elasticsearch logstash: extends: file: ./docker-compose.yml service: logstash ports: - "5000" links: - elasticsearch:elasticsearch
extends:关联docker compose yaml文件当中对此容器的配置。
expose:指定一个只有Alauda内部才能访问的端口,我将elsaticsearch的9200端口声明为内部端口保证了数据的安全性,避免将9200端口暴露在公网上。
volumes:建立一个存储卷,确保数据的持久化 – 能够经过alauda CLI中backup功能按期保存存储卷,而且从某一个指定的存储卷恢复数据。
ports:指定一个公网可访问的端口,此端口能够为load balance以后的http端口(80),也能够是load balance以后的TCP端口(随机)。
links:容器之间的链接 – 经过Alauda提供的服务发现功能连接多个容器是容器间能够互相访问。
至此,ELK stack在alauda平台的搭建已经结束。因为本实验只是一个PoC的功能,因此logstash的输入是tcp,欢迎你们加入更加复杂的logstash配置。
测试结果:
nc logstash-darkheaven.myalauda.cn 62316 < /var/log/yum.log