一、浅析
就目前而言,现在对资产采集一共有四种方式,分别是:
- Agent
- SSH类,如:paramiko
- saltstack
- puppet(ruby开发)
对于前面三个都是由Python语言开发,最后一个为Ruby开发,因此我们重点介绍前面三个的具体内容。
二、Agent
1、特点及应用场景:
适用于服务器多,由每一个服务器端将数据发送至API接口,API与数据库交互完成数据通信,性能相对比较高,速度快,但是每一个服务器都必须安装Agent。
2、用法:
import subprocess
import requests
#每一个服务器,都有这么一个py文件。
v1=subprocess.getoutput('ipconfig') #执行Windows命令,返回信息赋值给v1
value=v1[68:88] #字符串切片取值
v2=subprocess.getoutput('dir') #同上
value2=v2[0:10]
url="http://127.0.0.1:8000/asset.html" #API接口URL
response=requests.post(url,data={'k1':value,'k2':value2}) #向API通过post方式,data以字典方式传值,返回一个对象。
print(response.text) #打印对象的text信息
三、SSH类 (如:paramiko)
1、特点及应用场景:
适用于服务器少,性能要求不高,它主要通过中控机上安装paramiko实例出对象,由对象对每一台服务器通信获取数据,相对耗时,属于串联,上一个结束后,进行下一个。
2、用法:
import paramiko
import requests
# 创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接其中一台服务器
ssh.connect(hostname='192.168.145.142',port=22,username='root',password='123321')
# 发送执行命令
stdin,stdout,stderr = ssh.exec_command('ifconfig')
# 获取命令结果
result=stdout.read()
# 关闭连接
ssh.close()
value=result[68:88] #字符串切片
print(value)
# 向API以POST方式发送数据
url='http://127.0.0.1:8000/asset.html'
response=requests.post(url,data={'k1':value})
print(response.text) #打印API返回信息
三、SaltStack
1、概述:SaltStack简单来说是一个基础架构管理工具,这个比较抽象,说白就是一个运维管理工具,底层是使用python实现,C/S架构,支持分布式部署,据说可以轻松管理上W台服务器,和Puppet这类工具很类似,其主要的功能:
- 基于Key的远程连接并执行命令;
- 强大的搜索器,多种方式过滤服务器;
- 灵活的远程部署实现方式;
- 基于YMAL格式对文件,用户,用户组及服务等资源灵活管理;
2、特点及应用场景:
当前应用场景已经使用SaltStack,服务器数量多,它主要是在中控机安装salt-master,服务器安装salt-minion,通过队列完成通信,获取数据。
3、安装及配置
yum -y install salt-master /安装 rpm -aq|grep salt-master /检测 salt-master配置文件: /etc/salt/master
yum -y install salt-minion /安装 rpm -aq|grep salt-minion /检测 salt-minion配置文件: /etc/salt/minion
salt-key -L /列出所有key,key格式是minion-id,如果没有配置minion-id,则是主机名 salt-key -A /接受所有key salt-key -a “ZK-YJY-APP-01” /接受指定的key salt-key -R /拒绝所有未接受的key salt-key -D /删除所有key salt-key -d “ZK-YJY-APP-01” /删除指定的key
4、安装注意事项:
- 是否安装gcc? (yum install gcc -y)
- 是否关闭防火墙? (systemctl stop firewalld.service)
- 配置后是否重启服务? (service salt-master restart 或 service salt-minion restart --配置完成都要重启一下)
5、用法:
在master服务器上对salve进行远程操作:
1、基于shell的命令
salt '主机名或配置的ID' cmd.run '被执行的命令'
2、基于Salt连接API
import salt.client
local = salt.client.LocalClient()
result = local.cmd('主机名或配置的ID', 'cmd.run', ['被执行的命令'])
其他内容详情请戳友情链接 ☛:猛戳这里