智能化运维最佳实践-自动化

伴随着互联网以及大数据时代的到来,IT信息系统已经成为最重要的数据载体和信息来源, IT系统在企业内部的重要性日益突出;但是随着企业信息化程度的提高、IT环境规模的扩大和IT环境复杂度的增加、行业内服务竞争的加剧,如何保证IT系统安全稳定运行,为业务提供可持继性的支撑,最优化IT环境的性能,有效控制IT成本和计划IT投资,这些都对IT系统运行维护支持以及IT服务水平提出了新的要求和挑战。传统的IT运维管理平台已经不能满足互联网以及大数据时代运维需求,智能化是运维管理平台的发展方向,自动化是智能化运维的最佳实践。

在日常IT运维工作中存在大量重复的日常工作任务,这些任务有的简单繁琐数量大,有的严重依赖执行次序,有的需要等待各种条件具备之后方可执行,尽管IT运维管理的技术在不断进步,但实际上IT运维人员并未真正解放,目前许多企业的系统开启和关闭、系统更新升级、应急操作等绝大多数工作都是手工操作的。即便简单的系统变更或软件复制黏贴式的升级更新往往都需要运维人员逐一登录每台设备进行手工变更,云平台和大数据、海量设备的情况下,工作量之大可想而知。而这样的变更和检查操作在IT运维中往往每天都在进行,占用了大量的运维资源。通过智能化运维管理平台的自动化将帮助运维人员从简单重复的工作中得以解放。或许IT运维的自动化实践可以从以下几个方面开始:

日常巡检自动化

日常巡检工作是IT部门日常运维工作中每天都要定时执行的工作,巡检工作内容简单但是需要重复执行。占用了IT运维人员的大量工作时间。通过自动化巡检可以将硬件状态,设备负载,系统时间,磁盘空间,线路流量,数据库表空间使用率等进行自动巡检,并形成符合用户要求的巡检报告。

故障修复自动化

日常监控是传统IT运维软件的基本功能,告警明确后,就需要进行故障处理,将故障处理分为四个阶段:源头发现、告警确诊、修复授权和故障维修。在这四个阶段中源头发现和告警确诊主要将大量的告警进行收敛,将真正需要处理的告警进行明确化找到故障的跟原因(如一个业务进程僵死或者进程宕机)。在沟通授权阶段,当不能真正做到无需知会直接处理的时候,就必须进行人工干预和确认:故障维修将已经明确的故障跟原因的故障进行自动修复(例如重启服务进程),需要人工确认的故障修复需要人员参与半自动化修复。

容灾切换操作自动化

灾备中心切换是运维工作的一个重要组成部分,以容灾作业流程的方式实现容灾切换流程批量自动执行;从启动、IP切换、环境初始化、数据文件准备到应用程序启动和配置以及外围系统操作进行全面的控制,在灾难发生后的最短时间内实现灾备切换,降低损失。并且对主备中心物理环境到软件版本、关键配置文件进行一致性检查,确保两个环境的一致,防止灾备切换失效。

软件分发配置自动化

多应用系统Bug修复与厂商对产品的定期升级,会导致频繁的低风险变更,通过Server端发起批作业方式可自动实现大批量的软件、配置分发与安装部署。

通过向客户端下发备份脚本,备份业务数据、配置信息、环境参数,并停止客户端应用服务,然后批量下发新版本的安装配置文件、DLL文件等,最后启动客户端应用服务对应用的服务状态与相关日志信息进行检查,确认软件分发和配置工作成功完成。

随着开发运维一体化的DevOps运动在国内外蓬勃发展,DevOps相关工具也呈现热闹趋势,在这个言必谈如何实施落地引入工具、建设平台的大环境下,我们今天也来盘点一下DevOps相关工具。

 

先来看一下业界对DevOps工具的各种分类介绍。


一、DevOps应用交付工具链


ElasticBox是国外一个云应用管理工具,主要用于实现云应用生命周期的可视化管理,他们的口号是“Deploy any Application Anywhere – Zero stress,Total control”。


关于DevOps工具,他们整理了一个脑图:




主要从开发、部署、维护三个方面把常用的开源工具做了一个分类:


>>>>

1、开发

开发类的DevOps工具又分为:

(1) 版本控制和协作,例如Git、SVN等

(2) 构建和测试自动化,例如Ant、Selenium、Jmeter等

(3) 持续集成和交付,例如Jenkins、CruiseControl等


>>>>

2、部署

部署类的DevOps工具分为:

(1) 容器平台,例如Docker等

(2) 配置管理,例如Chef、Puppet、Ansible等

(3) 微服务平台,例如Cloud Foundry、Kubernetes等

(4) 服务开通,例如Puppet、Docker Swarm、Vagrant等


>>>>

3、维护

维护类的DevOps工具分为两大类:

