运维相关环境与工具扫盲

项目的发布

开发环境 devel(DEV)

Development Environment

又称软件开发环境 (Software Development Environment,SDE)

是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。

指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件

  • 软件工具: 用以支持软件开发的相关过程、活动和任务
  • 环境集成机制 : 为工具集成和软件的开发、维护及管理提供统一的支持
软件开发环境的主要组成成分是软件工具。
人机界面是软件开发环境与用户之间的一个统一的交互式对话系统,它是软件开发环境的'重要质量标志
存储各种软件工具加工所产生的软件产品或半成品的软件环境数据库是软件开发环境的'核心

==

测试环境 SIT

Testing environment

一般是克隆一份生产环境的配置

指测试运行其上的软件和硬件环境的描述,以及任何其它与被测软件交互的软件,包括驱动和桩
测试环境是指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据的总称。

测试环境 = 软件 + 硬件 + 网络 + 数据准备 + 测试工具

==

预发环境 Stage

  • 功能验收环境 FAT:做集成测试,测试程序是否能跑起来
  • 用户验收环境 UAT:接收真实流量,测试隐藏问题

功能验收环境 FAT

Feature Acceptance Test environment

功能验收测试环境,用于软件测试者测试使用

一种验证活动:验证我们是否把事情做对了、该软件是否符合业务要求

用户验收环境 UAT

User Acceptance Test environment

用户验收测试环境,用于生产环境下的软件测试者测试使用

相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。

主要是要求用户参与进测试流程,并得到用户对软件的认可,鼓励用户自己进行测试设计和进行破坏性测试,充分暴露系统的设计和功能问题

==

生产环境 PROD

Production environment

是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改。


运维工具大全

代码管理(SCM)

GitHub、GitLab、BitBucket、SubVersion

# GitHub
	GitHub 是一个面向开源及私有软件项目的'托管平台',因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
	除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。
	在GitHub,用户可以十分轻易地找到海量的开源代码。

# GitLab
	GitLab 是一个用于'仓库管理系统'的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
	GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
	它使用Ruby语言写成。 后来,一些部分用Go语言重写

# BitBucket
BitBucket 是一家'源代码托管网站',采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户。

# SubVersion (SVN)
	Subversion是一个'自由开源的版本控制系统'。在Subversion管理下,文件和目录可以超越时空。
	Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。
	Subversion(简称SVN)是近年来崛起的版本管理软件系统,目前,绝大多数开源软件都使用SVN作为代码版本管理软件。
	Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。

==

构建工具

maven、Ant、Gradle

# maven
	Maven是一个'项目管理工具',它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
	当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
	Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件
	由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。
	功能描述:一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs
	Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
	
# Ant
Ant是'Java的生成工具',是Apache的核心项目
Ant类似于Unix中的Make工具,都是用来编译、生成
Ant是跨平台的,而Make不能
Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了javac、java、创建目录、复制文件等功能,所以可以直接点击Ant文件,即可编译生成你的项目

# Gradle
	Gradle是一个基于Apache Ant和Apache Maven概念的'项目自动化构建开源工具'。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。
	Gradle是'一个基于JVM的构建工具',是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

==

自动部署(CD)

Capistrano、CodeDeploy

# Capistrano
	Capistrano是'一种在多台服务器上运行脚本的开源工具',它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。
	Capistrano是一种通过ssh向多个服务器部署web应用的一种框架和工具。它使用一种简单的Domain Specific Language,这种语言是从工具rake中部分借用过来的,Rake的作用类似C语言中的make工具,允许你定义任务,这些任务也许用于某些特定角色的服务器。同时它还允许你透过网关在防火墙和VPN之后执行任务。

补充:
# 亚马逊AWS( Amazon Web Services )是亚马逊提供的专业云计算服务,于2006年推出,以Web服务的形式向企业提供IT基础设施服务,通常称为云计算。

# Apollo:一个进行代码部署的自动化平台

