• CMDB之数据采集


    一. 四种方式

    1. Agent方式

    api
        - URL
        - 发送数据格式
        - 返回值
    agent 
        - 采集数据,发送数据
    好处:
        - 简单
        - 采集速度快,响应速度快
    坏处:
        - 每台agent装的插件多,性能损耗严重
        - 更新需要更新每台agent服务器
    ####server
    
    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    
    def asset(request):
        if request.method == "POST":
            print(request.POST)
            # 写入到数据
            return HttpResponse('1002')
        else:
            return HttpResponse('姿势不对')
    
    
    ####agent
    import subprocess
    import requests
    
    v1 = subprocess.getoutput("ifconfig")
    value1 = (v1[51:55])
    
    v2 = subprocess.getoutput("dir")
    value2 = (v2[14:20])
    
    url = "http://127.0.0.1:8000/asset.html"
    
    response = requests.post(url,data={"k1":value1,"k2":value2})
    print(response.text)
    代码在此

    2. ssh方式

    #ssh方式
        - fabric(本质是Paramiko)
        - ansible(本质是Paramiko)
        - Paramiko
     
     
    #Paramiko模块
     
    原理: Paramiko中控机远程连接服务器,执行命令,获取结果,将结果发送Api
    应用场景:服务器少,ssh可以忽略 
     
    好处
       - 无需Agent
    坏处
       - 连接客户机时每次需要ssh连接,速度慢
     
     
    http://www.cnblogs.com/wupeiqi/articles/5095821.html
    

     ssh方式:

    ##server
    
    from django.shortcuts import render,HttpResponse
    
    # Create your views here.
    
    def asset(request):
        if request.method == "POST":
            print(request.POST)
            # 写入到数据
            return HttpResponse('1002')
        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=22, username='root', password="123456")
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ifconfig')
    
    # 获取命令结果
    result = stdout.read()[0:20]
    
    # 关闭连接
    ssh.close()
    
    url = "http://127.0.0.1:8000/asset.html"
    
    response = requests.post(url,data={"k1":result})
    print(response.text)

     3.saltstack方式

    在master上运行:

    shell >> salt 'c2.salt.com' cmd.run  'ifconfig'

    基于Salt的api方式:

    利用saltstack的salt.client模块可以在python的命令行下或者python脚本里执行相应的salt命令

    master端想要执行类似 salt '*' cmd.run 'uptime' 在saltclient里可以这么写

    master
    >>
    import salt.client local
    = salt.client.LocalClient() local.cmd('*', 'cmd.run', ['uptime'])

    得到jid可以通过get_cache_returns(jid)方法来获取执行结果,在没有执行完成以前是为空的所以可以写一个while来一直读取结果直到读取到或者超出规定时间为止

    import salt.client
    local = salt.client.LocalClient()
    t = 0
    jid = local.cmd_async('*', 'cmd.run', ['uptime'])
    while not local.get_cache_returns(jid):
        time.sleep(1)
        if t == 8:
            print 'Connection Failed!'
            break
        else:
            t+=1
    print local.get_cache_returns(jid)

    minion端可以用来直接在minions上执行命令或者也可以用来写returnner的时候获取minion的grain信息等

    import salt.client
    caller = salt.client.Caller()
    caller.sminion.functions['cmd.run']('ls -l')

    获取grains的信息

    import salt.client
    caller = salt.client.Caller()
    caller.sminion.functions['grains.items']  #grains.items代表获取全部的grains信息
    caller.sminion.functions['grains.item']('os') #想要特定的grains信息用grains.item然后在后面指定
  • 相关阅读:
    uniapp 请求附近地址列表
    uniapp 图片视频上传
    城市定位
    日历签到
    uniapp拼团倒计时函数
    时间过滤器
    倒计时函数
    vuex的使用
    毛玻璃效果
    Pullword 中文分词
  • 原文地址:https://www.cnblogs.com/pyyu/p/7494613.html
Copyright © 2020-2023  润新知