(1) 日志,例如logstash等

(2) 监控告警和分析,例如Nagios、Zabbix、Kibana等


ElasticBox对开源的DevOps工具的分类来看,主要是围绕着应用从构建到部署、交付运维这样的工具链来分类的。


二、DevOps工具元素周期表


XebiaLabs是国外一家围绕着企业规模化可靠软件交付自动化做解决方案和工具的厂商,他们的口号是大规模、更快速地自动交付:“Get the visibility, automation, and control to deliver software faster and with less risk.”。

 

关于DevOps工具,他们以元素周期表的展现形式整理了一个图:



图中按颜色标注不同类型的DevOps工具,包括:


(1)数据库,例如:Oracle、MySQL、Cassandra等;

(2)持续集成,例如:Jenkins、TeamCity等;

(3)部署,例如:SSH、XLDeploy等;

(4)云/IaaS、PaaS,例如:Amazon Web Services、Azure等;

(5)业务分析/监控,例如:Splunk、Nagios等;

(6)配置管理,例如:Git、SVN等;

(7)库管理,例如:Nexus、NuGet等;

(8)配置/服务开通,例如:Chef、Puppet、Ansible、Vagrant等;

(9)发布管理,例如:XL Release、UrbanCode Release等;

(10)日志,例如:Sumo Logic、Logstash等;

(11)构建,例如:Gradle、Ant、Maven等;

(12)测试,例如:Junit、Cucumber、Selenium、Jmeter、Appium等;

(13)容器化,例如:Docker、Kubernetes、Mesos等;

(14)协作,例如:Jira、Flowdock等;

(15)安全,例如:Snort、CyberArk等。

 

看起来XebiaLabs的分类更全面,既包括了开源工具也包含商业工具,当然也包括了XebiaLabs自己的工具;但是看起来又有点为了构成元素周期表而塞入一些工具的味道,例如,个人认为数据库这类基础软件就没必要跟DevOps扯上了吧?!

 

另外,XebiaLabs的分类在某些地方与ElasticBox的分类有出入,例如,ElasticBox把Kubernetes放到部署类,而XebiaLabs把它放到单独的容器化这个类别,当然,ElasticBox的部署类这个大的类别也是包含了容器化的。

 

由此可见,各家对DevOps的理解,还有工具的归类方式等都会有差异,没有统一的标准。


三、基于DevOps能力矩阵的工具分类


既然没有统一的DevOps工具分类标准,那么我个人也想从之前归纳总结的DevOps能力矩阵模型的角度,对DevOps相关的工具进行一些分类。



Devops凭借其连接弥合开发与运营团队的能力正在各个行业呈现席卷之势。开发人员和运营人员历来就是水火不容,无论是在开发、测试还是部署上都有着很大的分歧,只有Devops才能扭转这一局面。

 

我们从DevOps的核心理念可以看出,DevOps强调开发、QA、运维的一体化融合。



但是,本质上来看开发、QA、运维又是分属不同的部门和组织(尤其是传统企业),有着自己的过程管理方式,主要负责的事情不一样,所谓“术业有分工”,因此用到的工具也有所不同。

 

那下边我们就尝试归纳一下开发、QA、运维各自常用的一些工具,并且尝试从DevOps能力融合的角度分析,哪些工具是三者或两两之间可以共用的,并挑选一些典型工具做简单介绍。


(一)开发类典型DevOps能力融合工具


敏捷开发已经成为主流,敏捷开发中的核心实践“持续集成”也逐渐被很多企业推广应用,Jenkins作为这个领域的开源工具老大哥的位置已经事实上被确立了。

 

Jenkins通常被用在配置管理和部署代码上,同时它也能够与Puppet、Chef和容器技术一起使用,还有自动化的测试,例如Selenium、Jmeter也能被很好地整合到Jenkins持续集成的管道中。

开发人员、QA、测试和运维人员都在用Jenkins就很好地说明了Jenkins在DevOps领域的大好前景。




(二)QA类典型DevOps能力融合工具


无论开发还是测试,还是运维,对软件系统的性能都是非常关注的,因此APM这类上接运营(用户感知)与运维(性能监控),下接QA(性能管理)与开发(性能分析)的工具就理所当然地在近几年开始火爆起来了!


下图是国外的老牌APM厂商的New Relic,使用New Relic企业可以迅速从多个角度查看并解决应用中出现的错误:



New Relic高级产品经理Stevan Arychuk说New Relic可以提升高质量软件交付的速度并同时降低企业所面临的风险。企业中各团队的角色和职责有所不同,但是通过多角度的数据分析,各个团队之间的沟通、协作、交流可以得到加强,最终达到共同合作的目的。 


(三)运维类典型DevOps能力融合工具


1、Automic

美国员工福利管理公司TASC使用Automic来实现其软件部署的自动化,应用Automic,号称可以在下午三点部署而不被别人发现。



