Python开发【Django】:CMDB基础

那是段忧伤的光阴!经济危害席卷了全数行业。经济放缓导致了财政收入的下降,以及以往直接热论的没落。裁员和延迟购买销售都早已开始了。为了在走低时代生存下来,网络大方们必须注明他们我的工作价值以及在作业可以经受的限制内工作。

ITIL实践解读:端到端APM应用品质的管理观(1)

标题和事件管理是 APM 的七个核心 ITIL新闻技术基础架构库,简称
ITIL)流程。事件管理Incident Management)是当IT
出现难点的时候解决它们,作为对劳务质量下滑的一种响应。事件管理的对象是过来服务,对事情造成尽大概小的震慑。难题管理Problem
Management)强调识别和排除难题的源于。它通过改动服务和 APM
化解方案,增加了劳务质量革新的定义。

端到端应用质量管理End-to-end Application Performance
Management,简称APM)指的是 一种 IT
服务措施,蕴涵识别、区分优先次序以及缓解影响工作应用的品质和可用性难点。APM
正在变得更其主要,因为终端用户珍惜日益复杂的利用来兑现首要业务交易。应用质量低下将下落生产力,影响客户满足度,并有损
IT 声誉,进而导致花费攀升、收入减少、IT
变得作用低下——那个标题一般比可用性难点更是严重。

价值观的监测化解方案平时不只怕辨别和平搞定决使用
质量难题的来自。事实上,近年来在巅峰用户体验监测、珍重性映射和相关性方面的最新进展,已让
IT
运营经营可以更实用地监测和缓解不满足服务水平的题材。那几个技术支援进步对整个网络、服务器分布式和大型主机)和其他应用层的可视性,借助技术分析因果
关系,从工作的角度分明怎样响应该事先开展。实际上,即便基础架构测量目的仍旧提供首要的故障和容积数据,强调根本也已从基础架构测量目标变成了业务测量
目的。

小编们将小说一种类应用质量管理最佳实践的篇章,从难点和事件管理的见地分析
APM。

本文将第二回顾地叙述 APM 设计、实施和营业的基本要素,将端到端
APM作为贰个流程来进展追究。

一、APM 设计

APM 消除方案平常是当做草根、基础架构监测实施起始的,由IT
机构的某部独立业务部门实施,紧缺一致的靶子。例如,网络团队大概要布局三个开源网络工具,以拿到基础互联网的可视性,而web
服务器团队则大概会从一个主流的服务器厂商那里计划2个服务器监测工具。但是,自上而下地规划一个APM
方案要切合实际得多。使用那种措施,您先考虑结果,然后将它采取于你采取的缓解方案组件。

你怎么着入手早先吧?在 ITIL 的社会风气里,最后支持服务级别协商service level
agreement,简称 SLA)的周转级别目的operational level
target,简称OLT)是一个好的源点;那一个将已经缓解了预想的事浮出现和资金限制,并且应该完成一个高水准的布署。不与
ITIL
相关?您还是可以利用适合你要求的一对最佳实践。从与业务部门探讨、了然事情目的开头,明确APM
预算,使用对利用交付基础架构的明白和它的属性敏感性,并草拟壹个方案。您很大概想把这些作为一个练兵,测试什么恐怕会出错,尽只怕广泛地增添范围;开销和其余的骨子里考虑将便捷专注于这一企划。您当然不会是首先个使用那种方法的人,您可丰富利用与供应商的关联、用户群和提问合营伙伴,来精晓类似尝试只怕会
有的中标和挫折。

公司高层提供的能源帮助和插足对于任何 APM
项目标中标都是关键的,因为那将须求来自三个 IT
部门的积极帮助。更首要的是,那一个机构对于项目的业务价值要有同一的知情,因为她俩逐个都或者见面对新的卖家可视性他们在老板仪表板上的测试目的),对
某个事物失去控制应对难题的新流程),恐怕放任贰个最受欢迎的工具。初始1个微型的
APM 项目,采用贰个战略性的利用,为业务全体者和 IT
机构注明价值,大部分部门将会从中收益。那样二个门类的成功,将可以被三个更宏观、受益更驾驭的消除方案利用。