# CodeDeploy
	为了能够让广大开发者和企业用户使用到功能丰富且久经考验的代码部署平台,在Apollo的经验基础上,AWS发布了'自动化部署服务——CodeDeploy
	AWS CodeDeploy旨在帮助用户完成应用的快速部署,按照用户指定的策略将代码部署在一组EC2服务器上。用户策略可以包括集群部署速度、部署事件通知、警报处理策略等。 此外,CodeDeploy还可以和弹性负载均衡(Elastic Load Balancer)、自动扩展组(Auto Scaling Group)等服务结合,完成无缝升级和动态部署。
	为方便有效地组织部署任务,CodeDeploy设立了三个概念:应用(Application)、部署(Deployment),以及部署配置(Deployment Configuration)

==

持续集成(CI)

# Continuous Integration 简称CI
	持续集成:Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低。
	作为开源项目,由于项目开发人员少,没有他人指手画脚,所以代码质量相对商业项目更好。对开源项目实施CI,会更简单

Jenkins、Travis

# Jenkins
	Jenkins是一个开源软件项目,是基于Java开发的'一种持续集成工具,用于监控持续重复的工作',旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Jenkins功能包括:
	1、持续的软件版本发布/测试项目。
	2、监控外部调用执行的工作。

# 启动环境:系统中已经安装了jdk,最好是jdk1.5以上。
# 启动方式1:
1.切换到jenkins.war存放的目录
2.执行 `java -jar jenkins.war`
3.如果需要修改端口可以使用如下命令:
	`java -jar jenkins.jar--httpPort=8081`
4.然后在浏览器中输入localhost:8081,localhost可以是本机的ip,也可以是计算机名。就可以打开jenkins

# 启动方式2:
1.用tomcat打开
2.解压tomcat到某个目录,如/usr/local,进入tomcat下的/bin目录,启动tomcat
3.将jenkins.war文件放入tomcat下的webapps目录下,启动tomcat时,会自动在webapps目录下建立jenkins目录,在地址栏上需要输入localhost:8080/jenkins。
# Travis
	Travis CI是在线托管的CI服务,用Travis来进行持续集成,不需要自己搭服务器,在网页上点几下就好,用起来更方便。最重要的是,它对开源项目是免费的。
	Travis CI 是'在线托管的持续集成服务',绑定Github项目,抓取新的代码自动进行测试构建,甚至自动部署到测试环境。 使用这项服务,每次我们提交新的代码,都能及时发现问题并修复。

==

配置管理

Ansible、SaltStack、Chef、Puppet

# Ansible
	ansible是新出现的'自动化运维工具',基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
	ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

# SaltStack
	SaltStack管理工具'允许管理员对多个操作系统创建一个一致的管理系统',包括VMware vSphere环境。
	除了运行远程命令,SaltStack允许管理员使用“grain”。grain可以在SaltStack仆从运行远程查询,因此收集仆从的状态信息并允许管理员在一个中央位置存储信息。
	SaltStack也可以帮助管理员定义目标系统上的期望状态。这些状态在应用时会用到.sls文件,其中包含了如何在系统上获得所需的状态非常具体的要求。
	
# chef
'一个自动化服务器配置管理工具
可实现以下功能:
	1.通过编写代码而不是通过运行命令来管理服务器
	2.与您的应用程序,数据库,LDAP目录等紧密集成
	3.轻松配置需要有关整个基础结构知识的应用程序(比如:“哪些系统正在运行我的应用程序?”“当前的主数据库服务器是什么?”)
	
# Puppet
	puppet是一种Linux、Unix、windows平台的'集中配置管理系统',使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,'puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
	puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。
	每个puppet客户端每半小时(可以设置)连接一次服务器端, 下载最新的配置文件,并且严格按照配置文件来配置客户端. 配置完成以后,puppet客户端可以反馈给服务器端一个消息. 如果出错,也会给服务器端反馈一个消息。

==

容器

https://mp.weixin.qq.com/s?__biz=MzI3MTI2NzkxMA==&mid=2247488720&idx=1&sn=56a3f0c46d3272f103216cf8330cf6af&scene=21#wechat_redirect