自动部署是开发的持续集成、测试之后衔接运维上线的一道关键工序,应用Automic这类自动化工具能软件系统的部署和交付过程更敏捷、稳定高效、高质量地完成。

 

2、DynaTrace Ruxit

传统的运维工具大多聚焦在监控类,尤其是基础设施的监控,例如主机、中间件、数据库的监控,尤其是服务器资源层面的监控,对应用层、业务层面的监控偏少,这会导致针对具体问题的分析,开发、QA、运维之间的共同语言偏少。

 

Devops的核心就是各个部门之间的协作,除了这个协作的理念之外还需要一种方式来进行沟通。

 

DynaTraceRuxit的智能查看功能可以直观地展示应用和其依赖之间的关系,这样软件开发流程中的不同角色之间可以使用Ruxit来进行沟通和自动化的分析。




本文参考了以下文章和相关材料:

(1)60best open source tools to do DevOps

https://elasticbox.com/blog/devops-open-source-tools/

 

(2)PERIODICTABLE OF DEVOPS TOOLS

https://xebialabs.com/periodic-table-of-devops-tools/

 

(3)7New Tools Java Developers Should Know

http://blog.takipi.com/7-new-tools-java-developers-should-know/

 

(4)8more cool tools for devops success

http://www.infoworld.com/article/3031009/devops/8-more-cool-tools-for-devops-success.html


(5)Mark!DevOps开源工具的三种分类整理 http://www.360doc.com/content/16/0322/07/31263000_544210096.shtml

DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。在DevOps的整个流程中,使用一些开源工具可以促进开发与运维之间的沟通,有利于项目的管理,甚至可以达到事半功倍的效果。

收集了DevOps开发可能用到的所有工具,并且把它们按照职责进行分类,本文摘取了部分工具分享给大家,这些工具也可以用于日常软件方面的开发,所以,大家直接Mark吧!


包&产品管理工具

  • Chocolatey:Chocolatey是Windows下一款开源的命令行包管理软件 ,简单说这就是Windows的apt-get;
  • FPM:全称是Effing package management,该死的软件包管理器,极大的缓解了多个平台构建软件包(deb,rpm,等)的痛苦;
  • Herd:是一个基于Twitter Murder的文件分布系统;
  • Vagrant Cachier:Vagrant的一个插件,用于缓存包方面的管理;
  • WiX Toolset:提供一组最强大的工具集来帮助你创建Windows安装包。该工具集从XML源代码构建你的Windows安装程序包,可以无缝集成到构建过程;
  • Boxstarter:利用Chocolatey包管理工具来自动化安装软件和创建可重复、脚本化的Windows环境;
  • Elita:Elita是一个利用git和salt进行持续部署(部署作为服务)和API-driven基础设施的引擎/框架;
  • Fig:主要用来跟Docker一起来实现的快速隔离的开发环境;
  • Pulp:Pulp是一个用来管理软件库以及相关内容的平台;
  • Veewee:Veewee是一个开源工具,用来创建和配置轻量级、可再生、便捷式虚拟机环境。

日志&监控

  • AmonOne:现代化的自托管服务器监控工具;
  • Anthracite:一个事件/日志改变/管理应用程序;
  • collectd3:是一个可视化的collectd系统性能统计工具;
  • collectd:是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制;
  • Diamond:是一个基于Python的守护程序,主要用来收集系统指标,并且把它们发布到Graphite(或其它)工具中;
  • Errbit:是一个用于收集和管理程序错误的开源工具;
  • Sensu:一个开源的监控框架;
  • Logstash:是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供Web接口用于查询和统计;
  • log.io:一个实时的开源日志监控工具;
  • FnordMetric:是一个基于redis/ruby的实时事件跟踪应用,是个收集和可视化时间序列数据的框架,用户可以在几分钟内创建漂亮的实时分析仪表盘;
  • Logster:是一个工具,读取日志文件然后创建Graphite 或 Ganglia可用的指标数据。比如你可能使用logster来图形化在你的Web Server日志中的HTTP响应发生数量;
  • Kibana:是一个为Logstash和ElasticSearch提供的日志分析的Web接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作;
  • Monit:是一款功能非常丰富的进程、文件、目录和设备的监测软件,用于Unix平台。 它可以自动修复那些已经停止运作的程序,适合处理那些由于多种原因导致的软件错误;
  • Metrics:这并不是Java库,而是基于Go的一个轻量级的检测器;
  • Graphite:是一个用于采集网站实时信息并进行统计的开源项目,可用于采集多种网站服务运行状态信息;
  • Ganglia:Ganglia是一个跨平台可扩展的、高性能计算系统下的分布式监控系统,如集群和网格;
  • Server Density:一个跨平台的监控系统;
  • Folsom:Folsom是一款受 Coda Hale's metrics启发的、基于Erlang的度量系统;
  • CMB (Cloud Message Bus):是一个高可用、横向扩展的队列和通知服务,兼容AWS SQS和SNS;
  • Glances:是一款用于Linux、BSD的开源命令行系统监视工具,它使用Python语言开发,能够监视CPU、负载、内存、磁盘I/O、网络流量、文件系统、系统温度等信息。
  • Uptime:使用Node.js、MongoDB和Twitter Bootstrap开发的远程监控系统;
  • Icinga:Nagios的扩展版本;
  • Packetbeat: 是开源应用监控和包跟踪系统;
  • Zipkin:是Twitter的一个开源项目,允许开发者收集Twitter各个服务上的监控数据,并提供查询接口;
  • Dead Man’s Snitch:是一款监控Heroku Scheduler、计划的监视工具;
  • Statsd:是一个Node.js的daemon程序,简单,轻巧。使用的UDP协议,可以和Graphite图片渲染应用结合;
  • Riemann:一个网络监控系统;
  • Puppet Dashboard:Puppet Dashboard是一个Web接口,为Puppet提供节点分类和报告功能,是一个开源的配置管理工具;
  • jmxtrans:jmxtrans是一款非常强大的工具,使用它可以轻易生成基于json的配置文章,然后再以你想要的格式输出;
  • Scales:跟踪服务器状态和统计指标,使你全面掌握服务器状态,还可以发送指标到Graphite来图像呈现或者向文件写入崩溃信息;
  • Zabbix:是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案;
  • Graylog 2:Graylog2是一个用来将系统日志syslog保存到MongoDB中的工具。

