CMDB开发(需求分析)
浅谈ITIL
TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central Computing and Telecommunications Agency)在20世纪80年代末制订,现由英国商务部OGC(Office of Government Commerce)负责管理,主要适用于IT服务管理(ITSM)。ITIL为企业的IT服务管理实践提供了一个客观、严谨、可量化的标准和规范。
1、事件管理(Incident Management)
事故管理负责记录、归类和安排专家处理事故并监督整个处理过程直至事故得到解决和终止。事故管理的目的是在尽可能最小地影响客户和用户业务的情况下使IT系统恢复到服务级别协议所定义的服务级别。
目标是:在不影响业务的情况下,尽可能快速的恢复服务,从而保证最佳的效率和服务的可持续性。事件管理流程的建立包括事件分类,确定事件的优先级和建立事件的升级机制。
2、问题管理(Problem Management)
问题管理是指通过调查和分析IT基础架构的薄弱环节、查明事故产生的潜在原因,并制定解决事故的方案和防止事故再次发生的措施,将由于问题和事故对业务产生的负面影响减小到最低的服务管理流程。与事故管理强调事故恢复的速度不同,问题管理强调的是找出事故产生的根源,从而制定恰当的解决方案或防止其再次发生的预防措施。
目标是:调查基础设施和所有可用信息,包括事件数据库,来确定引起事件发生的真正潜在原因,一起提供的服务中可能存在的故障。
3、配置管理(Configuration Management)
配置管理是识别和确认系统的配置项,记录和报告配置项状态和变更请求,检验配置项的正确性和完整性等活动构成的过程,其目的是提供IT基础架构的逻辑模型,支持其它服务管理流程特别是变更管理和发布管理的运作。
目标是:定义和控制服务与基础设施的部件,并保持准确的配置信息。
4、变更管理(Change Management)
变更管理是指为在最短的中断时间内完成基础架构或服务的任一方面的变更而对其进行控制的服务管理流程。变更管理的目标是确保在变更实施过程中使用标准的方法和步骤,尽快地实施变更,以将由变更所导致的业务中断对业务的影响减小到最低。
目标是:以受控的方式,确保所有变更得到评估、批准、实施和评审。
5、发布管理(Release Management)
发布管理是指对经过测试后导入实际应用的新增或修改后的配置项进行分发和宣传的管理流程。发布管理以前又称为软件控制与分发。
目标是:在实际运行环境的发布中,交付、分发并跟踪一个或多个变更。
实际工作场景中自动化工具举例:
CMDB
CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。
- 整合是指能够充分利用来自其他数据源的信息,对CMDB中包含的记录源属性进行存取,将多个数据源合并至一个视图中,生成连同来自CMDB和其他数据源信息在内的报告;
- 调和能力是指通过对来自每个数据源的匹配字段进行对比,保证CMDB中的记录在多个数据源中没有重复现象,维持CMDB中每个配置项目数据源的完整性;自动调整流程使得初始实施、数据库管理员的手动运作和现场维护支持工作降至最低;
- 同步指确保CMDB中的信息能够反映联合数据源的更新情况,在联合数据源更新频率的基础上确定CMDB更新日程,按照经过批准的变更来更新 CMDB,找出未被批准的变更;
- 应用映射与可视化,说明应用间的关系并反应应用和其他组件之间的依存关系,了解变更造成的影响并帮助诊断问题。
目前CMDB资产管理的实现有如下方式:
Paramiko类
1.基于CMDB中控机和SSH对远程服务器执行命令实现
- import paramiko
- # 创建SSH对象
- ssh = paramiko.SSHClient()
- # 允许连接不在know_hosts文件中的主机
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- # 连接服务器
- ssh.connect(hostname='c1.salt.com', port=, username='wupeiqi', password='')
- # 执行命令
- stdin, stdout, stderr = ssh.exec_command('df')
- # 获取命令结果
- result = stdout.read()
- # 关闭连接
- ssh.close()
2.SaltStack
基于SaltStack的master上的pillar以及远程执行命令实现
- import salt.client
- local = salt.client.LocalClient()
- local.cmd('*', 'cmd.run', ['whoami'])
3.Puppet
基于Puppet的factor和report功能实现
- puppet中默认自带了5个report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路径下。如果需要执行某个report,那么就在puppet的master的配置文件中做如下配置:
- ######################## on master ###################
- /etc/puppet/puppet.conf
- [main]
- reports = store #默认
- #report = true #默认
- #pluginsync = true #默认
- ####################### on client #####################
- /etc/puppet/puppet.conf
- [main]
- #report = true #默认
- [agent]
- runinterval =
- server = master.puppet.com
- certname = c1.puppet.com
- 如上述设置之后,每次执行client和master同步,就会在master服务器的 【/var/lib/puppet/reports】路径下创建一个文件,主动执行:puppet agent --test
- 在 /etc/puppet/modules 目录下创建如下文件结构:
- modules
- └── cmdb
- ├── lib
- │ └── puppet
- │ └── reports
- │ └── cmdb.rb
- └── manifests
- └── init.pp
- ################ cmdb.rb ################
- # cmdb.rb
- require 'puppet'
- require 'fileutils'
- require 'puppet/util'
- SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
- Puppet::Reports.register_report(:cmdb) do
- desc "Store server info
- These files collect quickly -- one every half hour -- so it is a good idea
- to perform some maintenance on them if you use this report (it's the only
- default report)."
- def process
- certname = self.name
- now = Time.now.gmtime
- File.open("/tmp/cmdb.json",'a') do |f|
- f.write(certname)
- f.write(' | ')
- f.write(now)
- f.write("\r\n")
- end
- end
- end
- ################ 配置 ################
- /etc/puppet/puppet.conf
- [main]
- reports = cmdb
- #report = true #默认
- #pluginsync = true #默认
自定义factor示例
- $LOAD_PATH.unshift(File.dirname(__FILE__)) unless $LOAD_PATH.include?(File.dirname(__FILE__))
- require "rubygems"
- require 'pp'
- require 'json'
- require 'utils'
- def dmi_get_ram(cmd)
- ram_slot = []
- key_map = {
- 'Size' => 'capacity',
- 'Serial Number' => 'sn',
- 'Type' => 'model',
- 'Manufacturer' => 'manufactory',
- 'Locator' => 'slot',
- }
- output = Utils.facter_exec(cmd)
- devices = output.split('Memory Device')
- devices.each do |d|
- next if d.strip.empty?
- segment = {}
- d.strip.split("\n\t").each do |line|
- key, value = line.strip.split(":")
- if key_map.has_key?(key.strip)
- if key.strip == 'Size'
- segment[key_map['Size']] = value.chomp("MB").strip.to_i / 1024.0 # unit GB
- else
- segment[key_map[key.strip]] = value ? value.strip : ''
- end
- end
- end
- ram_slot.push(segment) unless segment.empty?
- end
- return ram_slot
- end
- Facter.add("ram") do
- confine :kernel => "Linux"
- setcode do
- ram_slot = []
- cmd = "dmidecode -q -t 17 2>/dev/null"
- ram_slot = dmi_get_ram(cmd)
- JSON.dump(ram_slot)
- end
- end
- Facter.add("ram") do
- confine :kernel => 'windows'
- setcode do
- ram_slot = []
- if Facter.value(:manufacturer) =~ /.*HP.*/i
- cli = 'C:\cmdb_report\dmidecode.exe'
- cmd = "#{cli} -q -t 17"
- ram_slot = dmi_get_ram(cmd) if File.exist?(cli)
- else
- require 'facter/util/wmi'
- Facter::Util::WMI.execquery("select * from Win32_PhysicalMemory").each do | item |
- if item.DeviceLocator
- slot = item.DeviceLocator.strip
- else
- slot = ''
- end
- if item.PartNumber
- model = item.PartNumber.strip
- else
- model = ''
- end
- if item.SerialNumber
- sn = item.SerialNumber.strip
- else
- sn = ''
- end
- if item.Manufacturer
- manufactory = item.Manufacturer.strip
- else
- manufactory = ''
- end
- ram_slot.push({
- 'capacity' => item.Capacity.to_i / (**), # unit GB
- 'slot' => slot,
- 'model' => model,
- 'sn' => sn,
- 'manufactory' => manufactory,
- })
- end
- end
- JSON.dump(ram_slot)
- end
- end
内存信息
4.Agent
基于shell命令实现
对于Agent的版本的实现思路:
- Agent采集硬件资产
- API提供相关处理的接口
- 管理平台为用户提供可视化操作
CMDB开发(需求分析)的更多相关文章
- Python CMDB开发
Python CMDB开发 运维自动化路线: cmdb的开发需要包含三部分功能: 采集硬件数据 API 页面管理 执行流程:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取 ...
- python运维开发(二十五)---cmdb开发
内容目录: 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infr ...
- CMDB开发
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_12-课程预览功能开发-需求分析
5 课程预览功能开发 5.1 需求分析 课程预览功能将使用cms系统提供的页面预览功能,业务流程如下: 1.用户进入课程管理页面,点击课程预览,请求到课程管理服务 2.课程管理服务远程调用cms添加页 ...
- 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_14-认证接口开发-需求分析
4 认证接口开发 4.1 需求分析 用户登录的流程图如下: 执行流程: 1.用户登录,请求认证服务 2.认证服务认证通过,生成jwt令牌,将jwt令牌及相关信息写入Redis,并且将身份令牌写入coo ...
- 移动APP的开发需求分析
一.项目概况 项目名称为上海地铁游.本项目是以上海地铁为线索,开发的一个移动APP.主要目的是帮助用户实现根据当前位置选择最方便的地铁旅游点和旅游推荐,方便出行,让更多人可以借助地铁的便利去认识和体验 ...
- 基于web的网上书城系统开发-----需求分析
网上书店管理系统主要针对中小型书店,图书管理员将图书信息整理归类发布到网上.,用户登录该网站后进行浏览图书信息.购买等活动. 前台客户输入的数据交给后台数据库处理并及时反馈给双方.客户和管理者拥有相应 ...
- 2013(1)需求工程, 需求开发, 需求分析, 面向对象需求分析, UML,需求建模
案例一 某软件公司拟为物流企业开发一套库存管理系统,该系统的部分需求陈述如下: (1) 库存管理系统主要包括货物入库管理.货物出库管理.仓库管理.统计报表和系统管理等功能. (2) 库存管理系统的用户 ...
- django在线教育网站开发---需求分析
开发目录: django app设计 user model.py 编写 courses models.py 编写 -Course 课程基本信息 -Lesson 章节信息 -Video -视频 -Cou ...
随机推荐
- FileOutputStream写出数据实现换行和追加写入
FileOutputStream fos = fos = new FileOutputStream(Utils.getData(bizCtx,"strcat(getenv(HWORKDIR) ...
- Linux查找含有某字符串的文本文件
转自:http://www.cnblogs.com/wangkongming/p/4476933.html 如果你想在当前目录下 查找"hello,world!"字符串,可以这样 ...
- ultraedit 查看文件
转自:https://wenda.so.com/q/1481655902726192 1 UltraEdit在打开文件的时候,会对文件类型进行检查.如果是二进制文件,会自动转为16进制显示模式.如下图 ...
- union遇上ntext数据类型
http://www.myhack58.com/Article/html/3/7/2011/31392.htm
- 20145302张薇《Java程序设计》第三周学习总结
20145302张薇<Java程序设计>第三周学习总结 教材学习内容总结 第四章 定义类 一个原始码中有多少类就会有多少.class文档. 标准类 使用java.util.scanner让 ...
- Helloworld.JaVa 第一次编程
package Jc; class Jc1st { public static void main(String[] args) { System.out.println("Hello Wo ...
- linux消息队列应用编程
消息队列: 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个消息的 ...
- JAVA基础补漏--List
Arraylist 通过对ArrayList的源码的查看,他的底层实现是对数组进行数据的操作,所以他的数据特点同数组. 查询快,因为他的内存区域为一个整块,可直接根据索引进行查询. 增删慢,因为每次增 ...
- java和groovy的混用
java在语言的动态性方便不是很灵活,如果你想快速增加或改变一些方法,那么只能通过反射机制,并且参数传递的格式很严格. 相比之下,基于groovy可以快速写出一些自定义方法,并能和java很好结合,类 ...
- [PyTorch]PyTorch中反卷积的用法
文章来源:https://www.jianshu.com/p/01577e86e506 pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下: class torch.nn.Conv2d ...