# 什么是 Linux 容器?
	Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让你在不同环境(如开发、测试和生产等环境)之间轻松迁移应用的同时,还可保留应用的全部功能。
	Linux 容器还有利于明确划分职责范围,减少开发和运维团队间的冲突。这样,开发人员可以全心投入应用开发,而运维团队则可专注于基础架构维护。由于 Linux 容器基于开源技术构建,还将便于你在未来轻松采用各类更新、更强的技术产品。包括 CRI-O、Kubernetes 和 Docker 在内的容器技术,可帮助你的团队有效简化、加速和编排应用的开发与部署。

Docker、Podman、LXC、第三方厂商如AWS

# Docker
	Docker 是一个'开源的应用容器引擎',让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。
	Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。容器是完全使用沙箱机制,相互之间不会有任何接口。
	
# 一个完整的Docker有以下几个部分组成:
	1.Docker Client    客户端
	2.Docker Daemon    守护进程
	3.Docker Image     镜像
	4.Docker Container 容器

# 相关概念
	docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。
	Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
	Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
	Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

# Podman产生背景
	Docker 是目前最流行的 Linux 容器解决方案,即使 Docker 是目前管理 Linux 容器的一个非常方便的工具,但它也有两个缺点:
	1.Docker 需要在你的系统上运行一个守护进程。
	2.Docker 是以 root 身份在你的系统上运行该守护程序。
# 这些缺点的存在可能有一定的安全隐患,为了解决这些问题,下一代容器化工具 Podman 出现了

	Podman 是'一个开源的容器运行时项目',可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
	Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
	Podman 官网地址:https://podman.io/
	Podman 项目地址:https://github.com/containers/libpod

