• CMDB简介


    为什么有CMDB


    为了有效地管理和改进您的IT服务交付,您需要确切地知道在您的IT环境中使用了什么,以及它如何与当前准确的配置数据一起使用。

    通过当前服务的配置管理数据库或CMDB很容易理解您的组织IT环境,最新的CMDB将极大地提高您交付服务的能力。一些研究统计通过CMDB实现的纠正错误使得错误减少了40%。想象一下,恢复那些不协调的努力,并将它们导向更具战略意义的目标。CMDB的好处是由坚实的配置管理能力支持的,这些好处是深远的,包括服务管理、资产管理、操作管理、信息安全、云操作和遵从性

    CMDB主要是一个数据存储库,用于存储描述配置项的信息以及一些资产相关信息。每个CI都有一些信息,这些信息定义了它所表示的属性,以及它与其他支持您所交付的服务的配置项或者CI之间的关系,以及一些资产信息。CI是唯一标识的组件,用于处理交付服务中有变化的一些项目(change request)。CI可以是物理实体(如服务器),也可以表示操作结构(如服务器集群)。CI也可以是逻辑上的东西,比如一个应用程序,CMDB也包含Cis之间的关系。理解每个CI如何与其他CIs集成是理解、管理和报告组织提供的服务的基础

    现在我们已经对CMDB有了基本的了解,让我们来看看一些场景,这些场景将使我们更好地了解它在您的实例中是如何工作的;这里有一个客户报告说电子邮件被关闭了。客户首先打电话给支持部门报告问题,然后在进行了一些故障排除之后创建一个事件。支持人员确定其中一个客户的电子邮件服务器宕机。看起来宕机的电子邮件服务器需要重新启动,这样才能创建更改请求,从而重新启动电子邮件服务器,验证电子邮件问题已解决,并关闭事件。

    在这里,我们可以确定几个配置项,因为它们与这个场景中的CMDB相关。首先,我们有一个服务CI,即客户使用的电子邮件服务。我们还有CI应用程序,也就是电子邮件应用程序。接下来,我们可以识别电子邮件服务器本身,这是一个硬件服务器CI,最后,创建的更改包含一个CI字段,所以在这种情况下,更改记录引用硬件服务器CI

    让我们来看一个类似的场景,该场景关注如何自动处理警报,就像前面的场景中电子邮件服务器宕机一样。在本例中,事件管理应用程序创建一个与电子邮件服务器绑定的事件记录。审核时发送给支持部门的事件确定需要重新启动服务器,然后工作流编排执行一系列操作来恢复电子邮件服务。在本例中,业务流程重新启动电子邮件服务器。经过验证的更改再次成功完成。然后客户确认在事件结束之前问题已经解决。在这个场景中,我们再次将电子邮件服务器视为硬件服务器CI,事件管理创建一个警报,该警报生成与产生事件的CI相关的事件记录。事件记录针对表单上的同一CI进行更改,业务流程执行一系列操作来恢复电子邮件服务。

    CMDB是您获得对基础设施和服务的全面可见性能力中的一个重要组件。这将导致你对环境的更多控制,让你有能力做出更明智的决定。

    公司需求

    • 自动装机
    • 配置管理
    • 监控
    • 堡垒机

    传统上是通过excel表维护资产信息, 通过samba服务建立共享文件夹, 在这样的一个文件夹里放着一堆资产相关的excel表格, excel表格记录了有多少台服务器, 服务器的主机名, 服务器的主板, 内存, CPU, 操作系统等信息

    资产变更时候需要手动更新excel表格

    查看变更记录时候, 查看excel表格很费劲

    监控某台服务器, 需要从excel表格里面拿数据

    综上繁琐的操作, 就有了CMDB(资产管理数据库)这套解决方案


    什么是CMDB


    CMDB主要是给上层应用提供数据


    链接

    https://www.csdn.net/article/a/2016-01-25/15834593

    https://www.cnblogs.com/igaofen/archive/2010/07/15/1218448.html

    http://blog.uinnova.cn/articles/2015/04/23/1429791021932


    CMDB里都存些什么

    • 机器设备: 物理机, 虚拟机, 容器, 网络设备

    • 业务线

      机器都是给业务线用的, 业务线可以理解为机器上跑的服务

    • 配置


    zabbix 监控: 提供数据给监控

    可视化: 监控数据可视化, 方便排查问题

    代码上线: 代码上线到哪台服务器, 上线到服务器的哪个目录


    服务器管理

    物理服务器/虚拟化/云(aws, 阿里云, 青云)/容器

    • 服务器信息自动上报
    • 服务器列表分页显示
    • 多条件分页搜索

    SLA: https://blog.csdn.net/weixin_37600187/article/details/82848489

    CMDB的架构方案


    agent方案

    1. 脚本放在每一台服务器上 ---- agent
    2. 通过定时任务启动脚本(crontab)
    3. 执行linux的命令, 对命令的结果进行解析
    4. 通过requests模块发送资产信息到api
    5. api 接收数据并保存到数据库
    


    api

    from django.shortcuts import render, HttpResponse
    from django.http import JsonResponse
    
    # Create your views here.
    
    
    def api(request):
        if request.method == 'POST':
            return JsonResponse({'status': 200, 'msg': '接收到了'}, json_dumps_params={'ensure_ascii': False})
        else:
            return HttpResponse('未收到数据')
    

    client

    import subprocess
    import requests
    
    
    v1 = subprocess.getoutput('ip a')
    v1 = v1[280:296]
    print(v1)
    
    v2 = subprocess.getoutput('ls /Users/cjw')
    v2 = v2[19:30]
    print(v2)
    
    url = 'http://127.0.0.1:8000/api/'
    response = requests.post(url=url, data={'k1': v1, 'k2': v2})
    print(response.text)
    

    ssh类方案(中控机)

    1. 脚本放在中控机上
    2. 通过定时任务启动脚本(crontab) ===>>> 脚本思路主要通过ssh(paramiko模块)远程连接服务器执行命令拿到结果
    3. api从中控机获得主机列表, 然后循环主机列表, 拿到主机名, 
    3. 中控机上 通过 ssh远程连接上每一条需要收集数据的服务器, 执行linux命令, 对命令的结果进行解析
    4. 中控机 通过requests模块发送资产信息到api
    5. api 接收数据保存到数据库
    


    client

    import paramiko
    
    # 创建ssh对象
    ssh = paramiko.SSHClient()
    
    # 允许连接不再known_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 连接服务器
    ssh.connect(hostname='test1', port=22, username='root', password='1')
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ls')
    
    # 获取命令结果
    result = stdout.read().decode('utf-8')
    
    # print(result)
    # print(type(result))
    
    # 关闭连接
    ssh.close()
    
    import json
    
    data = json.dumps(result)
    import requests
    
    ret = requests.post("http://127.0.0.1:8000/test/", data=data)
    print(ret)
    

    api

    from django.shortcuts import HttpResponse
    
    # Create your views here.
    def test(request):
    
        print(request.body)
        return HttpResponse('ok')
    

    salt类方案(rpc)

    1. 脚本放在中控机上
    2. 通过定时任务启动脚本(crontab) ===>>> 脚本思路主要通过salt(salt模块)远程连接服务器执行命令拿到结果
    3. api从中控机获得主机列表, 然后循环主机列表, 拿到主机名, 
    3. 中控机上 通过 salt(rpc)远程连接上每一条需要收集数据的服务器, 执行linux命令, 对命令的结果进行解析
    4. 中控机 通过requests模块发送资产信息到api
    5. api 接收数据保存到数据库
    


    安装saltstack


    安装master
    [root@master ~]# systemctl stop firewalld
    [root@master ~]# setenforce 0
    [root@master ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@master ~]# yum install -y salt-master
    salt-master                          noarch  2015.5.10-2.el7    epel     1.0 M
     PyYAML                               x86_64  3.10-11.el7        base     153 k
     libsodium                            x86_64  1.0.18-1.el7       epel     147 k
     libtomcrypt                          x86_64  1.17-26.el7        extras   224 k
     libtommath                           x86_64  0.42.0-6.el7       extras    36 k
     libxml2-python                       x86_64  2.9.1-6.el7_2.3    base     247 k
     libyaml                              x86_64  0.1.4-11.el7_0     base      55 k
     m2crypto                             x86_64  0.21.1-17.el7      base     429 k
     openpgm                              x86_64  5.2.122-2.el7      epel     171 k
     python-babel                         noarch  0.9.6-8.el7        base     1.4 M
     python-backports                     x86_64  1.0-8.el7          base     5.8 k
     python-backports-ssl_match_hostname  noarch  3.5.0.1-1.el7      base      13 k
     python-chardet                       noarch  2.2.1-3.el7        base     227 k
     python-ipaddress                     noarch  1.0.16-2.el7       base      34 k
     python-jinja2                        noarch  2.7.2-4.el7        base     519 k
     python-kitchen                       noarch  1.1.1-5.el7        base     267 k
     python-markupsafe                    x86_64  0.11-10.el7        base      25 k
     python-requests                      noarch  2.6.0-7.el7_7      updates   95 k
     python-six                           noarch  1.9.0-2.el7        base      29 k
     python-urllib3                       noarch  1.10.2-7.el7       base     103 k
     python2-crypto                       x86_64  2.6.1-16.el7       epel     477 k
     python2-msgpack                      x86_64  0.5.6-5.el7        epel      64 k
     python2-zmq                          x86_64  14.7.0-8.el7       epel     505 k
     salt                                 noarch  2015.5.10-2.el7    epel     4.1 M
     systemd-python                       x86_64  219-67.el7_7.2     updates  137 k
     yum-utils                            noarch  1.1.31-52.el7      base     121 k
     zeromq                               x86_64  4.1.4-6.el7        epel     556 k
     systemd                              x86_64  219-67.el7_7.2     updates  5.1 M
     systemd-libs                         x86_64  219-67.el7_7.2     updates  411 k
     systemd-sysv                         x86_64  219-67.el7_7.2     updates   88 k
    

    安装minion

    [root@client ~]# systemctl stop firewalld
    [root@client ~]# setenforce 0
    [root@client ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@client ~]# yum -y install salt-minion
     salt-minion                          noarch  2015.5.10-2.el7    epel      26 k
     PyYAML                               x86_64  3.10-11.el7        base     153 k
     libsodium                            x86_64  1.0.18-1.el7       epel     147 k
     libtomcrypt                          x86_64  1.17-26.el7        extras   224 k
     libtommath                           x86_64  0.42.0-6.el7       extras    36 k
     libyaml                              x86_64  0.1.4-11.el7_0     base      55 k
     m2crypto                             x86_64  0.21.1-17.el7      base     429 k
     openpgm                              x86_64  5.2.122-2.el7      epel     171 k
     python-babel                         noarch  0.9.6-8.el7        base     1.4 M
     python-backports                     x86_64  1.0-8.el7          base     5.8 k
     python-backports-ssl_match_hostname  noarch  3.5.0.1-1.el7      base      13 k
     python-chardet                       noarch  2.2.1-3.el7        base     227 k
     python-ipaddress                     noarch  1.0.16-2.el7       base      34 k
     python-jinja2                        noarch  2.7.2-4.el7        base     519 k
     python-kitchen                       noarch  1.1.1-5.el7        base     267 k
     python-markupsafe                    x86_64  0.11-10.el7        base      25 k
     python-requests                      noarch  2.6.0-7.el7_7      updates   95 k
     python-urllib3                       noarch  1.10.2-7.el7       base     103 k
     python2-crypto                       x86_64  2.6.1-16.el7       epel     477 k
     python2-msgpack                      x86_64  0.5.6-5.el7        epel      64 k
     python2-zmq                          x86_64  14.7.0-8.el7       epel     505 k
     salt                                 noarch  2015.5.10-2.el7    epel     4.1 M
     yum-utils                            noarch  1.1.31-52.el7      base     121 k
     zeromq                               x86_64  4.1.4-6.el7        epel     556 k
    

    配置master端

    [root@master ~]# hostname -I
    172.16.240.10 
    [root@master ~]# vim /etc/salt/master 
    interface: 172.16.240.10
    

    配置minion端

    [root@client ~]# vim /etc/salt/minion
    master: 172.16.240.10
    id: client
    

    重启master和minion服务

    [root@client ~]# systemctl restart salt-minion
    [root@master ~]# systemctl restart salt-master
    

    在master端配置权限

    [root@master ~]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    client
    Rejected Keys:
    
    [root@master ~]# salt-key -A
    The following keys are going to be accepted:
    Unaccepted Keys:
    client
    Proceed? [n/Y] Y
    Key for minion client accepted.
    

    在master端验证结果

    [root@master ~]# salt-key -L
    Accepted Keys:
    client
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
      
    [root@master ~]# salt '*' test.ping
    client:
        True
        
    [root@master ~]# salt 'client' cmd.run 'ip a'
    client:
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
            link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
            inet 127.0.0.1/8 scope host lo
               valid_lft forever preferred_lft forever
            inet6 ::1/128 scope host 
               valid_lft forever preferred_lft forever
        2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
            link/ether 00:0c:29:ae:2d:04 brd ff:ff:ff:ff:ff:ff
            inet 172.16.240.11/24 brd 172.16.240.255 scope global noprefixroute ens33
               valid_lft forever preferred_lft forever
            inet6 fe80::90b4:e57f:f659:ad3d/64 scope link noprefixroute 
               valid_lft forever preferred_lft forever
    
    

    安装python3环境

    $  yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
    $  yum install -y gcc
    $  wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
    $  cd Python-3.6.8
    $  mkdir /usr/local/python3
    $  ./configure --prefix=/usr/local/python3
    $  make && make install
    Installing collected packages: setuptools, pip
    Successfully installed pip-18.1 setuptools-40.6.2
    
    $  ln -s /usr/local/python3/bin/python3 /usr/bin/python3 #为python3创建软连接
    $  ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3  #为pip3创建软连接
    

    python操作salt

    >>>> 安装salt
    $  pip3 install salt -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    对比

    第一套方案 第二套方案 第三套方案
    优点 速度快 每次新上线服务器, 都需要在新的服务器上部署 不用写python代码
    缺点 不需要部署agent脚本 使用paramiko模块登录服务器的话, 速度比较慢
    适用场景 服务器数量比较多 服务器数量比较少(小于100台) 服务器上已经部署了salt-stack或者计划要使用salt-stack

    CMDB有什么用

    1. 管理所有的服务器资产
    2. 自动获取资产信息
    3. 给其他的平台提供数据
    

    ITIL中, 属于配置管理

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

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

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

    CMDB工具中至少包含这几种关键的功能:整合、调和、同步、映射和可视化。

    • 整合是指能够充分利用来自其他数据源的信息,对CMDB中包含的记录源属性进行存取,将多个数据源合并至一个视图中,生成连同来自CMDB和其他数据源信息在内的报告;
    • 调和能力是指通过对来自每个数据源的匹配字段进行对比,保证CMDB中的记录在多个数据源中没有重复现象,维持CMDB中每个配置项目数据源的完整性;自动调整流程使得初始实施、数据库管理员的手动运作和现场维护支持工作降至最低;
    • 同步指确保CMDB中的信息能够反映联合数据源的更新情况,在联合数据源更新频率的基础上确定CMDB更新日程,按照经过批准的变更来更新 CMDB,找出未被批准的变更;
    • 应用映射与可视化,说明应用间的关系并反应应用和其他组件之间的依存关系,了解变更造成的影响并帮助诊断问题。
  • 相关阅读:
    Variable() placeholder() constant() 的区别
    scrapy-redis+selenium+webdriver 部署到linux上
    scrapy-redis+selenium+webdriver解决动态代理ip和user-agent的问题(全网唯一完整代码解决方案)
    [学习记录]NLTK常见操作二(分句,分词,词干提取)
    [学习记录]NLTK常见操作一(去网页标记,统计词频,去停用词)
    [学习记录]python正则表达式
    [学习记录]MySQL之初级查询语句(select,where)
    [学习记录]pymysql的基本操作
    [学习记录]MySQL临时整理
    [学习记录]面对wxpython的长跑(100米:wxpython安装,相关文件,wx.App,wx.Frame)
  • 原文地址:https://www.cnblogs.com/cjwnb/p/10699158.html
Copyright © 2020-2023  润新知