配置文件服务器数据采集

服务器数据采集第一版本:

import requests

if mode == 'agent':

  import subprocess

  res = subprocess.getoutput('ifconfig')

  ip_info = res[2:5]

  requests.post('http://127.0.0.1:8001/asset',data = ip_info)

elif mode == 'ssh':

  import paramiko

  ssh = paramiko.SSHClient()

  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

  ssh.connect(hostname='c1.salt.com',port=22,username='root',password='123')

  stdin,stdout,stderr = ssh.exec_command('ifconfig')

  result = stdout.read()

  ssh.close()

elif mode == 'salt':

  import salt.client

  local = salt.client.LocalClient()

  result = local.cmd('c2.salt.com','cmd.run',['ifconfig'])

缺点:扩展性差

优点:开发上线块

版本二:将业务逻辑的代码以插件的形式,写在src目录下面,相比于版本一,更加的清爽,业务逻辑更加的清晰

问题:无法进行随心所欲的注释

版本三:可插拔式的插件采集信息

config.py:

plugins_dict={'a':'插件类名路径',...}

__init__.py

for k,v in self.pluginsSettings.items():

  #k:basic, v:src.plugins.basic.Basic

  module_name,class_name = v.rsplit('.',1)

  m = importlib.import_module(module_name)

  cls = getattr(m,class_name)

  res = cls().process()

  print(res)

插件代码冗余:

1.写一个基类,有一个通用执行的方法,个插件继承基类

2.将函数名作为参数传入一个函数中

salt的调用:
ps:
python2:
import salt.client
local = salt.client.LocalClient()
result = local.cmd('c2.salt.com', 'cmd.run', [cmd])

python3:
import subprocess
res_cmd = "salt '%s' cmd.run '%s'" % (self.hostname,cmd)
res = subprocess.getoutput(res_cmd)
return res

错误信息的管理:

容错(代码健壮性)

import traceback

traceback.format_exc()

post数据

使用request.body获取数数据

猜你喜欢

转载自www.cnblogs.com/suncunxu/p/10871414.html