进程管理

  • Bouncy:可以作为HTTP路由主机;
  • Supervisor:是一个客户端服务器系统,允许用户监控和控制类Unix操作系统上的进程数;
  • God:由Ruby实现的进程监控框架。

服务发现 

  • Consul:简化了分布式环境中的服务的注册和发现流程,通过HTTP或者DNS接口发现。支持外部SaaS 提供者等;
  • etcd:是一个高可用的Key/Value存储系统,主要用于分享配置和服务发现;
  • Apache ZooKeeper:是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题;
  • Weave:创建一个虚拟网络并连接到部署在多个主机上的Docker容器。

持续集成和交付

  • Buildbot:是一个系统的自动化编译/测试周期最需要的软件,以验证代码的变化。通过自动重建和测试每次发生了变化的东西,在建设迅速查明之前,减少不必要的失败;
  • Cabot:是一个开源,自我托管的监控工具;
  • Jenkins:是基于Java开发的一种持续集成工具,用于监控持续重复的工作;
  • Hubot:基于脚本具有很高的灵活性,任何人都可以编写自己的脚本来扩展基本功能;
  • Hudson:是一个可扩展的持续集成引擎,主要用于:持续、自动地构建/测试软件项目、监控一些定时执行的任务;
  • CruiseControl.rb:是一个持续集成服务器,它可以让团队里的每个人随时了解项目的健康状况和进度;
  • OpsBot:是一个开源的、可插入的改善通信的机器人。

希望这些工具能够给开发者带来实实在在的帮助,想要查看更多工具,大家可以 访问原文,原文中的工具列表会持续更新。

最后,再跟大家分享一个 DevOps BookMarks,这里面涉及了DevOps方方面面的工具和内容,有兴趣的同学可以前去学习。

【知识库】Github上推荐的12款DevOps开发工具


DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。

以下是Github上推荐的几个DevOps开发工具,这些工具可以帮助你更快更好的部署和管理服务器: 


Capistrano

Capistrano是一种在多台服务器上运行脚本的开源工具,它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。Capistrano最初由Jamis Buck用Ruby开发,并用RubyGems部署渠道部署。现在Capistrano不仅限于应用Ruby on Rails的 web应用框架,而且可以用于部署用其他框架的web应用程序,比如用PHP开发的。( 项目详情)

代码托管地址: https://github.com/capistrano/capistrano

推荐相关文档:

  • Capistrano开发日记(1)( 2)
  • 自动化部署实践capistrano
  • 用 Capistrano 边写 Ruby 边部署迭代 
  • 用capistrano写一个简单的deploy脚本 
  • 使用 Capistrano —— Rails应用快速部署工具 
  • 使用Capistrano部署apache+mongrel cluster

Chef

一个系统集成框架,为您的整个基础设备提供配置管理。使用Chef,你可以:

  1. 编写代码来管理你的服务器,而不是运行命令(通过Cookbooks)
  2. 集成tightly到你的应用程序,数据库,LDAP目录等……(通过类库);
  3. 轻松的配置应用程序,但需要了解您的基础设备(运行的什么系统?当前的主数据库服务 器是什么?)

