zoukankan      html  css  js  c++  java
  • 配置文件服务器数据采集

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

    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获取数数据

  • 相关阅读:
    正则表达式
    [创业指南]给海归技术创业兄弟的九个忠告
    about avast
    设计模式Hibernate
    job desc
    把INT转换成2进制等
    微服务调用跟踪
    Redis 分布式锁实现
    jquery中的$.ajax()方法
    订单从ftp写入到b2b
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10871414.html
Copyright © 2011-2022 走看看