# LXC
	Linux Container 容器是'一种内核虚拟化技术',可以提供轻量级的虚拟化,以便隔离进程和资源。
	LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。
	容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。'与传统虚拟化技术相比,它的优势在于:
	(1)与宿主机使用同一个内核,性能损耗小;
	(2)不需要指令级模拟;
	(3)不需要即时(Just-in-time)编译;
	(4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
	(5)避免了准虚拟化和系统调用替换中的复杂性;
	(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
	
	Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。

==

编排

Kubernetes、Apache Mesos

http://www.dockone.io/article/932(Kubernetes)

# Kubernetes
	kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。'是一个开源的,用于管理云平台中多个主机上的容器化的应用',Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
	Kubernetes是Google开源的一个'容器编排引擎',它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
	在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

# Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化,插件化,可挂载,可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

	
# 容器
	传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
	新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
	容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

# Apache Mesos
	Apache Mesos是一个'集群管理器',提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Hadoop、MPI、Hypertable、Spark。

==

服务注册与发现

Zookeeper、etcd、Consul

# Zookeeper
	ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
	它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
	ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
# ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。

# etcd
etcd 是一个分布式、可靠 key-value 存储的'分布式系统'。当然,它不仅仅用于存储,还提供共享配置及服务发现。

	etcd 比较多的应用场景是用于服务发现,服务发现 (Service Discovery) 要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接。
# 和 Zookeeper 类似,etcd 有很多使用场景,包括:
配置管理
服务注册发现
选主
应用调度
分布式队列
分布式锁

# 工作原理
	etcd 使用 raft 协议来维护集群内各个节点状态的一致性。简单说,etcd 集群是一个分布式系统,由多个节点相互通信构成整体对外服务,每个节点都存储了完整的数据,并且通过 Raft 协议保证每个节点维护的数据是一致的。
	每个 etcd 节点都维护了一个状态机,并且,任意时刻至多存在一个有效的主节点。主节点处理所有来自客户端写操作,通过 Raft 协议保证写操作对状态机的改动会可靠的同步到其他节点。

# Consul
	Consul是一个服务管理软件。支持多数据中心下,分布式高可用的,服务发现和配置共享。采用 Raft 算法,用来保证服务的高可用。
	
官方:https://www.consul.io/docs/index.html
网文:https://www.jianshu.com/p/ce7c7b9dcf14

==

脚本语言

python、ruby、shell

# python
	Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
	
# ruby
	Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。
	
# shell
	一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
	
	图形界面shell(Graphical User Interface shell 即 GUI shell)
	命令行式shell(Command Line Interface shell ,即CLI shell)
	
	shell基本上是一个命令解释器,类似于DOS下的command。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (bash)和C shell (csh)

==

日志管理

ELK、Logentries

# 为什么用到ELK
	一般我们需要进行日志分析场景:直接在日志文件中 grep、 awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。
	常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
	一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
	ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
	
# 简介
	ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstabash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstabash,官方也推荐此工具。
	1.Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
	2.Logstabash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,c端安装在需要收集日志的主机上,s端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
	3.Kibana 也是一个开源和免费的工具,Kibana可以为 Logstabash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
# 参考:https://www.cnblogs.com/aresxin/p/8035137.html

# Logentries
	Logentries 是一个'日志管理平台',提供各种语言的客户端开发包,可以在云端对应用日志进行分析统计。该平台的服务器端是不开源的,但其各种客户端 API 都是开源的,源码地址:https://github.com/logentries

# Splunk
Splunk 是一款顶级的日志分析软件,能处理常规的日志格式,比如 apache、squid、系统日志、mail.log 这些

对所有日志先进行 index,然后可以交叉查询,支持复杂的查询语句。然后通过直观的方式表现出来。日志可以通过文件方式传倒 Splunk 服务器,也可以通过网络实时传输过去。或者是分布式的日志收集。

==

系统监控

Prometheus、Zabbix、Datadog、Graphite、Ganglia、Nagios

# Prometheus
	Prometheus是由SoundCloud开发的'开源监控报警系统和时序列数据库'。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
# 官网地址:https://prometheus.io/
	
# Prometheus的特点
多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。

# 基本原理
	Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。  这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。
	目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnibash、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)# 三大套件
Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
Alertmanager 警告管理器,用来进行报警。
Pubash Gateway 支持临时性Job主动推送指标的中间网关。

# 参考:https://www.cnblogs.com/chenqionghe/p/10494868.html

# Zabbix
	zabbix 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
	zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
	zabbix由2部分构成,zabbix server与可选组件zabbix agent。
	zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
	
	zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。
	zabbix server可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(agent方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。
	
# 搭建Zabbix监控环境
	要想搭建一个Zabbix的工作环境,需要从服务器入手。与服务器通信,管理员需要使用一个Zabbix前端界面,与Zabbix服务器和数据库进行通信。三个关键(界面、服务器和数据库)可以安装在同一台服务器上,但是如果你拥有一个更大更复杂的环境,将它们安装在不同的主机上也是一个选项。Zabbix服务器能够直接监控到同一网络中的设备,如果其他网络的设备也需要被监控,那还需要一台Zabbix代理服务器。

# Datadog
	Datadog的工作方式是在每一台需要监控的服务器上运行它的Agent。Agent不但会收集这台服务器的各类基础性能数据,如CPU使有率,剩余内存空间,剩余磁盘空间,网络流量等,也可以收集用户自定义的性能数据,灵活性很好。
	Datadog另一个好用的地方在于它与众多的云服务和开源项目有整合
	Datadog也可以对各种监控的性能指标设定阈值,当指标超出阈值范围时,发出警报。我们可以利用它与Slack的整合,直接将警报推送到Slack上。

# Graphite
	Graphite是一个开源实时的、显示时间序列度量数据的图形系统。Graphite并不收集度量数据本身,而是像一个数据库,通过其后端接收度量数据,然后以实时方式查询、转换、组合这些度量数据。Graphite支持内建的Web界面,它允许用户浏览度量数据和图。

Graphite有三个主要组件组成:
1)Graphite-Web
这是一个基于Django的Web应用,可以呈现图形和仪表板
2)Carbon
这是一个度量处理守护进程
3)Whisper
这是一个基于时序数据库的库

