【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()
原文地址:https://www.cnblogs.com/st-st/p/10268910.html