zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Baidu aip创建TTS、ASR应用许可并申请免费试用
    网页设计与制作(基本步骤)
    2021新的一年要努力变强变好
    CentOS7查看和关闭防火墙
    CentOS7安装RabbitMQ
    uwsgi启动flask项目(venv虚拟环境)
    centos7 配置python虚拟环境以及使用-virtualenv
    uwsgi下载安装配置(四)http、http-socket和socket配置项详解
    Ubuntu 16.04安装Nginx
    uwsgi下载安装配置(三)uwsgi配置参数讲解
  • 原文地址:https://www.cnblogs.com/chenrun/p/10197584.html
Copyright © 2011-2022 走看看