但是,我们大 多数人并不是从临时拼凑起来设计 APM
化解方案;我们已经持有许多一贯服务于大家的目标的基础架构工具。那么,是怎么样将一系列“结合平台的”platform-aligned)工具转变成
APM
消除方案的吗?即便对此这些题材或然会有好多技巧回答,可是,这里有三个最器重的主旨:

·业务一致性business
alignment)。全新的关键设计目的仍然应该从偏重工作出现初叶。对事情以来,紧要的将是极端用户的体验——那几个可通过品质和可用性进行测量。

·相关性和故障隔离correlation and fault
isolation)。对来源的可视性,是将基础架构提高至
APM、真正了解基础架构测量目的如何影响工作生产力的第1。

很 不难驾驭诸如终端用户体验end-user experience,简称
EUE)和基础架构测量目标等事务相关的测量目标的相关性为什么如此重大。将终端用户体验到的习性难点与基础架构测量目标组成起来,隔离主要的来自,那能让
IT
小组神速准确地专注于难点的源点,同时幸免对不相干的机件接纳行动。通过适当的阈值调整,那为不断工作革新奠定了根基。同样地,通过
EUE
的相关性,以及受影响的用户数量和所在地点、每天交易的次数和工作价值,可以找到标题对业务的震慑。

透过一文山会海基础架构工具 创设 APM
消除方案,会带来集成和相关性方面的挑战;您须求对主要的纯粹供应商single-vendor)消除方案进行评估权衡,因为供应商和定制化的多供应商
multi-vendor)化解方案营造和提交了集成。对于更小部分的安排,定制化的消除方案只怕会更省钱,但是对于较大的实施,可增加性和保安方面的
考虑将会飞快改变价格。

在统筹流程里,保持对终极用户交易响应时间的令人瞩目很关键。那有五个原因。第二,质量分析和难点一蹴而就是
为更好的询问以工作为导向的条件并提议重点理念。就算在观念上,基础架构测量目标是知足事件和难题管理的多少,可是,那一个基础测量目的和它们的阈值驱动警
报在尚未事情相关性的图景下可以变得大致毫无意义。例如,对于3个 2 M
广域网连接来说,75%的利用率终究是好大概坏呢?1个被报告的交易品质难题是由 SAN 里长度为 8
的测量磁盘阵列引起的呢?当使用的属性降级时,这一个零部件级的测量还将总会被良好?其次,从对事情影响的角度来说,IT
可以先行对事件作出响应是有价值的,它代表了向工作一致性迈出的紧要性一步。

如出一辙非常紧要的是,与技能和 IT 资源的工本有关的陈设性范围。许多 APM
项目不成事,是因为不够关爱和协助,因为不可以维持这一消除方案、不能适应基础架构的更动并不可以定义基于实际世界申报的流程。

)
问题和事件管理是 APM 的五个主题 ITIL音讯技术基础架构库,简称
ITIL)流程。事件管理Incident…

CMDB

365bet,  CMDB –Configuration Management
Database
配置管理数据库, CMDB存储与治本集团IT架构中设备的各类配置音讯,它与有着服务支撑和劳动付出流程都紧凑相联,协助这一个流程的运转、发挥配置音信的价值,同时借助于有关流程保险数据的准头

在实际的花色中,CMDB日常被认为是营造其余ITIL流程的基础而优先考虑,ITIL项目标输赢与是不是成功建立CMDB有优秀大的涉嫌。

十分之七~五分之四的IT相关问题与环境的更动有着直接的涉嫌。实施变更管理的难处和根本并不是工具,而是流程。即经过3个自动化的、可重复的流程管理变更,使得当变更发生的时候,有三个准绳的流程去实施,能够预测到那一个改变对整个系统管理爆发的熏陶,并对这几个影响举办评估和操纵。而更改管理流程自动化的贯彻主要就是CMDB。

