• 【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()
  • 相关阅读:
    SSH_框架整合2—查询显示
    SSH_框架整合1
    eclipse中tomcat发布失败(Could not delete May be locked by another process)原因及解决办法
    错误:javax.servlet.jsp.PageContext can not be to a type
    链表【6】
    欢迎使用CSDN-markdown编辑器
    剑指offer系列62---两个链表的公共结点
    剑指offer系列61---数组中的逆序对
    Git常用命令大全
    vue脚手架搭建的具体步骤
  • 原文地址:https://www.cnblogs.com/st-st/p/10268910.html
Copyright © 2020-2023  润新知