CMDB配置资源管理数据库(理解)
CMDB是运维自动化的基础,它为日志系统,发布系统,监控系统等运维系统(ELK,zabbix,open-falcon)提供接口函数,
第一种方式:Agent方法实现,agent不能直接访问数据库,因为agent端有可能被入侵,入侵之后,黑客可以获取数据库权限,造成删库等损失,所以得用url方式
####server from django.shortcuts import render,HttpResponse # Create your views here. def asset(request):
if request.method == "POST":
print(request.POST)
# 写入到数据
return HttpResponse('')
else:
return HttpResponse('姿势不对') ####agent
import subprocess
import requests v1 = subprocess.getoutput("ifconfig")
value1 = (v1[:]) v2 = subprocess.getoutput("dir")
value2 = (v2[:]) url = "http://127.0.0.1:8000/asset.html" response = requests.post(url,data={"k1":value1,"k2":value2})
print(response.text)
#Agent方式
api
- URL
- 发送数据格式
- 返回值
agent
- 采集数据,发送数据
好处:
- 简单
- 采集速度快,响应速度快
坏处:
- 每台agent装的插件多,性能损耗严重
- 更新需要更新每台agent服务器
当然subprocess不能用于CMDB采集数据,因为这个模块通常用于本机
>>> import subprocess
>>> subprocess.getoutput('ipconfig')
'\nWindows IP 配置\n\n\n无线局域网适配器 无线网络连接 2:\n\n 媒体状态 . . . .
. . . . . . . . : 媒体已断开\n 连接特定的 DNS 后缀 . . . . . . . : \n\n以太网
适配器 Bluetooth 网络连接:\n\n 媒体状态 . . . . . . . . . . . . : 媒体已断开\
n 连接特定的 DNS 后缀 . . . . . . . : \n\n以太网适配器 本地连接:\n\n 媒体状
态 . . . . . . . . . . . . : 媒体已断开\n 连接特定的 DNS 后缀 . . . . . . . :
\n\n无线局域网适配器 无线网络连接:\n\n 连接特定的 DNS 后缀 . . . . . . . : \n
本地链接 IPv6 地址. . . . . . . . : fe80::e4c6:c03b:e89:a02%11\n IPv4 地址
. . . . . . . . . . . . : 192.168.1.100\n 子网掩码 . . . . . . . . . . . . :
255.255.255.0\n 默认网关. . . . . . . . . . . . . : 192.168.1.1\n\n以太网适配
器 VMware Network Adapter VMnet1:\n\n 连接特定的 DNS 后缀 . . . . . . . : \n
本地链接 IPv6 地址. . . . . . . . : fe80::486e:2200:8997:bcdb%18\n IPv4 地址
. . . . . . . . . . . . : 192.168.65.1\n 子网掩码 . . . . . . . . . . . . : 2
55.255.255.0\n 默认网关. . . . . . . . . . . . . : \n\n以太网适配器 VMware Net
work Adapter VMnet8:\n\n 连接特定的 DNS 后缀 . . . . . . . : \n 本地链接 IPv
6 地址. . . . . . . . : fe80::d851:ee0a:c90a:db52%19\n IPv4 地址 . . . . . . .
. . . . . : 192.168.117.1\n 子网掩码 . . . . . . . . . . . . : 255.255.255.0
\n 默认网关. . . . . . . . . . . . . : \n\n隧道适配器 isatap.localdomain:\n\n
媒体状态 . . . . . . . . . . . . : 媒体已断开\n 连接特定的 DNS 后缀 . . . .
. . . : \n\n隧道适配器 isatap.{7F17396E-53DB-47A4-BD5C-9EADDC5E9FAC}:\n\n 媒
体状态 . . . . . . . . . . . . : 媒体已断开\n 连接特定的 DNS 后缀 . . . . . .
. : \n\n隧道适配器 Teredo Tunneling Pseudo-Interface:\n\n 连接特定的 DNS 后缀
. . . . . . . : \n IPv6 地址 . . . . . . . . . . . . : 2001:0:9d38:6ab8:2882:
ac2:49ed:92f9\n 本地链接 IPv6 地址. . . . . . . . : fe80::2882:ac2:49ed:92f9%1
4\n 默认网关. . . . . . . . . . . . . : ::\n\n隧道适配器 isatap.{5200D41D-66DB
-404B-B054-927048C61572}:\n\n 媒体状态 . . . . . . . . . . . . : 媒体已断开\n
连接特定的 DNS 后缀 . . . . . . . : \n\n隧道适配器 isatap.{24E33A31-E0FB-45FF
-B380-39AD751E3A09}:\n\n 媒体状态 . . . . . . . . . . . . : 媒体已断开\n 连
接特定的 DNS 后缀 . . . . . . . : \n\n隧道适配器 isatap.{28CBEECB-4F9E-4214-B9CA
-E42439ECC9D4}:\n\n 媒体状态 . . . . . . . . . . . . : 媒体已断开\n 连接特
定的 DNS 后缀 . . . . . . . : '
>>>
>>> import requests
>>> requests.get('http://www.cnblogs.com/wupeiqi/articles/6192986.html') #也可以是POST请求
<Response []>
>>> ret = requests.get('http://www.cnblogs.com/wupeiqi/articles/6192986.html')
>>> ret.text#把整个页面都渲染出来,相当于一个字符串
第二种方式:用SSH方式实现,用中控机采集资产, 下图的中间部分就是中控机
##server from django.shortcuts import render,HttpResponse # Create your views here. def asset(request):
if request.method == "POST":
print(request.POST)
# 写入到数据
return HttpResponse('')
else:
return HttpResponse('姿势不对') ##Paramiko中控机 import paramiko
import requests # 创建SSH对象
ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器
ssh.connect(hostname='10.37.129.3', port=, username='root', password="") # 执行命令
stdin, stdout, stderr = ssh.exec_command('ifconfig') # 获取命令结果
result = stdout.read()[:] # 关闭连接
ssh.close() url = "http://127.0.0.1:8000/asset.html" response = requests.post(url,data={"k1":result})
print(response.text)
#ssh方式
- fabric(本质是Paramiko)
- ansible(本质是Paramiko)
- Paramiko #Paramiko模块 原理: Paramiko中控机远程连接服务器,执行命令,获取结果,将结果发送Api
应用场景:服务器少,ssh可以忽略 好处
- 无需Agent
坏处
- 连接客户机时每次需要ssh连接,速度慢 http://www.cnblogs.com/wupeiqi/articles/5095821.html
很多运维工具基于Python的paramiko模块做了封装,比如fabric,ansible,最新的ansible用了另外的方式实现
第三种方式:依赖第三方工具saltstack
http://www.cnblogs.com/wupeiqi/articles/6415436.html API:Django接收数据并入库 应用场景:针对服务器较多的公司【推荐】 master:
v = subprocess.getoutput('salt "*" cmd.run "ls"') saltstack内部原理是通过RPC来实现得消息队列
以saltstack为例,在saltstack-master上可以远程执行命令,然后利用RPC采集资产
RPC的本质是维护一个队列
RPC方式比SSH要快
第四种方式:基于puppet方式采集:
. puppet【ruby语言】 内部原理:puppet客户端每30秒钟自动汇报数据给puppet服务端。 应用场景:主要是针对已经在使用puppet的公司。
同时使用前三种方式:通过修改配置文件实现前三种方式的切换 (前三种必须要会,第四种了解)
一般设置每天采集一次数据
CMDB要解决的就是自动收集
程序实现
1.下面这段程序放在agent机器上: agent方式
#.采集数据发送到API
import subprocess
import requests
#pip3 install requests
result = subprocess.getoutput('ipconfig')#获取本机的信息
#result正则处理获取想要的数据 #整理资产信息
data_dict = {
'net':{},
'disk':{},
'mem':{},
} #.发送数据
requests.post('http://www.127.0.0.1/assets.html',data=data_dict)
客户端:
subprocess模块详解
subprocess – 创建附加进程
subprocess模块提供了一种一致的方法来创建和处理附加进程,与标准库中的其它模块相比,提供了一个更高级的接口。用于替换如下模块:
os.system() , os.spawnv() , os和popen2模块中的popen()函数,以及 commands(). 程序如下:
import subprocess v1 = subprocess.getoutput('ipconfig')#利用subprocess模块
print(v1)
print(v1[:])
v2 = subprocess.getoutput('dir')#执行一个Windows cmd命令
print(v2)
print(type(v2)) url = "http://127.0.0.1:8000/asset.html"#指定一个URL
import requests
response = requests.post(url,data={'k1':v1,'k2':v2})#把url和数据用post方式提交
print(response.text)#输出命令的内容
客户端
服务端:
from django.shortcuts import render,HttpResponse def asset(request):
if request.method == "POST":
print(request.POST)#输出从客户端发送过来的数据
#写入数据
return HttpResponse('ok')
else:
return HttpResponse('姿势不对,请换一下姿势')
服务端
2. 这里可以封装成一个函数,放在中控机上: SSH方式
#####################通过paramiko连接远程服务器,执行命令#################
#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='192.168.117.130',port=,username='root',password='')
#执行命令
stdin,stdout,stderr=ssh.exec_command('ifconfig')
#输入,输出,输出错误信息
#yum 安装时输入Y或者N会出现stdin
#获取命令结果
result = stdout.read()
#关闭连接
ssh.close()
print(result) #输出命令的结果
#result有必要做格式化处理 # result = requests.get('http://www.127.0.0.1/assets.html')#取数据
# 举例result是列表类型
# result = ['c1.com','c2.com']
在列表做循环
3.saltstack方式
salt-master配置:
[root@python-web2 ~]# rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
[root@python-web2 ~]# yum install salt-master
[root@python-web2 ~]# vi /etc/salt/master 编辑master配置文件
修改ip(本机ip)
配置文件监听本机ip
interface: 192.168.117.130
[root@python-web2 ~]# /usr/bin/salt-master start 启动saltstack 这里是centos7,这种方式启动会失败
[root@python-web2 ~]# systemctl start salt-master这里启动成功
[root@python-web2 ~]# salt-key -a 192.168.117.128 确认指定的证书
The following keys are going to be accepted:
Unaccepted Keys:
192.168.117.128
Proceed? [n/Y] Y
Key for minion 192.168.117.128 accepted.
[root@python-web2 ~]# salt-key -L 列出所有证书
Accepted Keys:
192.168.117.128
Denied Keys:
Unaccepted Keys:
Rejected Keys:
salt-minion配置:
[root@localhost ~]# yum install salt-minion
[root@localhost ~]# vi /etc/salt/minion 修改配置文件
master: 192.168.117.130 服务端ip
[root@python-web2 ~]# systemctl start salt-minion这里启动成功 master远程执行命令:
[root@python-web2 ~]# salt '192.168.117.128' cmd.run 'ifconfig'
192.168.117.128:
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.117.128 netmask 255.255.255.0 broadcast 192.168.117.255
inet6 fe80::20c:29ff:fed1:6595 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:d1:65:95 txqueuelen 1000 (Ethernet)
RX packets 25872 bytes 28850791 (27.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12135 bytes 1231060 (1.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 72 bytes 5876 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 72 bytes 5876 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@python-web2 ~]# python
>>> import salt.client
>>> local = salt.client.LocalClient()
>>> result = local.cmd('192.168.117.128','cmd.run',['ifconfig'])
>>> print(result)#result是一个字典
{'192.168.117.128': 'ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500\n inet 192.168.117.128 netmask 255.255.255.0 broadcast 192.168.117.255\n inet6 fe80::20c:29ff:fed1:6595 prefixlen 64 scopeid 0x20<link>\n ether 00:0c:29:d1:65:95 txqueuelen 1000 (Ethernet)\n RX packets 26160 bytes 28870174 (27.5 MiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX packets 12207 bytes 1237294 (1.1 MiB)\n TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0\n\nlo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536\n inet 127.0.0.1 netmask 255.0.0.0\n inet6 ::1 prefixlen 128 scopeid 0x10<host>\n loop txqueuelen 1 (Local Loopback)\n RX packets 72 bytes 5876 (5.7 KiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX packets 72 bytes 5876 (5.7 KiB)\n TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0'}
>>> result.keys()
['192.168.117.128']
>>> result.values()
['ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500\n inet 192.168.117.128 netmask 255.255.255.0 broadcast 192.168.117.255\n inet6 fe80::20c:29ff:fed1:6595 prefixlen 64 scopeid 0x20<link>\n ether 00:0c:29:d1:65:95 txqueuelen 1000 (Ethernet)\n RX packets 26160 bytes 28870174 (27.5 MiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX packets 12207 bytes 1237294 (1.1 MiB)\n TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0\n\nlo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536\n inet 127.0.0.1 netmask 255.0.0.0\n inet6 ::1 prefixlen 128 scopeid 0x10<host>\n loop txqueuelen 1 (Local Loopback)\n RX packets 72 bytes 5876 (5.7 KiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX packets 72 bytes 5876 (5.7 KiB)\n TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0']
salt其实是一个py文件
打开/usr/bin/salt文件,会出现如下画面:
一、salt介绍
Salt是一个新的配置管理工具,部署容易,几分钟之内就能运行,可伸缩的足以管理成千上万的服务器,并且他们通讯很快,在秒级别
Salt的底层提供了一个动态的通讯机制,基于zeromq,能被用于编制、远程执行、配置管理等,
基于C/S形式,服务端是master,客户端是minion,类似于puppet,但是比puppet强大,基于python。可以抛弃小日本的ruby啦!
如果厌倦puppet的繁琐,可以试试这个,如果是puppet是apache,那么salt就是nginx,非常轻量级 二、salt安装(基于centos6.)
、安装epel源(只有5和6,4的版本就不用想啦)
、最新版本安装:yum --enablerepo=epel-testing install zeromq3 zeromq3-devel salt-master
yum --enablerepo=epel-testing install zeromq3 zeromq3-devel salt-minion
、稳定版安装:yum install zeromq3 zeromq3-devel salt-master
yum install zeromq3 zeromq3-devel salt-minion
注:5的版本装不了zeromq3,zeromq2有BUG,5安装方式用源代码安装,具体安装请看最下面的脚本
三、salt配置
配置文件位置:/etc/salt
master:基本上不需要修改
minion:指定master的地址,和id,如果不修改id,它默认通过 python函数socket.getfqdn()来获得主机名 四、启动salt
/etc/init.d/salt-master start #master端
/etc/init.d/salt-minion start #minion端 五、确认证书
master与minion交互都是加密的,所以在minion启动后,会向master发送key,然后master来确认。
salt-key 常用的命令选项
-a [option] 确认指定的证书
-A 确认所有的证书
-d [option] 删除指定的证书
-D删除所有的证书
-L 列出所有证书 [root@localhost soft]# salt-key -L
Accepted Keys:
Unaccepted Keys:
192.168.0.9
Rejected Keys:
[root@localhost soft]# salt-key -a 192.168.0.9
Key for minion 192.168.0.9 accepted. 注:如果master没确认证书,minion端会一直报以下错:
[salt.crypt][ERROR ] The Salt Master has cached the public key for this node,
this salt minion will wait for seconds before attempting to re-authenticate
saltstack主备安装方式
补充知识:
ssh-keygen的使用方法 :用于生成公钥和私钥,使A机器登录B机器不需要密码登录
一、概述
、就是为了让两个Linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作
、模型分析
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机; 要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa 二、具体操作流程 单向登陆的操作过程(能满足上边的目的):
、登录A机器
、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys
、大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行 #ssh 192.168.20.60 ) 双向登陆的操作过程:
、ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.具体方法如下:
、两个节点都执行操作:#ssh-keygen -t rsa
然后全部回车,采用默认值. 、这样生成了一对密钥,存放在用户目录的~/.ssh下。
将公钥考到对方机器的用户目录下 ,并将其复制到~/.ssh/authorized_keys中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys )。 、设置文件和目录权限:
设置authorized_keys权限
$ chmod authorized_keys
设置.ssh目录权限
$ chmod -R .ssh
ssh-keygen的使用方法
CMDB配置资源管理数据库(理解)的更多相关文章
- XData -–无需开发、基于配置的数据库RESTful服务,可作为移动App和ExtJS、WPF/Silverlight、Ajax等应用的服务端
XData -–无需开发.基于配置的数据库RESTful服务,可作为移动App和ExtJS.WPF/Silverlight.Ajax等应用的服务端 源起一个App项目,Web服务器就一台,已经装了 ...
- mysql配置主从数据库
1.目的 1.1 实现数据备份 1.2 项目访问时可以实现读写分离,提高访问和操作数据的速度<读写分离好处> 2.背景 这次的主从配置主要实现主库数据的改变可以实现同步到从库中: 此次试验 ...
- 手工配置oracle数据库
手工配置Oracle 10G Enterprise Manager今天安装oracle,反复装了几遍都报下面错误:试了几种方法都不行:由于以下错误,Enterprise Manager配置失败启动Da ...
- SharePoint管理中心配置内容数据库
SharePoint管理中心配置内容数据库 在SharePoint2010中,内容数据库是组织数据的核心. 是全部站点内容信息,如文档.列表数据和Web部件属性等存储的地方.默认地,内 ...
- spring-mvc.xml 和 application-context.xml的配置与深入理解
在java框架这个话题,前几篇文章是基于搭建ssm项目框架,以及web.xml的配置讲解,本篇主要就ssm框架的其他配置文件进行深入讲解,他们分别是:1.application-context.xml ...
- 配置MySQL数据库
一.配置MySQL数据库 1.解压绿色版mysql,如下图 二.安装服务 1.运行cmd(管理员版本,否则没有权限),如下图 2.运行命令mysqld –install安装服务,如下图: 如果不需要m ...
- CAS 4.0.0RC 配置通过数据库认证用户登录
配置通过数据库认证用户登录 打开webapp\WEB-INF目录下的deployerConfigContext.xml,替换 <bean id="primaryAuthenticati ...
- 【转载】CentOS6.5_X64下安装配置MongoDB数据库
[转载]CentOS6.5_X64下安装配置MongoDB数据库 2014-05-16 10:07:09| 分类: 默认分类|举报|字号 订阅 下载LOFTER客户端 本文转载自zhm&l ...
- CentOS 7.0下配置MariaDB数据库
刚刚配置了下CentOS 7.0版本的服务器,配置数据库时发现# mysql_secure_installation命令用不了,之后网上查了一下发现CentOS 7.0版本用MariaDB替换了mys ...
随机推荐
- c++之旅:多态
多态 同一消息根据发送对象的不同而产生不同的行为,多态是建立的在封装和继承的基础之上 一个小案例引发的问题 #include <iostream> using namespace std; ...
- rootpw密码生成方法/c-exit
linux kickstart文件里rootpw密码可以使用明文,也可以使用加密过的值,这里主要介绍下三种加密方法:md5.sha256.sha512 使用明文的方法 rootpw "pas ...
- java中内部类的积累
放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所有元素的访 ...
- 谷歌技术"三宝"之MapReduce(转)
原文地址:http://blog.csdn.net/opennaive/article/details/7514146 江湖传说永流传:谷歌技术有"三宝",GFS.MapReduc ...
- PHP引入框架包
引入包 之后 在写代码的时候会有提示. 流程: 项目名称右击->包含目录->TAB页签选择库-> add external source folder 找到需要的包.
- linux lanmp一件安装包
转载地址:http://lamp.phpstudy.net/ phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 ...
- Android模拟器Intel Atom下载安装配置
https://software.intel.com 在Android x86模拟器Intel Atom x86 System Image时提示Intel execute disable bit(xd ...
- windows server 2012泛域名解析配置
应测试要求,要将一个泛域名(*.office.baibai.com)解析到一个内网的IP(10.1.100.240)地址上(使用域控DNS解析)...以下为我的配置过程,做的时候将图顺便接了下来: 1 ...
- C++求矩阵的鞍点
矩阵的鞍点就是指它在本行中的值最大,在本列中的值最小. 求解思路: 求出每行的最大值MaxRow以及每列的最小值MinColumn 保存行最大值的位置和列最小值的位置 如果行最大值得位置和列最小值的相 ...
- params
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ch06 ...