CMDB运维开发项目

 ITIL:Information Technology Infrastructure Library 信息技术基础架构库,主要适用于IT服务管理(ITSM)。ITIL为企业的IT服务管理实践提供了一个客观、严谨、可量化的标准和规范。

CMDB(Configuration Management Database 配置管理数据库)

存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。
70%~80%的IT相关问题与环境的变更有着直接的关系。实施变更管理的难点和重点并不是工具,而是流程。即通过一个自动化的、可重复的流程管理变更,使得当变更发生的时候,有一个标准化的流程去执行,能够预测到这个变更对整个系统管理产生的影响,并对这些影响进行评估和控制。而变更管理流程自动化的实现关键就是CMDB。

  • 整合是指能够充分利用来自其他数据源的信息,对CMDB中包含的记录源属性进行存取,将多个数据源合并至一个视图中,生成连同来自CMDB和其他数据源信息在内的报告
  • 调和能力是指通过对来自每个数据源的匹配字段进行对比,保证CMDB中的记录在多个数据源中没有重复现象,维持CMDB中每个配置项目数据源的完整性;自动调整流程使得初始实施、数据库管理员的手动运作和现场维护支持工作降至最低
  • 同步指确保CMDB中的信息能够反映联合数据源的更新情况,在联合数据源更新频率的基础上确定CMDB更新日程,按照经过批准的变更来更新 CMDB,找出未被批准的变更
  • 应用映射与可视化,应用间的关系以及应用和其他组件之间的依存关系,变更造成的影响等
  • 配置项:纳入配置管理范畴的工作成果都是配置项(CI)
  • 配置项名称:配置项根据生成规则自动生成的名称信息
  • 设备名称:该设备的hostname
  • 设备序列号:设备的出厂S/N号码
  • 主管人员:设备/系统主管人员
  • 维护人员:设备/系统维护人员
  • 系统名称:该设备/应用/系统的标准名称(地市的系统名称则添加前缀地市名称,如:广州统一信息平台)
  • 区域:设备/系统/软件所使用公司划分,如:省公司、广州、深圳等
  • 网元状态:工程、退网、退网待删除、现网(不承载业务)、现网(承载业务)
  • 设备类型:使用设备的类型,即交换机、路由器、防火墙、小型机等
  • 品牌:设备的品牌,一般国外的厂商用英文大标识,国内的厂商用中文标识;虚拟机的品牌为虚拟技术实现的品牌,如Vmware等
  • 管理IP:设备的实际管理IP
  • 标准名:统一标准命名规范化;地市_业务系统_设备类型_编号 。如:省公司_综合网管系统_防火墙_001

目前CMDB资产管理的实现有如下方式:
1.SSH类

基于CMDB中控机和SSH对远程服务器执行命令实现

 1 # 基于paramiko模块, pip3 install paramiko
 2 import requests
 3 import paramiko
 4 
 5 # ################## 获取今日未采集主机名 ##################
 6 #result = requests.get('http://www.127.0.0.1:8000/assets.html')
 7 # result = ['c1.com','c2.com']
 8 
 9 
10 # ################## 通过paramiko连接远程服务器,执行命令 ##################
11 # 创建SSH对象
12 ssh = paramiko.SSHClient()
13 # 允许连接不在know_hosts文件中的主机
14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
15 # 连接服务器
16 ssh.connect(hostname='192.168.179.130', port=22, username='root', password='')
17 
18 # 执行命令
19 stdin, stdout, stderr = ssh.exec_command('ifconfig')
20 
21 # 获取命令结果
22 result = stdout.read()
23 
24 # 关闭连接
25 ssh.close()
26 print(result)
27 
28 # data_dict = {result}
29 
30 # ##################  发送数据 ##################
31 # requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)

去api取今天未采集资产的主机列表,把主机名拿过来,远程连接服务器,执行命令,把结果拿回来,给中控机再汇报给api--负责入库。

优点是无agent,缺点是慢

2.Agent 基于shell命令实现

import subprocess
import requests
# pip3 install requests

# ################## 采集数据 ##################
result = subprocess.getoutput('ipconfig')
# result正则处理获取想要数据

# 整理资产信息
data_dict ={
    'nic': {},
    'disk':{},
    'mem':{}
}

##################  发送数据 ##################
requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)

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

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

3.saltstack

# 1. 安装saltstack
#       rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub
#

        Master: yum install salt-master
       Master准备:
            a. 配置文件,监听本机IP
                vim /etc/salt/master
                interface: 本机IP地址
            b. 启动master
                /etc/init.d/salt-master start


        Slave:  yum install salt-minion
        Slave准备:
            a. 配置文件,连接那个master
                vim /etc/salt/minion 16行
                master: 远程master地址
            b. 启动slave
                /etc/init.d/salt-minion start

2. 创建关系
    查看
    Master:salt-key -L
        Accepted Keys:
        Denied Keys:
        Unaccepted Keys:
            c1.com
            c2.com
            c3.com
        Rejected Keys:
    接受
    Master:salt-key -a c1.com
        Accepted Keys:
            c1.com
            c2.com
        Denied Keys:
        Unaccepted Keys:
            c3.com
        Rejected Keys:

3. 执行命令
    master:
        salt 'c1.com' cmd.run  'ifconfig'
    import salt.client
    local = salt.client.LocalClient()
    result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

    vim /usr/bin/salt

import requests
################## 获取今日未采集主机名 ##################
result = requests.get('http://www.127.0.0.1:8000/assets.html')
result = ['c1.com','c2.com']


################## 远程服务器执行命令 ##################
import subprocess
result = subprocess.getoutput("salt 'c1.com' cmd.run  'ifconfig'")

import salt.client
local = salt.client.LocalClient()
result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

##################  发送数据 ##################
requests.post('http://www.127.0.0.1:8000/assets.html',data=data_dict)

4.Puppet
基于Puppet的factor和report功能实现

优点是自动汇报,缺点是使用ruby语言

 
原文地址:https://www.cnblogs.com/ningxin18/p/7881216.html