zoukankan      html  css  js  c++  java
  • 【CMDB】获取服务器数据

    一、通过agent的方式

    原理:服务器定制执行py文件通过subprocess模块采集数据发送给数据收集的机器

    数据收集的机器:192.168.11.62

    服务器:192.168.11.169

    数据收集的机器创建Django项目

    # urls.py
    from django.conf.urls import url
    from .views import collect
    
    urlpatterns = [
        url('^agent/',collect),
    ]
    
    
    # views.py
    from django.shortcuts import render,HttpResponse
    
    def collect(request):
        print("------------------------------")
        if request.method == 'POST':
            value = request.POST
            print(value)
        return HttpResponse("OK")

    服务器192.168.11.169运行的代码

    运行命令 :python3 run.py

    import subprocess
    import requests
    
    url = 'http://192.168.11.62:8000/api/agent/'
    # 通过服务器直接发送数据
    def get_meg():
        data = {}
        value = subprocess.getoutput('dir')
        data['k1'] = value
        # 向后端发送数据
        requests.post(url,data=data)
    
    
    
    if __name__ == '__main__':
        get_meg()

    二、通过ssh的方式

    原理:通过中控机的paramiko模块ssh远程连接服务器获取数据发送给数据收集的机器

    服务器:192.168.11.169

    中控机:192.168.11.59

    数据收集的机器:192.168.11.62

    数据收集的机器创建Django项目

    # urls.py
    from django.conf.urls import url
    from .views import collect
    
    urlpatterns = [
        url('^agent/',collect),
    ]
    
    
    # views.py
    from django.shortcuts import render,HttpResponse
    
    def collect(request):
        print("------------------------------")
        if request.method == 'POST':
            value = request.POST
            print(value)
        return HttpResponse("OK")

    中控机

    运行命令 :python3 run.py

    import subprocess
    import requests
    import paramiko
    
    url = 'http://192.168.11.62:8000/api/agent/'
    
    # 通过中控机采集数据
    def get_meg2():
        # 创建SSH对象
        ssh = paramiko.SSHClient()
        # 允许连接不再know_hosts文件中的主机
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # 连接服务器
        ssh.connect(hostname='192.168.11.169',port=22,username='root',password='123456')
    
        # 执行命令,stdin是继续执行,stdout是返回的结果,stderr出错
        stdin,stdout,stderr = ssh.exec_command('df -h')
        result = stdout.read()
    
    
        # 向后端发送
        requests.post(url,data={'k1':result})
    
        ssh.close()
    
    
    if __name__ == '__main__':
        get_meg2()

    三、通过saltstack软件的方式

    原理:中控机是salt-master,服务器是salt-minion,master执行命令获取后发送至数据收集的机器

    服务器:192.168.11.169

    中控机:192.168.11.59

    数据收集的机器:192.168.11.62

    服务器

    yum install epel-release -y
    yum clean all && yum makecache
    yum install salt-minion -y
    
    # 修改配置文件
    vim /etc/salt/minion
    
    '''找到master并修改'''
    master:192.168.11.59
    
    
    
    # 启动服务
    systemctl start salt-minion

    中控机

    yum install epel-release -y
    yum clean all && yum makecache
    
    # 安装
    yum -y install salt-master
    
    # 修改配置文件
    vim /etc/salt/master
    
    '''找到interfacce并修改
    interface: 0.0.0.0
    
    # 启动服务
    systemctl restart salt-master
    salt-key -L                    # 查看已授权和未授权的slave
    salt-key -a  salve_id      # 接受指定id的salve
    salt-key -r  salve_id      # 拒绝指定id的salve
    salt-key -d  salve_id      # 删除指定id的salve

    查看有未授权的

     中控机运行命令

     中控机执行的代码

    import subprocess
    import requests
    import paramiko
    
    # salt-master采集数据发送给后端
    def get_meg3():
        data = {}
        value = subprocess.getoutput('salt "192.168.11.169" cmd.run "df -h"')
        data['k1'] = value
        # 向后端发送数据
        requests.post(url,data=data)
    
    
    if __name__ == '__main__':
        get_meg3()
  • 相关阅读:
    1039 到底买不买 (20分)
    流密码
    Socket网络编程:互相通讯
    1036 跟奥巴马一起编程
    1033 旧键盘打字
    1029 旧键盘
    1015 德才论 (25分)
    BUU_Real_刷题记录
    vue3 composition api 对比 react hooks
    vue3 文档相关
  • 原文地址:https://www.cnblogs.com/st-st/p/10268910.html
Copyright © 2011-2022 走看看