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("rn") end end end ################ 配置 ################ /etc/puppet/puppet.conf [main] reports = cmdb #report = true #默认 #pluginsync = true #默认 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |