www.hj8828.com 6

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

这是段难熬的日子!经济危机席卷了所有行业。经济放缓导致了财政收入的降低,以及现在一直热论的衰退。裁员和延迟采购都已经开始了。为了在低迷时期生存下来,网络专家们必须证明他们自身的业务价值以及在业务能够接受的范围内工作。

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 设计

www.hj8828.com,APM 解决方案通常是作为草根、基础架构监测实践开始的,由IT
机构的某个独立业务部门实施,缺乏一致的目标。例如,网络团队可能要部署一个开源网络工具,以获得基础网络的可视性,而web
服务器团队则可能会从一个主流的服务器厂商那里部署一个服务器监测工具。然而,自上而下地设计一个
APM
方案要切合实际得多。使用这种方法,您先设想结果,然后将它应用于您选择的解决方案组件。

您如何着手开始呢?在 ITIL 的世界里,最终支持服务级别协议service level
agreement,简称 SLA)的运行级别目标operational level
target,简称OLT)是一个好的起点;这些将已经解决了预期的业务产出和成本限制,并且应该实现一个高水平的设计。不与
ITIL
相关?您仍然能够采用适合您需求的部分最佳实施。从与业务部门讨论、理解业务目标开始,确定
APM
预算,使用对应用交付基础架构的理解和它的性能敏感性,并草拟一个方案。您很可能想把这个作为一个练习,测试什么可能会出错,尽可能广泛地扩展范围;成本
和其它的实际考虑将很快专注于这一设计。您当然不会是第一个采取这种方法的人,您可充分利用与供应商的关系、用户群和咨询合作伙伴,来理解类似尝试可能会
有的成功和失败。

公司高层提供的资源支持和参与对于任何 APM
项目的成功都是至关重要的,因为这将要求来自多个 IT
部门的积极支持。更重要的是,这些部门对于项目的业务价值要有一致的理解,因为他们每个都可能会面对新的企业可视性他们在高管仪表板上的测试指标),对
某些东西失去控制应对问题的新流程),或者放弃一个最受欢迎的工具。开始一个小型的
APM 项目,选择一个战略性的应用,为业务所有者和 IT
机构阐明价值,大多数机构将会从中受益。这样一个项目的成功,将能够被一个更全面、收益更明显的解决方案利用。

然而,我们大 多数人并不是从临时拼凑开始设计 APM
解决方案;我们已经拥有许多一直服务于我们的目的的基础架构工具。那么,是什么将一系列“结合平台的”platform-aligned)工具转变成
APM
解决方案的呢?尽管对于这个问题可能会有许多技术回答,但是,这里有两个最重要的主题:

·业务一致性business
alignment)。全新的主要设计目标仍然应该从注重业务产出开始。对业务来说,重要的将是终端用户的体验——这个可通过性能和可用性进行测量。

·相关性和故障隔离correlation and fault
isolation)。对根源的可视性,是将基础架构提升至
APM、真正理解基础架构测量指标如何影响业务生产力的关键。

很 容易明白诸如终端用户体验end-user experience,简称
EUE)和基础架构测量指标等业务相关的测量指标的相关性为何如此重要。将终端用户体验到的性能问题与基础架构测量指标结合起来,隔离主要的根源,这能让
IT
小组快速准确地专注于问题的起源,同时避免对不相关的组件采取行动。通过适当的阈值调整,这为持续业务改进奠定了基础。同样地,通过
EUE
的相关性,以及受影响的用户数量和所在位置、每天交易的次数和业务价值,可以找到问题对业务的影响。

通过一系列基础架构工具 构建 APM
解决方案,会带来集成和相关性方面的挑战;您需要对主要的单一供应商single-vendor)解决方案进行评估权衡,因为供应商和定制化的多供应商
multi-vendor)解决方案构建和交付了集成。对于更小一些的部署,定制化的解决方案可能会更省钱,但是对于较大的实施,可扩展性和维护方面的
考虑将会迅速改变价格。

在设计流程里,保持对终端用户交易响应时间的专注很重要。这有两个原因。第一,性能分析和问题解决是
为更好的了解以业务为导向的环境并提出重要意见。尽管在传统上,基础架构测量指标是满足事件和问题管理的数据,但是,这些基础测量指标和它们的阈值驱动警
报在没有业务相关性的情况下能够变得几乎毫无意义。例如,对于一个 2 M
广域网连接来说,75%
的利用率究竟是好还是坏呢?一个被报告的交易性能问题是由 SAN 里长度为 8
的测量磁盘阵列引起的吗?当应用的性能降级时,这些组件级的测量还将总会被突出?其次,从对业务影响的角度来说,IT
能够优先对事件作出响应是有价值的,它代表了向业务一致性迈出的重要一步。

同样重要的是,与技术和 IT 资源的成本相关的设计限制。许多 APM
项目不成功,是因为缺少关注和支持,因为无法维持这一解决方案、无法适应基础架构的变化并无法定义基于真实世界反馈的流程。

)
问题和事件管理是 APM 的两个核心 ITIL信息技术基础架构库,简称
ITIL)流程。事件管理Incident…

浅谈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)

 发布管理是指对经过测试后导入实际应用的新增或修改后的配置项进行分发和宣传的管理流程。发布管理以前又称为软件控制与分发。

目标是:在实际运行环境的发布中,交付、分发并跟踪一个或多个变更。

 

实际工作场景中自动化工具举例:

www.hj8828.com 1

 

 

那么,网络专家将如何应用他们的知识以及经验来帮助他们的业务渡过难关呢?实施信息技术基础架构库ITIL)最优方法是帮助我们的业务经受住难关的考验的最好方法之一。全面采用ITIL将花费大量的时间和人力。因此,我们并不需要全面地部署ITIL。网络团队可以选择性地利用ITIL最优方法来为业务提供可测量价值,这样也有助于网络团队在这段难熬的日子中取得突破。

CMDB

  CMDB –Configuration Management
Database
配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性

在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。

70%~80%的IT相关问题与环境的变更有着直接的关系。实施变更管理的难点和重点并不是工具,而是流程。即通过一个自动化的、可重复的流程管理变更,使得当变更发生的时候,有一个标准化的流程去执行,能够预测到这个变更对整个系统管理产生的影响,并对这些影响进行评估和控制。而变更管理流程自动化的实现关键就是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

www.hj8828.com 2www.hj8828.com 3

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

www.hj8828.com 4www.hj8828.com 5

$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命令实现

www.hj8828.com 6  

 

对于Agent的版本的实现思路:

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

 

 

本章是这一系列的第一部分,我们将探讨网络专家们应用ITIL最优方法来帮助业务伙伴对降低成本作出更多明智的决策并与降低成本相协调的方法。在这一系列中,我们将探讨关于理解业务过程、调整业务过程报告、改善财务的方法,同时与业务单位建立良好的工作关系。

理解业务过程

目前,大多数高级主管都在分析不同业务区域所受到的经济影响。大多数主管可能正在考虑出售业务单位或者外包功能和服务以便减少开支。不幸的是,大多数的容量规划组织都不是从为业务决策提供实质性价值的角度进行考虑的。Forrester和Gartner的研究显示,有正式的IT容量管理规划的企业不到一半。而且这些规划的大多数也倾向于考虑单个IT组件,因此不能将用法归于一个特定的业务过程或者功能。

在19世纪80年代之初,ITIL已经考虑到容量管理的价值。三种版本都考虑到了不同类型的容量管理:组件、服务和业务。