基本上,Chef就是一个Ruby配置管理引擎。您提供配方,希望您的系统如何去配置,然后交给厨师Chef,它将会为您配置你所希望的一切。你可以编写可爱的Ruby代码来管理你的服务器,而不需要使用命令去执行。( 项目详情)

代码托管地址: https://github.com/opscode/chef

推荐下载资源:

  • chef详细配置
  • chef fundamental 
  • Chef-Infrastructure-Automation-Cookbook-eBook.pdf
  •  Automated Chef cookbook testing with Drone.io and github 


Docker

 

Docker是dotCloud开源的、可以将任何应用包装在Linux Container中运行的工具,2013年3月发布首个版本。当应用被打包成Docker Image后,部署和运维就变得极其简单。可以使用统一的方式下载、启动、扩展、删除、迁移。Docker可以用来:自动化打包和部署任何应用、创建一个轻量级私有PaaS云、搭建开发测试环境、部署可扩展的Web应用。( 项目详情)

项目主页: http://docker.io

代码托管地址: https://github.com/dotcloud/docker

推荐相关文档:

  • 从coreos到docker到golang
  • [Docker]初次接触
  • Docker 介绍: 相关技术(LXC) 
    Docker创建MySQL容器 
    一些 Docker 的技巧与秘诀 
    轻轻松松在centos上部署docker服务

推荐下载资源:

  • Docker on Google App Engine
  • Docker 入门教程 
  • Docker_MongoDB 
  • Docker the road ahead
  • Docker中文社区:Docker with OpenStack.pdf 
  • 七牛云存储的首席布道师徐立:the docker way 
  • 桂阳:通过工作流实现Docker在CoreOS自动化部署


Logstash

 

Logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。( 项目详情)

项目主页: http://logstash.net/

代码托管地址: https://github.com/elasticsearch/logstash

推荐相关文档:

  • 使用logstash分析Apache日志
  • 日志文件监控利器 - logstash
  • Logback和Logstash的集成
  • 用 elasticsearch 和 logstash 为数十亿次客户搜索提供服务
  • 使用logstash+elasticsearch+kibana快速搭建日志平台
  • logstash开源日志管理系统-2-logstash配置语言介绍


OpenStack

 

OpenStack是由Rackspace与NASA于2010年7月共同推出的云计算开源项目,目的是提供大规模云操作系统,支持类似AWS功能的IaaS平台。目前已经成为仅次于Linux的最大的开源社区,其会员覆盖几乎所有主流的IT供应商。OpenStack广泛在互联网公司和传统企业间部署,并因经诞生了许多创业公司。OpenStack拥有非常好的架构,这体现在所有功能全部模块和API化,模块之间松耦合。(项目详情)

项目主页: http://www.openstack.org/

代码托管地址: https://github.com/openstack/openstack 

推荐相关文档:

  • 如何学习OpenStack,如何成为OpenStack工程师?
  • Openstack能走多远——Openstack、VMware浅析
  • 【OpenStack】Openstack之Cinder服务初探
  • 【OpenStack】在OpenStack上搭建OpenStack UT环境
  • OpenStack学习笔记之--OpenStack Nova 架构

推荐下载资源:

  • openstack快速进阶
  • OpenStack运维指南
  • Openstack基础讲解
  • openstack 安装以及配置教程超详细
  • OpenStack云计算平台管理教程下载 OpenStack入门教程


Puppet

 

你可以使用Puppet集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。Puppet的简单陈述规范语言的能力提供了强大的classing制定了主机之间的相似之处,同时使他们能够提供尽可能具体的必要的,它依赖的先决条件和对象之间的关系清楚和明确。( 项目详情)

代码托管地址: https://github.com/puppetlabs/puppet

推荐相关文档:

  • puppet配置之puppet.conf详解中英文对照
  • 开源自动化部署管理工具Puppet安装
  • 集中化运维管理——Puppet管理之路
  • puppet核心资源类型及其常见属性学习笔记
  • 自动化运维之puppet

推荐下载资源:

  • 使用Puppet框架管理基础设施
  • puppet最经典中文手册资料
  • [精通Puppet配置管理工具].高永超.扫描版
  • puppet服务端安装流程
  • Puppet在集群上的安装与测试


StatsD

StatsD是一款运行在Node.js平台之上的网络应用,可以用来监听UDP端口的信息,并将监听到的数据生成实时图表。StatsD 0.1.0版本由Etsy发布于2012年2月16日。( 项目详情)

代码托管地址: https://github.com/etsy/statsd

推荐相关文档:

  • StatsD学习
  • StatsD与Graphite联合作战
  • WEB监控系列第四篇:statsd指南
  • 在CentOS6上,statsD和Graphite的部署过程


Vagrant

 

