首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

CMDB项目开发

2023-11-12 来源:花图问答

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

在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。70%~80%的IT相关问题与环境的变更有着直接的关系。实施变更管理的难点和重点并不是工具,而是流程。即通过一个自动化的、可重复的流程管理变更,使得当变更发生的时候,有一个标准化的流程去执行,能够预测到这个变更对整个系统管理产生的影响,并对这些影响进行评估和控制。而变更管理流程自动化的实现关键就是CMDB。CMDB工具中至少包含这几种关键的功能:整合、调和、同步、映射和可视化。
  • 整合是指能够充分利用来自其他数据源的信息,对CMDB中包含的记录源属性进行存取,将多个数据源合并至一个视图中,生成连同来自CMDB和其他数据源信息在内的报告;
  • 调和能力是指通过对来自每个数据源的匹配字段进行对比,保证CMDB中的记录在多个数据源中没有重复现象,维持CMDB中每个配置项目数据源的完整性;自动调整流程使得初始实施、数据库管理员的手动运作和现场维护支持工作降至最低;
  • 同步指确保CMDB中的信息能够反映联合数据源的更新情况,在联合数据源更新频率的基础上确定CMDB更新日程,按照经过批准的变更来更新 CMDB,找出未被批准的变更;
  • 应用映射与可视化,说明应用间的关系并反应应用和其他组件之间的依存关系,了解变更造成的影响并帮助诊断问题。
  • cmdb属于运维自动化项目

    目的:减少人工干预,降低人员成本

    cmdb包括两部分

    -资产管理

    -操作管理

    资产管理的实现

    WHY搭建cmdb资产管理

    搭建cmdb是因为最终是要搭建自动化平台,包括装机、监控、自动安装软件、部署等全部自动化的执行,而想要搭建自动化的平台的基础是要有资产的管理,因为上面的操作都是在资产的基础上进行的操作,所以搭建平台的首要目的是要对资产进行管控起来,所以我们需要有一个资产管理。

     

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

    1. Agent基于shell命令实现           # agent形式# 1.采集资产# 2.将资产数据发送到API(POST)

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

    2. Agent采集硬件资产
    3. API提供相关处理的接口
    4. 管理平台为用户提供可视化操作
    5. 技术图片

       

      import subprocessimport 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)

       

    6. Paramiko类基于CMDB中控机和SSH对远程服务器执行命令实现        # SSH形式# 1.获取今日未采集主机列表# 2.采集资产# 3.将资产数据发送到API(POST)
      # 基于paramiko模块, pip3 install paramikoimport requestsimport paramiko# ################## 获取今日未采集主机名 ###################result = requests.get(‘http://www.127.0.0.1:8000/assets.html‘)# result = [‘c1.com‘,‘c2.com‘]# ################## 通过paramiko连接远程服务器,执行命令 ################### 创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(hostname=‘192.168.14.36‘, port=22, username=‘wupeiqi‘, password=‘123‘)# 执行命令# stdin, stdout, stderr = ssh.exec_command(‘df‘)# 获取命令结果# result = stdout.read()# 关闭连接# ssh.close()# print(result)# data_dict = {result}# ################## 发送数据 ################### requests.post(‘http://www.127.0.0.1:8000/assets.html‘,data=data_dict)

       

    7. SaltStack基于SaltStack的master上的pillar以及远程执行命令实现          # Salt形式# 1.获取今日未采集主机列表# 2.采集资产# 3.将资产数据发送到API(POST)
      # 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 master: 远程master地址 b. 启动slave /etc/init.d/salt-minion start2. 创建关系 查看 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‘])"""# ################## 获取今日未采集主机名 ###################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)

       

    开发中遇到的小问题

    在用agent方式连接主机获取数据的时候,一开始获取主机的唯一标识符用的是主板上的sn号(每个电脑的sn号都不同,唯一),但是后来用虚拟机使用时候出现问题,虚拟机上的序列号(sn号)可以相同。

    解决方案:使用主机的主机名,且保证主机名不能修改,并把主机名放在一个文件里面,供采集数据时候获取主机名。

     

    CMDB项目开发

    标签:帮助   policy   数据源   star   blank   ssh   host   初始   配置管理   

    小编还为您整理了以下内容,可能对您也有帮助:

    2020-11-06

       蓝鲸平台日常维护中遇到的问题【摘要】在蓝鲸平台的日常维护过程中,会遇到一些平台异常的问题,这些问题有一些是常见的,例如bkdata进程异常导致监控数据未上报,有一些是特定情况下遇到的,但经过排查可以解决的,希望通过整理之前处理过的排错,对以后遇到类似的问题有帮助,能够迅速排查解决。

    cmdb重启失败【问题描述】重启cmdb所在机器后,发现启动cmdb有报错,出现cmdb_adminserver:ERROR(spawn error) 【排查】查日志发现连接MongoDB失败,使用bk_cmdb用户也无法登陆到MongoDB 【解决方法】在MongoDB里重新对bk_cmdb用户进行授权,授权完之后,再重新启动cmdb1)、重新授权

    # source /data/install/utils.fc

    # mongo -u $MONGODB_USER -p

    $MONGODB_PASS --port $MONGODB_PORT --authenticationDatabase admin

    # show dbs;

    #进入cmdb这个库

    # use cmdb;

    #更新bk_cmdb用户的密码(密码可以从/data/install/.app.token中查找)

    # db.updateUser("bk_cmdb",{pwd:"密码"})

    # cd /data/install

    # ./bkeec stop cmdb

    # ./bkeec status cmdb

    # ./bkeec start cmdb

    # ./bkeec status cmdb

    cmdb访问报404【问题描述】cmdb所在机器意外重启之后,访问cmdb出现404的问题。 【排查】检查服务都是正常的,查看cmdb_adminserver的日志之后,发现无法解析zk.service.consul,检查dns后,发现首选dns不是127.0.0.1了。 【解决方法】修改/etc/resolv.conf的nameserver,确保 /etc/resolv.conf 里第一个nameserver是 127.0.0.1,而且option选项不能有rotate。     1.3、SaaS访问异常【问题描述】登录到蓝鲸后,打开SaaS均出现”应用出现异常”的报错。 【排查】1)、在出现异常的时间段内,检查蓝鲸进程运行情况,运行状态显示为RUNNING;                 2)、对CMDB服务进行排查,通过查看cmdb_apiserver.stdout.log和cmdb的nginx访问日志发现,连接cmdb的esb-api接口服务出现timeout,初步怀疑是由于api服务连接不上导致问题的出现。 【解决方法】重启cmdb服务后,该问题解决,SaaS恢复正常访问。在中控机重启cmdb

    # cd /data/install

    # ./bkeec stop cmdb

    # ./bkeec status cmdb

    # ./bkeec start cmdb

    # ./bkeec status cmdb

    组件监控【问题描述】配置组件监控,保存时,报用户没有权限,出现”调用接口失败 execute_platform_task:账户【test】没有该业务的操作权限” 【排查】经咨询开发人员后,确认是以下原因导致:1)、由于exporter是内置在蓝鲸业务的机器下的,下发流程涉及到跨业务分发文件,因此要求用户同时拥有源业务和目标业务的权限,目前还在确定解决方案。2)、 promtheus类型的组件会有这个问题,包括Mencache、SQLServer、Oracle、Haproxy、Weblogic、RabbitMQ、Zookeeper等。 【解决方法】目前将”蓝鲸”这个业务的运维人员加上这个账号,即可解决该问题。  2.2      

    主机性能监控【问题描述】cpu5分钟负载突然显示无数据上报. 【排查】在蓝鲸自监控里检查发现,databus的etl服务有异常。 【解决方法】登录到bkdata所在机器,重启etl服务。 

    # supervisorctl -c

    /data/bkee/etc/supervisor-bkdata-databus.conf status databus_etl

    # supervisorctl -c

    /data/bkee/etc/supervisor-bkdata-databus.conf restart databus_etl

    服务拨测【问题描述】打开服务拨测,出现 【模块:data】接口返回结果错误:database not found:uptimecheck_212 的报错。 【排查】旧的拨测没建库成功的,需要手动触发接口创建 【解决方法】登录到蓝鲸的任意一台机器上执行以下命令创建库。

    # curl -X "POST" "http://dataapi.service.consul:10011/tool/tsdb/create_db"  -H 'Content-Type: application/json;

      charset=utf-8' \

            -d $'{

      "db_name": "uptimecheck_212",

      "days": "30"

       }'

    执行脚本有异常【问题描述】作业平台执行脚本等操作时有问题,出现 " Execution result log always empty. " 的报错。 【排查】经检查,healthz接口正常,nfs挂载也正常,但有一台机的gse_task出现异常情况。 【解决方法】登录到出现gse_task异常的机器上重启gse_task,作业平台即可正常执行脚本等操作。

    # cd /data/bkee/gse/server/bin/

    # ./gsectl stop task

    # ps -ef | grep gse_task

    # ./gsectl start task

    调整MySQL的innodb_log_file_size参数为4G

    # cd /data/bkee/service/mysql/bin/

    # ./mysql.sh stop

    # vim /data/bkee/etc/my.cnf

    # innodb_log_file_size = 4096M

    # cd /data/bkee/public/mysql/

    # mv ib_logfile0

    ib_logfile0.20190424.back

    # mv ib_logfile1

    ib_logfile1.20190424.back

    #启动MySQL服务

    # cd /data/bkee/service/mysql/bin/

    # ./mysql.sh start

    蓝鲸平台部署完成后再添加gse和nginx*ip

    # cd /data/install/

    # vi globals.env

             export

      AUTO_GET_WANIP=1

             export

      GSE_WAN_IP=(GSE_WAN_IP GSE_WAN_IP1)

      export NGINX_WAN_IP=(NGINX_WAN_IP NGINX_WAN_IP1)

    # ./bkeec sync common

    # ./bkeec render gse

    # ./bkeec stop gse

    # ./bkeec start gse

    # ./bkeec install nginx 1

    # ./bkeec stop nginx

    # ./bkeec start nginx

    2020-11-06

       蓝鲸平台日常维护中遇到的问题【摘要】在蓝鲸平台的日常维护过程中,会遇到一些平台异常的问题,这些问题有一些是常见的,例如bkdata进程异常导致监控数据未上报,有一些是特定情况下遇到的,但经过排查可以解决的,希望通过整理之前处理过的排错,对以后遇到类似的问题有帮助,能够迅速排查解决。

    cmdb重启失败【问题描述】重启cmdb所在机器后,发现启动cmdb有报错,出现cmdb_adminserver:ERROR(spawn error) 【排查】查日志发现连接MongoDB失败,使用bk_cmdb用户也无法登陆到MongoDB 【解决方法】在MongoDB里重新对bk_cmdb用户进行授权,授权完之后,再重新启动cmdb1)、重新授权

    # source /data/install/utils.fc

    # mongo -u $MONGODB_USER -p

    $MONGODB_PASS --port $MONGODB_PORT --authenticationDatabase admin

    # show dbs;

    #进入cmdb这个库

    # use cmdb;

    #更新bk_cmdb用户的密码(密码可以从/data/install/.app.token中查找)

    # db.updateUser("bk_cmdb",{pwd:"密码"})

    # cd /data/install

    # ./bkeec stop cmdb

    # ./bkeec status cmdb

    # ./bkeec start cmdb

    # ./bkeec status cmdb

    cmdb访问报404【问题描述】cmdb所在机器意外重启之后,访问cmdb出现404的问题。 【排查】检查服务都是正常的,查看cmdb_adminserver的日志之后,发现无法解析zk.service.consul,检查dns后,发现首选dns不是127.0.0.1了。 【解决方法】修改/etc/resolv.conf的nameserver,确保 /etc/resolv.conf 里第一个nameserver是 127.0.0.1,而且option选项不能有rotate。     1.3、SaaS访问异常【问题描述】登录到蓝鲸后,打开SaaS均出现”应用出现异常”的报错。 【排查】1)、在出现异常的时间段内,检查蓝鲸进程运行情况,运行状态显示为RUNNING;                 2)、对CMDB服务进行排查,通过查看cmdb_apiserver.stdout.log和cmdb的nginx访问日志发现,连接cmdb的esb-api接口服务出现timeout,初步怀疑是由于api服务连接不上导致问题的出现。 【解决方法】重启cmdb服务后,该问题解决,SaaS恢复正常访问。在中控机重启cmdb

    # cd /data/install

    # ./bkeec stop cmdb

    # ./bkeec status cmdb

    # ./bkeec start cmdb

    # ./bkeec status cmdb

    组件监控【问题描述】配置组件监控,保存时,报用户没有权限,出现”调用接口失败 execute_platform_task:账户【test】没有该业务的操作权限” 【排查】经咨询开发人员后,确认是以下原因导致:1)、由于exporter是内置在蓝鲸业务的机器下的,下发流程涉及到跨业务分发文件,因此要求用户同时拥有源业务和目标业务的权限,目前还在确定解决方案。2)、 promtheus类型的组件会有这个问题,包括Mencache、SQLServer、Oracle、Haproxy、Weblogic、RabbitMQ、Zookeeper等。 【解决方法】目前将”蓝鲸”这个业务的运维人员加上这个账号,即可解决该问题。  2.2      

    主机性能监控【问题描述】cpu5分钟负载突然显示无数据上报. 【排查】在蓝鲸自监控里检查发现,databus的etl服务有异常。 【解决方法】登录到bkdata所在机器,重启etl服务。 

    # supervisorctl -c

    /data/bkee/etc/supervisor-bkdata-databus.conf status databus_etl

    # supervisorctl -c

    /data/bkee/etc/supervisor-bkdata-databus.conf restart databus_etl

    服务拨测【问题描述】打开服务拨测,出现 【模块:data】接口返回结果错误:database not found:uptimecheck_212 的报错。 【排查】旧的拨测没建库成功的,需要手动触发接口创建 【解决方法】登录到蓝鲸的任意一台机器上执行以下命令创建库。

    # curl -X "POST" "http://dataapi.service.consul:10011/tool/tsdb/create_db"  -H 'Content-Type: application/json;

      charset=utf-8' \

            -d $'{

      "db_name": "uptimecheck_212",

      "days": "30"

       }'

    执行脚本有异常【问题描述】作业平台执行脚本等操作时有问题,出现 " Execution result log always empty. " 的报错。 【排查】经检查,healthz接口正常,nfs挂载也正常,但有一台机的gse_task出现异常情况。 【解决方法】登录到出现gse_task异常的机器上重启gse_task,作业平台即可正常执行脚本等操作。

    # cd /data/bkee/gse/server/bin/

    # ./gsectl stop task

    # ps -ef | grep gse_task

    # ./gsectl start task

    调整MySQL的innodb_log_file_size参数为4G

    # cd /data/bkee/service/mysql/bin/

    # ./mysql.sh stop

    # vim /data/bkee/etc/my.cnf

    # innodb_log_file_size = 4096M

    # cd /data/bkee/public/mysql/

    # mv ib_logfile0

    ib_logfile0.20190424.back

    # mv ib_logfile1

    ib_logfile1.20190424.back

    #启动MySQL服务

    # cd /data/bkee/service/mysql/bin/

    # ./mysql.sh start

    蓝鲸平台部署完成后再添加gse和nginx*ip

    # cd /data/install/

    # vi globals.env

             export

      AUTO_GET_WANIP=1

             export

      GSE_WAN_IP=(GSE_WAN_IP GSE_WAN_IP1)

      export NGINX_WAN_IP=(NGINX_WAN_IP NGINX_WAN_IP1)

    # ./bkeec sync common

    # ./bkeec render gse

    # ./bkeec stop gse

    # ./bkeec start gse

    # ./bkeec install nginx 1

    # ./bkeec stop nginx

    # ./bkeec start nginx

    Python能做什么,能够开发什么项目?

    Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于的、大型项目的开发。

    Python是一种解释型脚本语言,可以应用于Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发这些领域。

    Python的应用

    1、系统编程

    提供API(Application Programming Interface应用程序编程接口),能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。

    2、图形处理

    有PIL、Tkinter等图形库支持,能方便进行图形处理。

    3、数学处理

    NumPy扩展提供大量与许多标准数学库的接口。

    4、文本处理

    python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。

    5、数据库编程

    程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。

    6、网络编程

    提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。

    7、Web编程

    应用的开发语言,支持最新的XML技术。

    8、多媒体应用

    Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。

    9、pymo引擎

    PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。

    10、黑客编程

    python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。

    参考资料来源:百度百科—Python

    如何用python做一个设备运维软件

    Python开发的jumpserver跳板机

    jumpserver跳板机是一款由Python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。

    企业主要用于解决:可视化安全管理

    特点:完全开源,GPL授权

    Python编写,Django开发框架,容易再次开发

    实现了跳板机基本功能:认证、授权、审计。集成了Ansible、批量命令等。功能强大。

    通俗点就是起到监控谁在服务器上做了什么操作等。录像回放、命令搜索、实时监控、批量上传下载等。

    第三:Python开发的Mage分布式监控系统

    以自动化运维视角为出发点,自动化功能、监控告警、性能调优,结合saltstack实现自动化配置管理等内容进行了全方位的深入剖析。

    企业主要用于解决:自动化监控常用系统服务、应用、网络设备等。分布式可监控更多服务器,分区域监控再汇总。Zabbix监控结合Python自定义监控脚本。

    监控系统需求讨论:

    监控常用系统服务、应用、网络设备等?一台主机上可监控多个不同服务、不同服务的监控间隔可不同?同一个服务在不同主机上的监控间隔、报警阈值可不同?告警级别?数据可视化,如何做出简洁美观的用户界面?如何实现单机支持5000+机器监控需求?采取何种通信方式?主动、被动?

    第四:Python开发的Mage的CMDB

    cmdb的开发需要包含三部分功能:采集硬件数据、API、页面管理。

    企业主要用于解决:项目功能,采集硬件数据、Api、页面管理。统计资产,例如服务器存放位置,服务器上的账号等等。

    执行服务的过程如下:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取到的数据保存到数据库中,后台管理程序负责对服务器信息的配置和展示。

    第五:Python开发的任务调度系统

    Python任务调度系统的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。

    企业主要用于解决:通俗的理解,批量管理crontab定时任务。原理用户通过web页面设置任务,传输到任务调度系统服务器上的客户端,客户端收集数据反馈给服务器端,服务器端根据任务具体内容调度后端的集群服务器做定时任务。

    一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信。想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统。

    第六:Python运维流程系统

    使用python语言编写的调度和监控工作流的平台内部用来创建、监控和调整数据管道。任何工作流都可以在这个使用Python来编写的平台上运行。

    企业主要用于解决:通俗点说就是规范运维的操作,加入审批,一步一步操作的概念。

    是一种允许工作流开发人员轻松创建、维护和周期性地调度运行工作流(即有向无环图或成为DAGs)的工具。这些工作流包括了如数据存储、增长分析、Email发送、A/B测试等等这些跨越多部门的用例。

    这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,并且提供了钩子使得系统拥有很好地扩展性。除了一个命令行界面,该工具还提供了一个基于Web的用户界面让您可以可视化管道的依赖关系、监控进度、触发任务等。

    来个小总结

    显示全文