• CMDB资产采集方案


    CMDB资产采集方案

    CMDB 资产采集的方案总共有四种

    • Agent
    • SSH类
    • Saltstack
    • Puttet

    方案设计,从性能上考虑

    下面前三种是用Python开发的,目标是兼容三种采集方式的软件

    原理要明白

    如何实现自动采集?
    subprocess
    Linux基本命令
    v = subprocess.getoutput('ls')

    1 Agent方式

    • API:Django接收数据并入库
    • 程序:放置在每台服务器

    应用场景:机器多的时候

    每台服务器都有程序,程序实现采集数据(执行subprocess),然后把数据发送到api

    API 接收数据并入库(Django)

    • url
    • 发送数据格式
    • 返回值

    agent程序放在每台服务器

    agent程序放在每台服务器,这是采集本机的数据,速度快,采集完后发送到API
    subprocess.getoutput('ifconfig')

    agent程序

    import subprocess
    
    v1 = subprocess.getoutput('ipconfig')  # 查看的是本机IP
    
    v2 = subprocess.getoutput('dir')  # 查看本机
    
    import requests
    
    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访问")
    

    当agent程序访问的时候,api就接收到了数据,这里还有一点是,Django中先把csrf注释

    2 SSH类

    场景:paramiko(机器少)

    • API:Django接收数据并入库
    • 程序:放在中控机,中控机远程连接机器,这里借助paramiko

    或者

    • Paramiko,中控机放一份 远程连接服务器,执行命令,获取结果
    • 将结果发送API
    ssh方式
        封装了Python的paramiko
        fabric
        ansible
    

    中控机

    远程连接服务器,执行,
    结果发送到api

    中控机连接中的程序

    • 注意端口和密码
    • 接收到的数据是字节,需要decode
    import paramiko
    
    # 创建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())  # 把字节数据转换
    
    
    import requests
    
    url = 'http://127.0.0.1:8000/asset.html'
    response = requests.post(url, data={'k1': result})  # 使用request模块进行post进行访问
    print(response.text)
    
    

    3 Saltstack

    场景:机器多的时候,公司正在用

    salt-master 的interface设置成主机的IP,salt-minionshe

    安装

    参考: 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

    授权

    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 -fr 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
    

    salt '*' cmd.run 'ls'

    salt原理:
    RPC
    默认维护了消息队列

    发送:master --》消息队列-》minon1/minon2
    
    接收:minon1/minion2--》临时队列--》master
    

    4 puppet(ruby开发的)

    slive 每30分钟自动执行,然后发送到master

    应用场景:公司在使用,

    参考:
    http://www.cnblogs.com/wupeiqi/articles/6415436.html

  • 相关阅读:
    2017.5.5上午学习内容
    2017.5.4下午学习内容
    2017.5.4上午学习内容
    2017.5.3上午学习内容
    2017.4.28下午学习内容
    2017.4.28上午学习内容
    scrapy项目的代码书写流程
    pycharm的远程连接
    mongodb的安装---linux篇
    mongo的安装和使用---windows篇
  • 原文地址:https://www.cnblogs.com/Python666/p/7241374.html
Copyright © 2020-2023  润新知