CMDB运维自动化

最近用flask写了一个CMDB资产管理工具,结合云平台做到自动化更新以及自动适配报警模版。这里只提供部分代码以及截图

这里是放置自动更新资产的模块,当有新的资源增加的时候,定时器会定期拉取线上资源并录入数据库,同时通过线上监控API加入监控,完全不用人工参与附属部分代码:

def auto_update_rds():
result = []
for zone in zones:
#获取rds所有InstanceId
nums = get_rds_totalcount(zone)
if nums > 0:
for i in range(nums):
lists = get_rds_instanceid(zone, i+1)
for line in lists:
date = (
line.get('DBInstanceId')
)
result.append(date)

#获取数据库下所有InstanceId
db_ins = ModifyDatabase()
rds_id = db_ins.get_mysql_ecs_id('ali_rds')
rds_lists = []
for i in range(len(rds_id)):
rds_lists.append(rds_id[i][0])
i = i + 1
diff1 = list(set(result).difference(set(rds_lists)))
#获取未录入数据库的InstanceId
print ('未录入的rds数量:' + str(len(diff1)))

if len(diff1) > 0:
#封装好的监控接口
cms = auto_add_cms()
type = "RDS"
for L in range(len(diff1)):
#自动录入数据库
rds_info = get_rds_info('cn-hangzhou',  diff1[L])
db_ins = ModifyDatabase()
db_ins.insert_rds_table(**rds_info)
#自动加入监控,根据不同的描述加入到不同的监控组
if 'prod' in rds_info['name'].lower():
GroupId = xxxxx
cms_list = cms.get_all_cms_list(GroupId)
#判断监控中是否存在相同InstanceId
if rds_info['InstanceId'] not in cms_list:
zone = rds_info['region']
InstanceId = rds_info['InstanceId']
cms.add_cms(zone, GroupId, InstanceId, type)
else:
GroupId = xxxxx
cms_list = cms.get_all_cms_list(GroupId)
if rds_info['InstanceId'] not in cms_list:
zone = rds_info['region']
InstanceId = rds_info['InstanceId']
cms.add_cms(zone, GroupId, InstanceId, type)

diff2 = list(set(rds_lists).difference(set(result)))
# 自动删除功能
if len(diff2) > 0:
print('rds过期数量:' + str(len(diff2)))
db_ins.delete_resource_info("ali_rds", "instance_id", ",".join(diff2))
#定时器
global timer
timer = threading.Timer(86400, auto_update_rds)
timer.start()

下面介绍路由信息(这里主要分享:返回给前端的数据接口):
@app.route("/getresource", methods=["GET"])
env = request.args["Env"]
res = request.args["Res"]
app.logger.debug("[getresource]In {} for resource {}".format(env, res))
db_ins = ModifyDatabase()
data = []
if env == "Ali":
if res == "Ecs":
infos = db_ins.get_product_info("ali_vm")
data = formatAliEcs(infos)
elif res == "Rds":
infos = db_ins.get_product_info("ali_rds")
data = formatAliRds(infos)
elif res == "Slb":
infos = db_ins.get_product_info("ali_slb")
data = formatAliSlb(infos)
elif res == "Mongo":
infos = db_ins.get_product_info("ali_mongo")
data = formatAliMongo(infos)
elif res == "Redis":
infos = db_ins.get_product_info("ali_redis")
data = formatAliRedis(infos)
elif res == "Memcache":
infos = db_ins.get_product_info("ali_memcache")
data = formatAliMemcache(infos)
elif res == "Cdn":
infos = db_ins.get_product_info("ali_cdn")
data = formatAliCdn(infos)
elif env == "Inner":
if res == "Ecs":
infos = db_ins.get_product_info("inner_vm")
data = formatInnerVm(infos)
elif res == "Pm":
infos = db_ins.get_product_info("innerserver")
data = formatInnerPm(infos)
elif res == "Switch":
infos = db_ins.get_product_info("innerswitch")
data = formatInnerSwitch(infos)
elif res == "Domain":
infos = db_ins.get_product_info("domain")
data = formatInnerDomain(infos)
r = json.dumps(data)
return Response(
response=r,
mimetype="application/json",
status=200

)

