CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。
在实际的项目中,CMDB常常被认为是构建其它ITIL流程的基础而优先考虑,ITIL项目的成败与是否成功建立CMDB有非常大的关系。70%~80%的IT相关问题与环境的变更有着直接的关系。实施变更管理的难点和重点并不是工具,而是流程。即通过一个自动化的、可重复的流程管理变更,使得当变更发生的时候,有一个标准化的流程去执行,能够预测到这个变更对整个系统管理产生的影响,并对这些影响进行评估和控制。而变更管理流程自动化的实现关键就是CMDB。CMDB工具中至少包含这几种关键的功能:整合、调和、同步、映射和可视化。cmdb属于运维自动化项目
目的:减少人工干预,降低人员成本
cmdb包括两部分
-资产管理
-操作管理
资产管理的实现WHY搭建cmdb资产管理
搭建cmdb是因为最终是要搭建自动化平台,包括装机、监控、自动安装软件、部署等全部自动化的执行,而想要搭建自动化的平台的基础是要有资产的管理,因为上面的操作都是在资产的基础上进行的操作,所以搭建平台的首要目的是要对资产进行管控起来,所以我们需要有一个资产管理。
目前CMDB资产管理的实现有如下方式:
对于Agent的版本的实现思路:
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)
# 基于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)
# 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的用户界面让您可以可视化管道的依赖关系、监控进度、触发任务等。
来个小总结