# Ganglia
	Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。
	Ganglia是一个跨平台可扩展的,高 性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据存储和可 视化。它利用精心设计的数据结构和算法实现每节点间并发非常低的。

# Nagios
	Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
	Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。

==

性能监控

AppDynamics、New Relic

# AppDynamics
Appdynamics 是一种服务性能监控/管理工具,主要包含两种功能:
1.终端用户性能体验监控
2.计算资源监控

# New Relic
	New Relic 是一个很强大的服务器性能监控工具,New Relic目前'专注于SaaS和App性能管理业务',它支持支持agent和API传送数据,能够对部署在本地或在云中的web应用程序进行监控、故障修复、诊断、线程分析以及容量计划。
	
端对端事务跟踪:跟踪一个关键事务的性能,这个事务贯穿在整个面向服务应用程序环境。
代码级的可见性:深入洞察特定代码段和SQL语句对性能的影响。
关键事务:标记你的最关键的事务,当响应时间、调用、错误率等这些表现不佳的时候可以迅速的发现。
X光会话:通过展示事务跟踪长期分析的结果,来获得对一个关键事务性能更深入的了解

==

压力测试

JMeter、Blaze Meter、loader.io

# JMeter
	Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试
	Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
	
# Blaze Meter
Blaze Meter是一款可以记录所有HTTP流量并在10分钟内创建一个负载测试并且与Apache JMeter兼容的chrome插件
目前普通的使用方法就是一种脚本录制工具可以辅助Jmeter完成脚本的创建。

BlazeMeter扩展提供了两种测试模式:
1.一种是FollowMe模式,在这种模式下不需要设置和脚本。 只需浏览您的网站,一群虚拟用户就会按照您的操作 - 模拟即时测试的负载。 查看实时报告并即时调整您的测试,一键即可进行动态测试
2.另一种模式是为您为您创建JMeter脚本,记录所有浏览活动以创建JMeter脚本并自动将其上传到BlazeMeter。 单击执行或将其导出为JMeter .jmx文件。

# loader.io
loader.io最大支持1万个连接数测试,其提供了测试结果报表也很详细,自由定制Header头部、支持PUT 、POST、PATCH等方式,功能强大,测试结果准确。

==

应用服务器

Tomcat、JBoss、IIS

IIS# Tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,是开发和调试 JSP程序的首选
# 解析
	当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
	'当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet
	
# JBoss
JBoss是一个基于J2EE的开放源代码的应用服务器
JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

优点:
1、JBoss是免费的,开放源代码J2EE的实现,通过LGPL许可证进行发布。
2、JBoss需要的内存和硬盘空间比较小。
3、安装便捷:解压后,只需配置一些环境变量即可。
4、JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载;如果有改动,也会自动更新
5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能
6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB-JAR和Web-WAR,非常方便。
7、Jboss支持集群。
'因此,高度模块化的和松耦合。JBoss应用服务器是健壮的、高质量的,而且还具有良好的性能。'

# IIS
互联网信息服务(Internet Information Services,简称IIS),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。

==

Web服务器

Apache、Nginx

# Apache
	Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
	Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器
	'Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
	Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。
	
# Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
'因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
'其特点是占有内存少,并发能力强

	Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

# 作为服务器的优点:
1.Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
2.处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
3.无缓存的反向代理加速,简单的负载均衡和容错。
4.FastCGI,简单的负载均衡和容错。
5.模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCG或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。
6.支持 SSL 和 TLSSNI。

==

数据库

关系型数据库

MySQL、Oracle、PostgreSQL

# MySQL
	MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性
	MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一
	MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
	