CMDB工具中最少含有那二种重点的功用:整合、调和、同步、映射和可视化。

构成是指可以丰裕利用来自其余数据源的新闻,对CMDB中带有的笔录源属性举办存取,将多少个数据源合并至一个视图中,生成连同来自CMDB和其余数据源音讯在内的报告;

调解能力是指通过对来自逐个数据源的合作字段展开自查自纠,保险CMDB中的记录在四个数据源中没有重新现象,维持CMDB中各类配置项目数据源的完整性;自动调整流程使得起首实施、数据库管理员的手动运作和现场保安帮助工作降至最低;

一路指确保CMDB中的新闻可见反映联合数据源的换代意况,在一道数据源更新频率的底蕴上明确CMDB更新日程,依照经过批准的更动来更新
CMDB,找出未被准许的变动;

动用映射与可视化,表达应用间的涉嫌并反馈应用和其余零件之间的依存关系,通晓变更造成的熏陶并支持诊断难题。

当下CMDB资产管理的落成有如下格局:

1、Paramiko类

据悉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=22, username='wupeiqi', password='123')

# 执行命令
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中默认自带了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 = 10
server = master.puppet.com
certname = c1.puppet.com

如上述设置之后,每次执行client和master同步,就会在master服务器的 【/var/lib/puppet/reports】路径下创建一个文件,主动执行:puppet agent  --test

365bet 1365bet 2

在 /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示例

365bet 3365bet 4

$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 / (1024**3), # unit GB
         'slot' => slot,
         'model' => model,
         'sn' => sn,
         'manufactory' => manufactory,
       })

      end
    end

    JSON.dump(ram_slot)

  end
end

内存音信

4、Agent

根据shell命令完结

365bet 5  

 

对此Agent的本子的完结思路:

  • Agent采集硬件开支
  • API提供有关处理的接口
  • 管制平台为用户提供可视化操作

 

 

浅谈ITIL

  TIL即IT基础架构库(Information Technology Infrastructure Library,
ITIL,音信技术基础架构库)由United Kingdom政坛部门CCTA(Central Computing and
Telecommunications Agency)在20世纪80年份末制订,现由英国商务部OGC(Office
of Government
Commerce)负责管理,紧要适用于IT服务管理(ITSM)。ITIL为铺面的IT服务管理举办提供了三个成立、严俊、可量化的规范和专业。

一 、事件管理(Incident Management)

事故管理负担记录、归类和安排专家处总管故并监控整个处理进程直至事故赢得缓解和平息。事故管理的目标是在尽量最小地震慑客户和用户业务的事态下使IT系统苏醒到服务级别协商所定义的劳动级别。

对象是:在不影响工作的气象下,尽或然急忙的死灰复燃服务,从而确保最佳的成效和劳务的可持续性。事件管理流程的成立包含事件分类,显然事件的优先级和确立事件的晋级机制。

贰 、难题管理(Problem Management)

难题管理是指通过调研和剖析IT基础架构的薄弱环节、查明事故发生的暧昧原因,并创造消除事故的方案和防止事故再度暴发的格局,将出于难题和事故对作业发生的负面影响减小到低于的劳务管理流程。与事故管理强调事故恢复生机的快慢不一样,问题管理强调的是找出事故发生的来源,从而制订适当的化解方案或预防其再度发生的预防措施。

目的是:调查基础设备和具有可用信息,包含事件数据库,来规定引起轩然大波发生的真的潜在原因,一起提供的劳务中恐怕存在的故障。

③ 、配置管理(Configuration Management)

布局管理是可辨和肯定系统的布署项,记录和告诉安排项情况和改变请求,检验配置项的科学和完整性等活动组成的进度,其目的是提供IT基础架构的逻辑模型,协助任何服务管理流程越发是改变管理和公布管理的运维。

