CMDB开发

运维路线图:

 

cmdb的开发需要包含三部分功能:


  • 采集硬件数据
  • API
  • 页面管理

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

采集硬件信息
  采集硬件信息可以有两种方式实现:


  • 利用puppet中的report功能
  • 自己写agent,定时执行

  两种方式的优缺点各异:方式一,优点是不需要在每台服务器上步一个agent,缺点是依赖于puppet,并且使用ruby开发;方式二,优点是用于python调用shell命令,学习成本低,缺点是需要在每台服务器上发一个agent。

方式一
  默认情况下,puppet的client会在每半个小时连接puppet的master来同步数据,如果定义了report,那么在每次client和master同步数据时,会执行report的process函数,在该函数中定义一些逻辑,获取每台服务器信息并将信息发送给API
  puppet中默认自带了5个report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路径下。如果需要执行某个report,那么就在puppet的master的配置文件中做如下配置:
  on master



/etc/puppet/puppet.conf
[main]
reports = store #默认
#report = true #默认
#pluginsync = true #默认

  on client



/etc/puppet/puppet.conf
[main]
#report = true #默认
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com

  如上述设置之后,每次执行client和master同步,就会在master服务器的 【/var/lib/puppet/reports】路径下创建一个文件,主动执行:puppet agent  --test
  所以,我们可以创建自己的report来实现cmdb数据的采集,创建report也有两种方式。
  Demo 1
  1、创建report



/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info 
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end

  2、应用report



/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默认
#pluginsync = true #默认

  Demo 2
  1、创建report
在 /etc/puppet/modules 目录下创建如下文件结构: 

modules└── cmdb    ├── lib    │   └── puppet    │       └── reports    │           └── cmdb.rb    └── manifests        └── init.pp


require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
  2、应用report



/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默认
#pluginsync = true #默认

  方式二
  使用python调用shell命令,解析命令结果并将数据发送到API

API


  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

  django中可以使用 Django rest framwork 来实现:http://www.django-rest-framework.org/


<ignore_js_op> <ignore_js_op> 


class Blog(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()

modes.py




from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
from app02 import models
from rest_framework.decorators import detail_route, list_route
from rest_framework import response
from django.shortcuts import HttpResponse
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff')
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer

# Serializers define the API representation.
class BlogSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Blog
depth = 1
fields = ('url','title', 'content',)

# ViewSets define the view behavior.
class BLogViewSet(viewsets.ModelViewSet):
queryset = models.Blog.objects.all()
serializer_class = BlogSerializer
@list_route()
def detail(self,request):
print request
#return HttpResponse('ok')
return response.Response('ok')
api.py




from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
from app02 import api
from app02 import views

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', api.UserViewSet)
router.register(r'blogs', api.BLogViewSet)

urlpatterns = patterns('',    
url(r'^', include(router.urls)),
url(r'index/', views.index),
#url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
)
urls.py




from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.

@api_view(['GET', 'PUT', 'DELETE','POST']) 
def index(request):
print request.method
print request.DATA
return Response([{'asset': '1','request_hostname': 'c1.puppet.com' }]) 
views
后台管理页面
  后台管理页面需要实现对数据表的增删改查。
<ignore_js_op> 
  
  问题:
  1、paramiko执行sudo



/etc/sudoers
Defaults    requiretty
Defaults:cmdb    !requiretty

  

转载于:https://www.cnblogs.com/rick52o/p/7209379.html

 Python自动化运维开发现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能。因为自动化运维才是将来的趋势! 现在,大一点的公司,服务器都上几百,上千,甚至数万台,这种情况下怎样做自动化运维?用 SHELL 写脚本 FOR 循环?呵呵,歇了吧,SHELL 也就适合简单的系统管理工作。到复杂的自动化任务还得要用专门的开发语言。你可能说了,自动化管理有专门的开源软件/监控也有,直接拿来用下就好了,但是现有的开源软件如 puppetsaltstackzabbixnagio 多为通用的软件,不可能完全适用你公司的所有需求,当你需要做定制、做二次开发的时候,你咋办?找开发部门?开发部门不懂运维的实际业务逻辑,写出来的东西烂烂不能用,这活最后还得交给运维开发人员来做。 其次,不会运维开发,你就不能自己写运维平台\复杂的运维工具,一切要借助于找一些开源软件拼拼凑凑,如果是这样,那就请不要抱怨你的工资低,你的工作不受重视了。 那为什么是PythonPython 是个非常牛 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的基本使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值