# 特性
1.MySQL使用 C和 C++编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
2.支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。
3.为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
4.支持多线程,充分利用 CPU 资源。
5.优化的 SQL查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 bashift_JIS等都可以用作数据表名和数据列名。
8.提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11.支持多种存储引擎。
12.MySQL 是开源的,所以你不需要支付额外的费用。
13.MySQL 使用标准的 SQL数据语言形式。
14.MySQL 对 PHP 有很好的支持,PHP是比较流行的 Web 开发语言。
15.MySQL是可以定制的,采用了 GPL协议,你可以修改源码来开发自己的 MySQL 系统。
16.在线 DDL/更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6新增)
17.复制全局事务标识,可支持自我修复式集群(5.6新增)
18.复制无崩溃从机,可提高可用性(5.6新增)
19.复制多线程从机,可提高性能(5.6新增)
20.3倍更快的性能(5.7新增)
21.新的优化器(5.7新增)
22.原生JSON支持(5.7新增)
23.多源复制(5.7新增)
24.GIS的空间扩展

# 存储引擎
【MyISAM】  MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
【InnoDB】 事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎

# Oracle
	Oracle是一个面向Internet计算环境的数据库。它是在数据库领域一直处于领先地位的Oracle(即甲骨文公司)的产品。可以说Oracle 关系数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案

# PostgreSQL
PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)
PostgreSQL是一个非常健壮的软件包,有很多在大型商业RDBMS中所具有的特性,包括事务、子选择、触发器、视图、外键引用完整性和复杂锁定功能。另一方面,PostgreSQL也缺少商业数据库中某些可用的特性,如用户定义的类型、继承性和规则。从用户的角度来讲,'PostgreSQL惟一不具备的主要特性就是外部连接,在今后的版本中会将其加入。

NoSQL数据库

mongoDB、redis

# mongoDB
1.MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
2.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
3.Mongo最大的特点是'它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

# Redis
	Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
	redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和habash(哈希类型)。。这些数据类型都支持pubash/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是【原子性】的。
	Redis支持【主从同步】。'数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制 ' 存盘可以有意无意的对数据进行写操作 由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

==

项目管理(PM)

Jira、AsaNa、Taiga、Trello、Basecamp、Pivotal Tracker

# Jira
JIRA 是目前比较流行的基于Java架构的管理系统。
主要功能:
1.问题追踪和管理:用它管理项目,跟踪任务、bug、需求,通过jira的邮件通知功能进行协作通知,在实际工作中使工作效率提高很多
2.问题跟进情况的分析报告:可以随时了解问题和项目的进展情况
3.项目类别管理功能:可以将相关的项目分组管理
4.组件/模块负责人功能:可以将项目的不同组件/模块指派相应的负责人,来处理所负责的组件的Issues
5.项目email地址功能:每个项目可以有不同的email(该项目的通知邮件从该地址发出)
6.无限制的工作流:可以创建多个工作流为不同的项目使用

# AsaNa
AsaNa,团队任务管理平台,是一个集邮件、办公、文档、沟通于一体的任务管理平台,它注重使用键盘的快捷方式,可以帮你节省不少工作的时间。在Asana 收取邮件都是以实时信息的方式展现,也就是说用户收取的邮件都是自动展示,而不用专门去点开“未读邮件”了。而用户在读完邮件后,可以通过标记的方式让邮件自动归档。

# Taiga
Taiga 是一个免费开源,而且功能非常强大的项目管理平台,用于初创企业和敏捷开发团队。提供一个简单漂亮的项目管理工具。
Taiga 采用 Python Django 框架开发,前端基于 AngularJS 实现。

# Trello
Trello 是一种简便、免费、灵活的可视化方式,可以管理你的项目并组织各种事务, 得到世界各地数百万人的信任。Trello看板、列表和卡片使你能够以一种有趣、灵活和有益的方式,组织你的项目并划分它们的优先顺序。

# Basecamp
Basecamp是37signals公司旗下的一款非常流行的'基于云服务的项目管理软件 
Basecamp提供了消息板,待办事宜,简单调度,协同写作,文件共享。而不是甘特图,炫丽的曲线图,和繁重的电子表格。

# Pivotal Tracker(枢纽跟踪器)
Pivotal Tracker是一款【敏捷开发】和项目管理的软件

你可能感兴趣的:(实践相关,运维)