CMDB-实现的几种方式
CMDB的用处:收集服务器的元信息,实现自动化运作和监控
CMDB的实现方案有4中(业内常见的)
重要:以下的所有方案首先都需要运维把服务器的主机名和SN号录入到后台,这样开发才能去写脚本
第一种实现方案 agent # 客户端的方式,适用于大公司
缺点:每一台服务器都要放agent脚本,每次加入新的服务器,就要部署一次
流程:
1、采集服务器信息
2、POST数据到API
3、API将数据保存到数据库
4、将数据进行 web展示
PS:每一台服务器都有一个agent脚本,有多少台服务器就有多少个脚本,脚本内的代码是一样的
运用subprocess模块执行命令

import subprocess '''agent脚本的核心代码''' # 对本机传入命令,并执行
res = subprocess.getoutput('ipconfig') # 执行的结果是一个字符串格式
print(res) # 根据需求对结果切片取值
ipinfo = res[30:50] # 获取的值
print(ipinfo) '''最后将获取到的值发送到数据库'''
reuqests.post('API url',data={'ipinfo':ipinfo})
第二种方式 SSH类的方式 # 适用于服务器1000台内的公司
通过paramiko模块实现 # fabric和ansible是已经开发成型的软件,可以直接使用
缺点:需要多增加一台中控机,比较耗费网络资源
流程:
1、中控机登陆每台服务器采集信息
2、POST数据到API
3、API将数据保存到数据库
4、将数据进行web展示

'''SSH类的方式''' import paramiko # 实现ssh功能的模块
import requests ssh = paramiko.SSHClient() # 实例化对象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机 ssh.connect(hostname='192.168.6.202',port=22,username='root',password='111111') # 连接主机 '''linux用命令安装软件的时候,会询问y/n,这个stdin就是用来接收输入y还是n,stuout命令执行后的结果,是一个管道,需要用read函数读取,stderr执行错误信息'''
stdin,stdout,stderr = ssh.exec_command('pwd') # 向服务器执行命令 result = stdout.read().decode('utf-8) # 返回的结果是bytes格式的,所以要解码成指定的字符编码 print(result) ssh.close() # 这个程序就是将结果发送到api接口
requests.post('API url',data={'result':result})
第三种方式 saltstack # 适用于已经使用这种方式的公司和初创公司
PS:这种方式需要在中控机上安装salt-master 主机,服务器上安装minion
流程:
1、下发命令采集服务器信息
2、POST数据到API
3、API将数据保存到数据库
4、将数据进行web展示

master端的安装配置 # 这是装在中控机上的
1、yum install salt-master # 安装
2、vim /etc/salt/master # 进入文件修改
3、修改 master文件内的interface的ip地址为中控机(本机)的地址
4、systemctl start salt-master # 启动服务
5、systemctl status salt-master # 查看进程有没有启动
6、salt '*' cmd.run ‘ifconfig’ # *代表向所有的minion发送指令,*也可以输入指定的主机名
7、salt-key -L # 查看已授权和未授权的minion
8、salt-key -h # 查看指令
9、salt-key -A # 所有的minion物理机全都接收
minion端的安装配置 # 安装在每台被采集的服务器上
1、yum install salt-minion -y
2、vim /etc/salt/minion # 修改配置文件的
3、master: master 地址 # (中控机)的地址,如果有多个master可以填写多条master地址
random_master:True # 这个就是在多个master的时候开启后程序可以随机选择master并发送数据给选择的master
4、systemctl start salt-minion # 启动服务
PS:实现原理就是用了两个队列
Python操作saltstack
基于API的方式
import salt.client
local = salt.client.LocalClient()
result = local.cmd('minion的hostname名','cmd.run',['ifconfig']) # 向指定的minion发送指令,命令放入列表,可以是多个
第四种方式 # 这种方式现在已经基本不会使用
puppet使用 Ruby语言写的
CMDB-实现的几种方式的更多相关文章
- CMDB实现的四种方式
第一种(agent): 这种方式是通过向每一台服务器安装agent脚本,然后通过中控机的API,来收集所需要的数据,最后放到数据库中,在通过web的方式显示出来. 实现流程图: 1.录入资产(主机名, ...
- CMDB资产采集的四种方式
转 https://www.cnblogs.com/guotianbao/p/7703921.html 资产采集的概念 资产采集的四种方式:Agent.SSH.saltstack.puppet 资产采 ...
- Struts2实现ajax的两种方式
基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...
- Spark读写Hbase的二种方式对比
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...
- Android中访问sdcard路径的几种方式
以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统 ...
- C#执行异步操作的几种方式比较和总结
C#执行异步操作的几种方式比较和总结 0x00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过, ...
- Windows10-UWP中设备序列显示不同XAML的三种方式[3]
阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...
- CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)
CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...
- springmvc+jpa实现分页的两种方式
1.工具类 public final class QueryTool { public static PageRequest buildPageRequest(int pageNumber, int ...
随机推荐
- 六、Linux的用户和组
1. 用户的管理 useradd 添加一个用户 useradd test 添加test用户 useradd test -d /home/t1 指定用户home目录 或者直接 adduser tes ...
- Python面向对象基础知识
面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用 类是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用 ...
- Pycharm 远程调试
上传后发现成图片了,很模糊.可以看我在百度盘分享pdf文件. https://pan.baidu.com/s/1bYVcAq40SRFtn8qXCPH6TQ
- Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...
- Spring 基础知识(一)基本概念 DI、IOC、AOP
DI(依赖注入) 和IOC(控制反转)都是一种设计思想,要理解他们,让我们从coding中的一些痛点入手. 依赖注入 Dependency Injection : 如果A类要使用B类的一个方法,首先必 ...
- IDEA新建项目时,没有Spring Initializr选项
换了台新电脑,然后重新安装了Intellij IDEA,创建spring boot项目的时候找不到Spring Initializr选项了. 然后百度了下,发现有前辈做出了回答,就复制存到了自己随笔里 ...
- 使用shell安装lnmp
1.简介 使用shell脚本安装lnmp,纯粹是偷懒,平时安装一些东西都写成脚本了,方便以后在其他机器安装的时候不用再去查找文档. PHP版本5.6.6 MYSQL版本5.6.26 NGINX版本1. ...
- 2.Servlet 请求、响应及重定向
PS:以下仅为个人学习笔记,涩及方面略窄 ####################### Request ####################### /** * reque ...
- 浏览器兼容性汇总--JavaScript篇
目录 JavaScript中的兼容性汇总 1. HTML对象获取问题 2. const问题 3. event.x与event.y问题 4. wi ...
- Hadoop 搭建集群的步骤
1.安装jdk,配置环境变量 root@localhost java]# vi /etc/profile 在profile中添加如下内容: #set java environmentexport J ...