对象是:定义和控击败务与功底设备的预制构件,并保证标准的安排音讯。

肆 、变更管理(Change Management)

变动管理是指为在最短的间歇时间内做到基础架构或劳务的任一方面的更改而对其举行支配的劳动管理流程。变更管理的目标是确保在改动实施进度中采取标准的章程和步骤,尽快地实施变更,以将由变更所导致的政工暂停对作业的震慑减小到低于。

对象是:以受控的办法,确保全数变更拿到评估、批准、实施和评审。

⑤ 、发表管理(Release Management)

 公布管理是指对通过测试后导入实际使用的剧增或改动后的布局项举行分发和宣传的保管流程。公布管理以前又称为软件控制与分发。

目的是:在实际运作条件的颁发中,交付、分发并跟踪一个或多少个转移。

 

实质上工作情况中自动化工具举例:

365bet 6

 

 

网络在小卖部IT中有着特殊的职位,因为它是将有所的基础架构组件整合在同步的粘合剂。与大型船运集团的货运主管区其他是,互连网大方看来的是业务数据是哪些在铺子内部传输的。典型地,网络大方关心的是单个组件,诸如路由器、T1和VoIP数据包,同时他们很少关切这个IT财富是何等影响工作进度和作业的。

浅谈ITIL

  TIL即IT基础架构库(Information
Technology Infrastructure Library,
ITIL,音讯技术基础架构库)由U.K.政党部门CCTA(Central Computing and
Telecommunications Agency)在20世纪80年份末制订,现由英国商务部OGC(Office
of Government
Commerce)负责管理,主要适用于IT服务管理(ITSM)。ITIL为商家的IT服务管理实践提供了2个理所当然、严厉、可量化的正儿八经和正式。

壹 、事件管理(Incident
Management)

事故管理负担记录、归类和配置专家处总管故并监督整个处理进程直至事故赢得缓解和甘休。事故管理的目标是在尽或许最小地震慑客户和用户业务的景观下使IT系统恢复生机到劳务级别协商所定义的劳务级别。

目的是:在不影响工作的情景下,尽大概火速的过来服务,从而保障最佳的频率和劳动的可持续性。事件管理流程的建立包含事件分类,显然事件的优先级和树立事件的提拔体制。

二 、难点管理(Problem
Management)

题材管理是指通过调研和分析IT基础架构的薄弱环节、查明事故时有暴发的神秘原因,并创造化解事故的方案和防护事故再一次暴发的措施,将出于难点和事故对工作暴发的负面影响减小到低于的劳动管理流程。与事故管理强调事故苏醒的快慢分化,难点管理强调的是找出事故发生的来源于,从而制订适合的化解方案或预防其再度发生的预防措施。

对象是:调查基础设备和装有可用消息,包罗事件数据库,来规定引起轩然大波时有暴发的确实潜在原因,一起提供的劳动中恐怕存在的故障。

三 、配置管理(Configuration
Management)

布署管理是识别和确认系统的布局项,记录和告知陈设项情状和改变请求,检验配置项的不易和完整性等移动组成的进程,其目标是提供IT基础架构的逻辑模型,襄助任何服务管理流程尤其是改变管理和公告管理的运维。

对象是:定义和操纵服务与功底设备的预制构件,并保持标准的布置消息。

④ 、变更管理(Change
Management)

改变管理是指为在最短的中止时间内成功基础架构或劳务的任一方面的变动而对其展开控制的服务管理流程。变更管理的靶子是保障在变更实施进度中动用正规的格局和步子,尽快地推行变更,以将由变更所导致的政工暂停对工作的影响减小到最低。

对象是:以受控的章程,确保全数改变得到评估、批准、实施和评审。

五 、发表管理(Release
Management)

 公布管理是指对通过测试后导入实际运用的骤增或改动后的配备项进行分发和宣扬的保管流程。发布管理在此以前又叫做软件控制与分发。