Vagrant是一款用来构建和部署虚拟开发环境的工具,非常适合 PHP/Python/Ruby/Java这类语言开发Web应用,可通过Vagrant封装一个Linux开发环境,分发给团队成员,成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行。它使用VirtualBox虚拟化系统,使用Chef创建自动化虚拟环境。( 项目详情)

代码托管地址: https://github.com/mitchellh/vagrant

推荐相关文档:

  • Vagrant实践
  • Vagrant: Up and Running
  • 使用Vagrant打造跨平台开发环境
  • Vagrant:程序员的VirtualBox(一)


Ansible

Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。Ansible 提供一种最简单的方式用于发布、管理和编排计算机系统的工具,你可在数分钟内搞定。( 项目详情) 

代码托管地址: https://github.com/ansible/ansible

推荐相关文档:

  • tornado+ansible+twisted+mongodb运维自动化系统开发( 一)( 二)( 三)
  • 在Puppet/Ansible中使用PPA
  • Ansible@一个高效的配置管理工具(系列文章)


Salt

Salt是一个大型分布式的配置管理系统(安装升级卸载软件,检测环境),也是一个远程命令执行系统。作为一个强大的远程执行管理器,Salt 用于快速和高效的服务器管理。比func 更强大。扩展更为方便。( 项目详情) 

代码托管地址:https://github.com/saltstack/salt

推荐相关文档:

  • salt的快速开始
  • salt的安装和配置
  • Salt 翻译之Grains
  • Salt实战之自动安装部署MooseFS
  • 使用 Salt + Hash 来为密码加密


Graphite-web

Graphite-web 是 graphite组件之一, 提供一个django的可以高度扩展的实时画图系统。( 项目详情)

代码托管地址: https://github.com/graphite-project/graphite-web

官方文档: http://graphite.readthedocs.org/en/latest/


fabric

Fabric 是一个 Python (2.5 或更高) 库和命令行工具,用于连接到 SSH 服务器并执行命令。(  项目详情)

代码托管地址: https://github.com/fabric/fabric

推荐相关文档:

  • Python Fabric实现远程操作和部署
  • MySQL原生HA方案 – Fabric体验之旅
  • MySQL Fabric部署
  • 使用Fabric部署Hadoop和HBase
  • python fabric实现远程操作和部署 


更多开源项目,请查看  CODE开源知识库。

相关文章:

  • 【知识库】不懂你就OUT了!11款常见的Web应用程序框架
  • 【知识库】十款常见的开源数据库学习资料大汇总
  • 开源知识库纠错活动:你找茬,我买单!
  • 【活动】创建开源项目词条,送空间!送礼包!送帽衫!

生活不止有苟且,还有N个免费DevOps开源工具


你喜欢免费的东西吗?获得开发者社区支持的自动化,开源的工具是大家梦寐以求的。这里列举了 N多款最棒的开源工具,可以帮助你很好的实行 DevOps。对的,生活不止有眼前的苟且,还有诗和远方的田野,当然,还有免费的DevOps开源工具。

标题一:开发工具

1.版本控制系统 Git

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

2.代码托管平台 GitLab

GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

3.代码评审工具 Gerrit

Gerrit是一个免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。

二:自动化构建和测试

1.Apache Ant

Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。

2.Maven

Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目现在使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

3.Selenium (SeleniumHQ)

ThoughtWorks公司的一个集成测试的强大工具。

三:持续集成&交付

1.Jenkins

Jenkins 的前身是 Hudson,它是一个可扩展的持续集成引擎。

2.Capistrano

Capistrano 是一个用来并行的在多台机器上执行相同命令的工具,使用用来安装一整批机器。它最初是被开发用来发布 Rails 应用的。

四:部署工具

(一)容器平台

1.Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

2.Ubuntu(LXC)

LXD 是 ubuntu 基于 LXC 技术的重构,容器天然支持非特权和分布式。LXD 与 Docker 的思路不同,Docker 是 PAAS,LXD 是 IAAS。LXC 项目由一个 Linux 内核补丁和一些 userspace 工具组成。这些 userspace 工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。

(二)配置管理

1.Chef

Chef 是一个系统集成框架,为整个架构提供配置管理功能。

2.Puppet

Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。

3.CFengine

Cfengine(配置引擎)是一种 Unix 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine 适用于管理各种环境,从一台主机到上万台主机的机群均可使用。

(三)微服务平台

1.OpenShift

OpenShift 是由红帽推出的一款面向开源开发人员开放的平台即服务(PaaS)。 OpenShift通过为开发人员提供在语言、框架和云上的更多的选择,使开发人员可以构建、测试、运行和管理他们的应用。

2.Cloud Foundry

Cloud Foundry 是VMware于2011年4月12日推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

(四)服务开通

1.Puppet

Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。

2.Docker Swarm

Docker Swarm 是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来说,Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。

五:维护

日志记录

1.Logstash

Logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。

2.CollectD

collectd 是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。比如以RRD 文件形式。

