• CMDB实现的四种方式


    一, Agent(基于shell命令实现)

    Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库

    优点:速度快 缺点:需要为每台服务器部署一个Agent程序

    二,Paramiko类(SSH形式,基于Paramiko)

    中控机在获取未采集资产信息的服务器(服务器主机名,密码),依赖于Paramiko(py模块)通过SSH方式去获取

    优点:无Agent  缺点:速度慢

    如果在服务器较少的情况下,可应用此方法

    import paramiko
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # 连接服务器
    ssh.connect(hostname="10.0.0.10", port=22, username="root", password="123")
    
    # 执行命令
    stdin,  stdout, stderr = ssh.exec_command('df)
    
    # 获取命令结果
    result = stdout.read()
    
    # 关闭连接
    ssh.close()

     三, SaltStack

    此方案本质上和第二种方案大致是差不多的流程,中控机在获取到未采集资产信息的服务器(主机名),再而将命令放入一个队列中,服务器来获取。服务器将结果放入另一个队列中,中控机获取将服务信息发送到API进而录入数据库。

    基于SaltStack的master上的pillar以及远程执行命令实现

    import salt.client
    local = salt.client.LocalClient()
    local.cmd("*", "cmd.run", ["whoami"])
    

    优点: 快, 开发成本低, 缺点: 依赖第三方工具

    四, Puppet(ruby开发)

    基于Puppet的factor和report功能的实现

    puppet中默认自带了5个report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路径下。如果需要执行某个report,那么就在puppet的master的配置文件中做如下配置:
     
    ######################## on master ###################
    /etc/puppet/puppet.conf
    [main]
    reports = store #默认
    #report = true #默认
    #pluginsync = true #默认
     
     
    ####################### on client #####################
     
    /etc/puppet/puppet.conf
    [main]
    #report = true #默认
       
    [agent]
    runinterval = 10
    server = master.puppet.com
    certname = c1.puppet.com
    

      

    1, 自定义facotr示例

    在 /etc/puppet/modules 目录下创建如下文件结构:
     
    modules
    └── cmdb
        ├── lib
        │   └── puppet
        │       └── reports
        │           └── cmdb.rb
        └── manifests
            └── init.pp
     
    ################ cmdb.rb ################
    # cmdb.rb
    require 'puppet'
    require 'fileutils'
    require 'puppet/util'
       
    SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
       
    Puppet::Reports.register_report(:cmdb) do
      desc "Store server info
        These files collect quickly -- one every half hour -- so it is a good idea
        to perform some maintenance on them if you use this report (it's the only
        default report)."
       
      def process
        certname = self.name
        now = Time.now.gmtime
        File.open("/tmp/cmdb.json",'a') do |f|
          f.write(certname)
          f.write(' | ')
          f.write(now)
          f.write("
    ")
        end
       
      end
    end
     
     
    ################ 配置 ################
    /etc/puppet/puppet.conf
    [main]
    reports = cmdb
    #report = true #默认
    #pluginsync = true #默认
    View Code
  • 相关阅读:
    微信公众号开发:3、自定义菜单
    微信公众号开发:2、消息处理
    微信公众号开发:1、服务器配置
    基于.NetCore3.1系列 —— 日志记录之初识Serilog
    基于.NetCore3.1系列 —— 日志记录之日志核心要素揭秘
    基于.NetCore3.1系列 —— 日志记录之自定义日志组件
    基于.NetCore3.1系列 —— 日志记录之日志配置揭秘
    基于.NetCore3.1系列 —— 使用Swagger导出文档 (番外篇)
    基于.NetCore3.1系列 —— 使用Swagger导出文档 (补充篇)
    基于.NetCore3.1系列 —— 使用Swagger做Api文档 (下篇)
  • 原文地址:https://www.cnblogs.com/chenrun/p/10197584.html
Copyright © 2020-2023  润新知