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-实现的几种方式的更多相关文章

  1. CMDB实现的四种方式

    第一种(agent): 这种方式是通过向每一台服务器安装agent脚本,然后通过中控机的API,来收集所需要的数据,最后放到数据库中,在通过web的方式显示出来. 实现流程图: 1.录入资产(主机名, ...

  2. CMDB资产采集的四种方式

    转 https://www.cnblogs.com/guotianbao/p/7703921.html 资产采集的概念 资产采集的四种方式:Agent.SSH.saltstack.puppet 资产采 ...

  3. Struts2实现ajax的两种方式

    基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...

  4. Spark读写Hbase的二种方式对比

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...

  5. Android中访问sdcard路径的几种方式

    以前的Android(4.1之前的版本)中,SDcard路径通过"/sdcard"或者"/mnt/sdcard"来表示,而在JellyBean(安卓4.1)系统 ...

  6. C#执行异步操作的几种方式比较和总结

    C#执行异步操作的几种方式比较和总结 0x00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过, ...

  7. Windows10-UWP中设备序列显示不同XAML的三种方式[3]

    阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...

  8. CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

    CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...

  9. springmvc+jpa实现分页的两种方式

    1.工具类 public final class QueryTool { public static PageRequest buildPageRequest(int pageNumber, int ...

随机推荐

  1. virtualenv与virtualenvwrapper的配置

    virtualenv是用来创建python虚拟环境的一个工具(python的Scripts目录下virtualev.exe文件),virtualenvwrapper是用来 便于管理virtualenv ...

  2. Ubuntu16.04 ionic(jdk,sdk,gradle)环境搭建完全攻略

    在Ubuntu16.04当中搭建一个ionic环境还是按照官方教程的来,主要问题是首先要把JDK,SDK搭好,环境变量配好.本文中给的包的下载请不要直接用浏览器下载,很慢,尽量用wget 下载,重要的 ...

  3. spring注解驱动开发

    1.全图: 一.IOC容器部分 1.第一个初始化实例: @Configuration @ComponentScans @Bean("person") 注意: @repeatable ...

  4. P1403 [AHOI2005]约数研究 题解

    转载luogu某位神犇的题解QAQ 这题重点在于一个公式: f(i)=n/i 至于公式是怎么推出来的,看我解释: 1-n的因子个数,可以看成共含有2因子的数的个数+含有3因子的数的个数……+含有n因子 ...

  5. react native进一步学习(NavigatorIOS 学习)

    特别申明:本人代码不作为任何商业的用途,只是个人学习的一些心得,为了使得后来的更多的程序员少走一些弯路.*(如若侵犯你的版权还望见谅)*. 开发工具:WebStorm,xcode 1. rn的创建的时 ...

  6. 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示

    第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...

  7. ecplise的Jsp红叉错误消除

    当做项目的时候,引入的jsp文件可能会出现红叉的情况,重新输入任意字符再删除,保存后恢复正常. 原因是由于jsp中的方法还没有实现,等方法写完之后,再使jsp文件重新处于编译状态,保存后恢复正常.

  8. Linux:Linux Mint系统的安装

    今天就更新一篇了,其实Linux系统大部分都是用虚拟机来安装的,毕竟Windows系统才是我们常用的系统,而Linux系统只是我们工作时才用的,而且使用虚拟机是非常方便的,不用重启电脑就可以使用另一种 ...

  9. UITextField属性及方法说明

    /初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(, , , )] //设置 ...

  10. logback-MDC日志唯一标识

    自定义LogbackFilter: import org.slf4j.MDC; import javax.servlet.*; import javax.servlet.annotation.WebF ...