六:监控、警告&分析

1.Nagios

Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。

2.Ganglia

Ganglia 是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据存储和可视化。

七款做好DevOps的强大工具


摘要:传统把开发和运营割裂开的做法,实则不适合现代产品和服务开发的需求,如今把开发和运营作为整体来看待的DevOps工程思想逐步深入人心,随之也逐步有了对DevOps系统的需求,现在给大家推荐七款做好DevOps的强大工具。

 

以前,开发(Development)和运维(Operations)总是相互指责。程序代码永远不会按照开发者的意愿及时更新,服务器的管理人员则对开发者随意简化进程搁置服务请求十分恼火。

直到DevOps的到来,一些工具消除了双方之间的隔阂,提供了从配置管理到应用程序移植的服务,这条战线便消失了。这里介绍几款最近颇受好评的DevOps工具。

1. Atlas 

 

HashiCorp最新推出的Atlas提供了可视化的基础设施,在配置管理和服务搜寻之外,还提供了服务器、包容器和虚拟机。该项目是在其广受欢迎的开源项目Vagrant、Packer、Serf、Consul 和Terraform的基础上建立的,其特有闭源模式能使DevOps在AWS、谷歌计算引擎、Azure以及OpenStack等各种云服务中运行自如,此外,Atlas还提供了可用于开发、资源配置和维护应用程序的仪表板。

Lithium Technologies 工程师Justin Franks目前所用的开发工具是Vagrant,他正在考虑使用Atlas为公司的客户互动平台服务。Franks 说Atlas在Lithium Technologies已经投入使用,现在主要在测试其持续集成和配置的能力。“有很多的工具,比如Jenkins、Travis和Bamboo,它们都过不了最后资源配置的那一关。”弗兰克如是说。

Atlas自购系统的安装预计在今年年初进行。

2. Chef

 

Chef是一个系统和云端基础架构的框架,它可以通过被称为“recipes”的简短可重复脚本自行操作基础设施的建立、配置和管理。但Chef的实权其实只在于操作其可插拔的配置模块(又名“食谱”),而在Chef中有近2000个这样的模块。作为Chef的高调用户之一,Facebook最近开放了一些自己的Chef“食谱”的源代码,包括Taste Tester测试框架和Grocery Delivery,后者是用于监测源代码回购(如Git)并保持本地Chef服务器同步的工具。

宾夕法尼亚大学沃顿商学院也是Chef的用户之一。“Chef可自动化操作一些时间密集型和资源密集型的复杂任务,更重要的是它使我们能够集中精力进行创新和提高服务质量,”该校的技术总监Sanjay Modi在Chef网站的个案分析上说,“Chef也将为组织内的协作和工作效率提高带来更多的可能。” Chef已被使用于沃顿商学院的Amazon EC2资源、Linux节点和本地虚拟机的自动化配置管理。

3. Docker

 

Docker以其集装化技术为应用程序带来便携性,在Docker中,应用程序可以跨平台运行自给系统。Docker是由Docker引擎和Docker集线器组成的,前者是一个轻量级的运行时间和包装工具,后者则是应用程序共享和工作流程自动化的云服务。

“Docker已成为Yelp下一代测试和服务管理基础设施的重要组成部分,”Yelp 的技术总监Sam Eaton在Docker网站上的案例研究中说,“依赖性隔离和‘集装箱’的快速旋转使得开发周期和测试速度提高了不只4倍。”

4. Puppet

 

通过机器和软件的自动化配置和管理,Puppet公司从Puppet实验室提供数据中心的业务流程。最新发布的3.7版本推出了Puppet Apps,这是一款专用于应用IT自动化的应用,其包含的Node Manager,可用于管理大量常变系统。Puppet的开源版本也已推出。

斯坦福大学采用Puppet的开源版本来“解决开发新型数字图书馆服务和保持这些服务高性能安全运行之间的矛盾,”斯坦福大学的Bess Sadler在Puppet网站的视频推荐中如是说。

她还指出开发者应更多地参与系统管理,而系统管理员也同样参与了软件开发,于是,应用开发也就更加快捷省时。

5. SaltStack

 

SaltStack提供数据自动化、服务器配置、云端建设和应用程序配置的系统管理。事件驱动的云端基础架构自动化工具,可以自动运行DevOps工作流程中的任务。Deseret Digital Media已经采用SaltStack自动化运行环境长达两年,其特点是大约200个虚拟机用于运转生产和登台环境。

Deseret Digital的开发部主管Justin Carmony表示,SaltStack“使操作更加贴近开发者”。Deseret Digital有三个运营人员和30个开发者:SaltStack让研发与运营统一战线,比如在新服务器配置上。一般来说,运营和研发会一直争吵,无法达成统一意见。而SaltStack提供了一种通用的方法和通用语言来管理服务器,从而有助于双方消除误会,方便沟通。

