CMDB资产采集方式
CMDB 资产采集的方案总共有四种
Agent (python) SSH类paramiko模块 (python) Saltstack (python) Puttet(ruby) 前三种是用Python开发的,目标是兼容三种采集方式的软件 实现自动采集的基本原理都是在Linux里输入命令返回结果 import subprocess value = subprocess.getoutput('ls -lhrt') 把获得的结果用request发送给API接口入库然后展示在前端
Agent方式(应用场景:机器多的时候)
agent程序放在每台服务器
agent程序放在每台服务器,这是采集本机的数据,速度快,采集完后发送到API
subprocess.getoutput('ifconfig')
简单的agent脚本:
import subprocess import requests v1 = subprocess.getoutput('ipconfig') # 查看的是本机IP v2 = subprocess.getoutput('dir') # 查看本机 url = 'http://127.0.0.1:8000/asset.html' response = requests.post(url, data={'k1': v1, 'k2': v2}) # 使用request模块进行post进行访问 print(response.text)
数据接口API:
from django.shortcuts import render,HttpResponse def asset(request): if request.method == "POST": print(request.POST) # 打印接收的内容 return HttpResponse("1001") # 返回值 else: return HttpResponse("用post访问")
SSH类
场景:paramiko(机器少)
-
API:Django接收数据并入库
-
程序:放在中控机,中控机远程连接机器,这里借助paramiko
或者
-
Paramiko,中控机放一份远程连接服务器,执行命令,获取结果
-
将结果发送API
中控机远程连接服务器,执行,结果发送到api
中控机连接中的程序
- 注意端口和密码
- 接收到的数据是字节,需要decode
import paramiko import requests # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='192.168.11.126', port=8888, username='root', password='密码') # 执行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 获取命令输出结果 result = stdout.read() # 关闭连接 ssh.close() print(result.decode()) # 把字节数据转换 发送给API url = 'http://127.0.0.1:8000/asset.html' response = requests.post(url, data={'k1': result}) # 使用request模块进行post进行访问 print(response.text)
Saltstack
场景:机器多的时候,很多公司目前都在用
salt-master 的interface设置成主机的IP,salt-minionshe
1.安装:
参考: http://repo.saltstack.com/#rhel
Master
1. 安装salt-master yum install salt-master 2. 修改配置文件:/etc/salt/master interface: 0.0.0.0 # 表示Master的IP 3. 启动 service salt-master start
Minion
1. 安装salt-minion yum install salt-minion 2. 修改配置文件 /etc/salt/minion master: 10.211.55.4 # master的地址 或 master: - 10.211.55.4 - 10.211.55.5 random_master: True id: c2.salt.com # 客户端在salt-master中显示的唯一ID 3. 启动 service salt-minion start
注意:
在修改配置文件的时候,interface master 冒号后面要有空格
查看启动状态:
systemctl status salt-master
systemctl status salt-minion
配置:
配置主要是/etc/salt/master 和 /etc/salt/minion
minion要指定指定的IP是主的IP
2.授权:
salt-key -L # 查看已授权和未授权的slave salt-key -A 全部授权 salt-key -a salve_id # 接受指定id的salve salt-key -r salve_id # 拒绝指定id的salve salt-key -d salve_id # 删除指定id的salve
遇到错误:Minion did not return [No response]
解决:rm -rf pki/minion/minion_master.pub
重启服务:systemctl restart salt-minion
参考:
http://www.cnblogs.com/phennry/p/5419451.html
centos 修改主机名
vim /etc/hostname 通过nmtui修改,之后重启hostnamed systemctl restart systemd-hostnamed
3. 执行命令
在master服务器上对salve进行远程操作
salt 'c2.salt.com' cmd.run 'ifconfig' import salt.client local = salt.client.LocalClient() result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])
salt '*' cmd.run 'ls'
salt原理:
RPC
默认维护了消息队列:
send:master -->消息队列-->minion1/minion2
receive:minion1/minion2-->临时队列-->master
puppet(ruby)
slive 每30分钟自动执行,然后发送到master
应用场景:很多公司在使用,
参考:http://www.cnblogs.com/wupeiqi/articles/6415436.html