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

 

 

 

posted @ 2017-11-07 18:29  Adamanter  阅读(327)  评论(0编辑  收藏  举报