6. ScriptRock GuardRail

 

GuardRail提供了配置监控,连续监测机器的配置状态。它可以确保用户的生产环境是符合质量保证以及测试和开发环境的。VersionOne,一个灵活项目管理平台的制造商,在遇到的配置漂移和自动化的挑战后,果断转向了GuardRail。

“开发者走捷径使自动化更易实现。为了在新的代理上运行已有创建,他们改变了之前用于其他创建的代码。于是基础设施的不稳定破坏了兼容多个生成代理的可能性。” VersionOne 的产品经理Ian Buchanan在案例分析中如是说。“而有了GuardRail,我们现在可以了解到任何生成代理是如何配置的,所以我们能够依照我们的意愿,确实地扩展到尽可能多的代理。”现在,VersionOne可以直观的看到配置漂移,可以记录预期,并创造了人类可读的测试,这相当于节省了一个专职的测试人员。

7. Splunk

 

Splunk是在整个应用程序的生命周期中实时寻找和修复问题的工具,它使开发者能够直接看到生产环境中的数据,而无需访问生产机器。Splunk协助用户进行DevOps过程,包括持续的集成和资源配置。

User EnerNOC使用Splunk大概五年了,这是一家为电网运营商等提供能量智能软件的公司。“Splunk从根本上改变我们操作生产系统的方式,”EnerNOC 公司的首席工程师James Nichol介绍说,“它使技术和非技术用户都能够深入了解一个非常复杂的系统,这个系统原本是他们无法了解的。我们已经有了虚拟服务器和开发经理,服务台运营商也建立了仪表板和警报,并开始深入挖掘数据——没有Splunk,这些都是不可能实现的。”

当DevOps“遇上”周期表

你或许听过DevOps的威名,但有相当大一部分人可能说不清DevOps到底是什么东西。搜索“DevOps”,出来的是茫茫多的信息,最奇怪的现象是明明2009年才提出的名词,却有人号称有十年以上DevOps经验。那小编只好来扒一扒关于DevOps的那些事。

给DevOps下个定义:它应该是一种文化,一个专业,一种行动(movement),而不是单一的角色或者职位。在企业当中引入DevOps是为了让组织变得更好,并不是只适用于初创公司(start-up)或互联网企业。

DevOps有以下五个要素:Culture、Automation、Lean、Measurement、Sharing

有鉴于DevOps的分类仍无既定的依据,2014年Gartner分析师在博客上发表了一张图,希望用图示来说明DevOps的內容与关联性,并将DevOps以人、流程、技术、文化四部分来分类。你应该听过持续整合,持续交付,测试自动化等名词,依照Garner的定义,这些名词都是与DevOps相关的项目。

Gartner对于DevOps的分类图

上图中提出了Full Stack Engineer与DevOps Engineer的概念,那么在这里又不得不脑补一下DevOps Engineer与Full Stack Engineer。

DevOps Engineer(DevOps工程师)根据开发人员的需求构建各种工具,提高开发的速度与品质,解决开发人员的后顾之忧。DevOps Engineer需要善于沟通并且写一手漂亮的代码,成为成功的开发人员背后的“女人”。

Full Stack Engineer,全栈工程师。在DevOps领域或许Full Stack Enginner的定义是:掌握多种技能,并利用这些技能独立完成产品。大多数Full Stack Engineer是在初创公司,这些人什么都会(或者是环境使然,什么都必须会),除了开发技能之外,自己还会研发各种辅助开发的框架或工具。

在DevOps 2015研讨会上,有人鉴于数量繁多的DevOps工具,仿照元素周期表制作出了一张DevOps周期表。划分了数据库、CI、日志、安全、监控、配置管理、云服务等15个大类,120个工具。

DevOps 2015研讨会上的DevOps周期表

掌握了以上图片里的这些工具,或许你就是一名合格的全栈工程师。在DevOps2015大会上几乎每场都在介绍工具,和现行DevOps的趋势一样,工具一个接一个的推出,学都学不完。但个人认为,不要沉迷于工具带来的便利,大多数DevOps工具都是自动化的工具,用任意script语言一样能写出同样的效果,重要的是完全理解了这些工具背后的设计理念和使用时机。

DevOps周期表下载地址:http://pan.baidu.com/s/1kTzVtjx

【附件附录】

1.DevOps开发模式|DevOps是什么|DevOps 工具|敏捷开发 DevOps - OneAPM 博客 http://blog.oneapm.com/tags-DevOps.html

2.DevOps | 运维开发 http://blog.jiunile.com/

   SDNLAB | 专注网络创新技术 http://www.sdnlab.com/

3.DevOps 门户 | 关于研发运维一体化(DevOps)的一切 http://devopshub.cn/


你可能感兴趣的:(智能化运维最佳实践-自动化)