前端传过来两个参数分别对应是内部资源还是云平台的资源以及资源类型,然后从数据库获取资源、格式化成json返回给前端展示

效果:

2019年用go重新写了一遍cmdb,运维工作全部换成go写了,欢迎大家加我qq一起交流学习 499887879

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
 Python自动化运维开发现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能。因为自动化运维才是将来的趋势! 现在,大一点的公司,服务器都上几百,上千,甚至数万台,这种情况下怎样做自动化运维?用 SHELL 写脚本 FOR 循环?呵呵,歇了吧,SHELL 也就适合简单的系统管理工作。到复杂的自动化任务还得要用专门的开发语言。你可能说了,自动化管理有专门的开源软件/监控也有,直接拿来用下就好了,但是现有的开源软件如 puppetsaltstackzabbixnagio 多为通用的软件,不可能完全适用你公司的所有需求,当你需要做定制、做二次开发的时候,你咋办?找开发部门?开发部门不懂运维的实际业务逻辑,写出来的东西烂烂不能用,这活最后还得交给运维开发人员来做。 其次,不会运维开发,你就不能自己写运维平台\复杂的运维工具,一切要借助于找一些开源软件拼拼凑凑,如果是这样,那就请不要抱怨你的工资低,你的工作不受重视了。 那为什么是Python?  Python 是个非常牛 B 的脚本语言, 能满足绝大部分自动化运维的需求,又能做后端 C/S 架构,又能用 WEB 框架快速开发出高大上的 WEB 界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来,你才有资格跟老板谈重视, 否则,还是老老实实回去装机器吧。 为此我们推出这门Python自动化运维的系统课程,帮助你快速的掌握这门加薪的技能。这门课程目前已经帮助接近百位的linux工程师转型成功。我们的课程主要是以企业真实的项目实战为主,避免过多的理论,互动多,案例多,注重思想和项目架构的设计,小白很容易听的懂,学完能直接在公司用,非常的接地气! 只要你跟着我们学三个月,你就可以使用学到的技能,开发各种你想要的系统,满足公司的日常开发。讲师介绍凯哥,前新浪、360技术架构师,现任阿里天猫车站架构师。熟悉PHP、Python、Go等各种语言。曾主导新浪CMDB架构的设计以及二次重构,其间积累了大量的实战经验,并多次受邀对小微企业进行内训。  课程目标这门课程属于入门和进阶,适合多年linux运维经验或者有shell或者Python基础的同学学习。 1.希望转型运维开发运维工程师2.希望了解运维开发,探寻运维架构的运维负责人3.希望获得全局思考意识的运维架构负责人 只要你跟着我们认真学,结合课程中的练习和项目进行实践,相信你一定能学以致用,3个月的时间打破瓶颈,成就自己!课程大纲介绍阶段章节核心内容7.实战项目之CMDB介绍和客户端数据的采集介绍自动化运维的介绍运维实际工作简单介绍什么是运维自动化CMDB在自动化运维中的重要性CMDB采集数据的三种方式CMDB实现的三种方案之Agent方式收集资产CMDB实现的三种方案之SSH类方式收集资产CMDB实现的三种方案之Saltstack方式收集资产CMDB实现各种方案的总结8.实战项目之CMDB客户端数据采集实战高内聚低耦合的思想实战CMDB收集资产之参考Django框架对配置文件的解耦CMDB收集资产之对资产采集进行可插拔式的配置CMDB收集资产之客户端功能的解耦数据提交API的验证CMDB收集资产之向API提交收集的资产CMDB收集资产之API的JWT验证问题CMDB收集资产之唯一ID选择问题CMDB收集资产之多线程并发采集9.实战项目之CMDB服务端数据的展示数据表的设计以及数据的入库CMDB后台目录结构的设计CMDB数据库表的设计将客户端提交过来的数据分析并入库用户和权限管理单个用户的增删改查操作用户组的的增删改查操作对用户和用户组进行权限管理硬盘和CPU的管理对资产硬盘的增删改查操作, 以及导出数据到PDF,Excel,CSV对资产CPU的增删改查操作, 以及导出数据到PDF,Excel,CSV            资产信息的可视化展示Highcharts的基本使用蚂蚁金服开源框架AntV的使用xadmin的基本使用和二次开发Echarts的基本使用
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值