对象是:在骨子里运作条件的发布中,交付、分发并跟踪三个或七个改变。

 

实则工作境况中自动化工具举例:

365bet 7

 

 

CMDB

  CMDB –Configuration Management Database
配置管理数据库, CMDB存储与管理公司IT架构中设备的各样配置音讯,它与持有服务帮忙和服务交由流程都紧凑相联,扶助那些流程的运维、发挥配置新闻的价值,同时凭借于有关流程保证数据的准确性

在其实的品种中,CMDB平常被认为是创设此外ITIL流程的基本功而优先考虑,ITIL项目标成败与是还是不是中标建立CMDB有格外大的涉嫌。

十分之七~十分八的IT相关难点与环境的变动有着直接的涉嫌。实施变更管理的困难和首要性并不是工具,而是流程。即经过二个自动化的、可重复的流水线管理变更,使得当变更暴发的时候,有一个条件的流水线去执行,可以预测到这些改变对全部系统管理发生的影响,并对那么些潜移默化进行评估和操纵。而更改管理流程自动化的兑现紧要就是CMDB。
CMDB工具中最少含有那三种关键的作用:整合、调和、同步、映射和可视化。

结缘是指能够丰富利用来自其余数据源的新闻,对CMDB中富含的笔录源属性举办存取,将多少个数据源合并至1个视图中,生成连同来自CMDB和任何数据源新闻在内的告诉;

调解能力是指通过对来自各种数据源的合作字段进展对照,保证CMDB中的记录在五个数据源中没有重新现象,维持CMDB中种种配置项目数据源的完整性;自动调整流程使得伊始实施、数据库管理员的手动运作和实地敬重扶助工作降至最低;

一道指确保CMDB中的音信可以反映联合数据源的换代处境,在一齐数据源更新频率的根基上显然CMDB更新日程,依据经过批准的改观来更新
CMDB,找出未被认同的改变;

运用映射与可视化,表达应用间的关联并反馈应用和任何零件之间的依存关系,明白变更造成的影响并拉扯诊断难题。

近期CMDB资产管理的落到实处有如下格局:

1、Paramiko类

依照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=22, username='wupeiqi', password='123')

# 执行命令
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中默认自带了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 = 10
server = master.puppet.com
certname = c1.puppet.com

如上述设置之后,每次执行client和master同步,就会在master服务器的 【/var/lib/puppet/reports】路径下创建一个文件,主动执行:puppet agent  --test

365bet 8

在 /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示例
365bet 9

$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 / (1024**3), # unit GB
         'slot' => slot,
         'model' => model,
         'sn' => sn,
         'manufactory' => manufactory,
       })

      end
    end

    JSON.dump(ram_slot)

  end
end

内存新闻

4、Agent

按照shell命令达成

365bet 10  

 

对于Agent的版本的贯彻思路:

  • Agent采集硬件花费
  • API提供相关处理的接口
  • 管理平台为用户提供可视化操作

 

 

浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure
Library, ITIL,消息技术基础架构库)由United Kingdom政府…

  1. 融入ITIL国际化IT管理思维创设实用主义ITSM
  2. 解析ITIL理念广通走自主立异之路

Python开发【Django】:CMDB开发,djangocmdb

现阶段,半数以上高档主管都在分析差距工作区域所受到的经济影响。一大半掌管大概正在考虑出售业务单位或许外包功用和劳务以便裁减开销。不幸的是,大多数的体量规划协会都不是从为作业决策提供实质性价值的角度展开考虑的。Forrester和Gartner的商量显得,有规范的IT容积管理规划的铺面不到3/6。而且这一个规划的多数也同情于考虑单个IT组件,因而不能将用法归于三个一定的工作经过依旧功用。

◆服务级容积规划依照预先定义的IT服务来集合组件用途。

发表评论

电子邮件地址不会被公开。 必填项已用*标注