这可能更像是一个serverfault.com问题,但是a)它还不存在b)我需要更多的代表:〜)
我的雇主有几百个服务器(所有* NIX)分布在多个地点。正如我怀疑的那样,我们并不知道我们拥有多少台服务器:不止一次,我惊讶地发现服务器已经运行了5年,显然除了提升地球外什么都没做温度稍微。我们有许多存储服务器信息的数据库 - Puppet,Cobbler,Nagios,Cacti,我们的负载均衡器,DNS,各种内部电子表格等等但这一切都非常不同,不完整和重叠。保持这种混乱需要时间和金钱。
所以,我想建立一个单独的数据库,其中包含每个服务器的详细信息(硬件规格,角色等),并替换上述数据库(或至少提供数据)。数据库和Web界面很可能是一个Rails应用程序,因为这是我最常见的经验。我更像是一个系统管理员而不是一个程序员。
这个问题已经解决了吗?我找不到任何真正符合要求的开源软件,而且我通常不太热衷于使用供应商提供的臃肿的解决方案。
我应该如何实现设备信息收集位?例如,添加或删除磁盘时,或者当HP更换主板时服务器序列号发生更改时,数据库更新设备记录会很棒。此信息来自许多不同的来源:dmidecode
,命令行磁盘工具,针对服务器的SNMP或其板载熄灯卡等。我可以通过自定义脚本和net-snmp
公开所有这些,或者我可以运行一个本地轮询器,将信息报告回中央数据库(可能通过RESTful接口或其他东西)。它必须易于扩展。
答案 0 :(得分:3)
这听起来像是一个寻找解决方案的很棒的LDAP问题。 LDAP专为此类事物而设计:针对数据搜索和检索进行优化的项目目录(但不一定是写入)。有许多LDAP服务器可供选择(OpenLDAP,Sun的OpenDS,Microsoft Active Directory,仅举几例......),我之前看到LDAP用于编目服务器。 LDAP非常标准化,通常搜索或阅读但不经常更新的信息“数据库”是LDAP的强项。
答案 1 :(得分:2)
我的团队已经将所有系统转储到RDF一两个月了,我们让系统实现人员在excel中创建初始数据,然后使用Perl将其转换为N3(RDF)。
我们在Gruff(http://www.franz.com/downloads.lhtml)中查看数据,并将结果RDF保存在Allegro(与Gruff相同的人员的三重商店)
它非常简单和灵活 - 没有架构意味着我们只是动态地增加数据,并且使用各种RDF查看器和推理引擎,演示选项是无法实现的。
对我来说最好的部分?没有编码,只需创建三元组并将它们放入商店,然后将它们视为图形。
答案 2 :(得分:1)
详细的机器信息的收集是一个非常令人沮丧的问题(许多供应商希望保持这种方式)。即使您可以花费大量资金,您也可能找不到解决此问题的简单方法。 IBM和惠普提供的产品可以实现您的目标,但它们非常非常昂贵,一旦您意识到您所需要的只是其提供的功能的40-50%,就会在您的口中留下不好的味道。你说你需要监视* Nix服务器......大多数(如果不是全部)unices支持RFC 1514(windows也支持这个RFC,从Windows 2000开始)。但是,RFC 1514定义的主机MIB支持有其缺点。由于它是基于SNMP的,因此需要在计算机上启用SNMP,这通常不是unix和windows机器的默认设置。这样做的原因是SNMP是在整个世界使用互联网之前创建的,因此其安全性的旧的,硬壳性质是令人担忧的。在许多环境中,出于安全原因,这可能是不可接受的。但是,如果您只处理防火墙后面的机器,这可能不是问题(我怀疑在您的情况下这是正确的)。几年前,我正在开发一款监控数百台unix和windows机器的产品。当时,我对如何从每台机器获取详细信息的机制进行了广泛的研究,例如磁盘信息,运行过程,安装的软件,正常运行时间,内存压力,CPU和IO负载(包括网络),而无需运行自定义每台机器上的客户端。此信息可以集中收集。从三四年前开始,RFC-1514主机MIB规范是获取详细实时机器信息的唯一“标准”,无需借助特定于操作系统的软件。 Sun和微软多年前宣布了一项基于WebService的计划,以解决其中的一些问题,但我怀疑它从来没有受到任何牵引,因为我现在还不记得它的营销名称。
我应该提到RFC 1514肯定不是灵丹妙药。除非您可以为每台计算机部署自定义信息收集客户端,否则您将受操作系统提供的SNMP服务的支配。 RFC-1514规范规定了几个参数是可选的,如果您的目标操作系统没有实现它,那么您将返回自定义代码以提供信息。
答案 3 :(得分:0)
我正在考虑如何自己解决这个问题,而且我认为这是基础设施的关键部分之一,无法让我们处于黑暗时代。希望这将是serverfault.com上的一个热门问题。 :)
这不仅仅是你可以安装一个工具来收集这些数据,因为这不可能便宜,但理想情况下你希望从硬件到网络上的应用程序都可以提供这些东西。
我认为唯一有意义的方法是模块化方法。设备的范围和信息类型过于完全不同,只能在一个工具下使用。此外,数据收集需要尽可能被动和异步 - 运行基础设施的现实意味着会出现中断,您不能依赖于始终获取数据。
我认为你指出的工具形成了一个可以协同工作的生态系统 - Cobbler可以从裸机安装并移交给Puppet,Puppet支持生成Nagios配置,并将配置存储在数据库中;对我来说,只有Cacti在编程插入新设备,模板等方面有点不透明但我知道这是可能的。
最终,您必须坐下来确定哪些信息对您所从事的业务非常重要,并围绕该模式设计数据库架构。然后,找出如何将所需信息输入数据库,无论是来自Facter,Nagios,Cacti还是直接snmp调用。
由于你询问了数据的收集,我想如果你有完全不同的工具包(戴尔,惠普等),那么创建一个库来尽可能地抽象它们之间的差异是有意义的,所以你的脚本只是进行标准调用,例如“checkdiskhealth”。添加新硬件时,可以添加到库中,而不必编写全新的脚本。
答案 4 :(得分:0)
听起来像大型组织会遇到的常见问题。我知道我们的(50人公司)系统管理员有一个关于每个服务器,许可证和安装的硬件的信息的访问数据库。他非常细致,但是当需要更换或修理硬件时,他从他的小数据库中了解了一切。
您和您的组织可以赞助一个开源项目,以获得您所需要的内容,并回馈社区,以便您可以免费开发其他功能(您现在可能不需要)。
答案 5 :(得分:0)
也许是一个简单的网络服务?只是接受机器名称或IP地址的东西。当服务获得输入时,它会将其粘贴到队列中并启动任务以从通知它的机器收集数据。任务的性质(SNMP询问,对Perl脚本的远程调用,无论如何)可以作为计算机信息的一部分存储在数据库中。如果任务失败,则计算机ID将保留在队列中,并定期重新轮询计算机,直到收集到信息为止。当然,您还必须在服务器上运行某种监视器,以注意某些内容已发生变化并发送通知;希望这可以通过您已经使用的任何服务器监控软件轻松完成。
答案 6 :(得分:0)
大型供应商提供了一些用于管理怪异机器的解决方案 - 例如来自IBM的一些Tivoli内容。然而,对于数百台机器来说,这可能是过度杀伤。
答案 7 :(得分:0)
有一些免费软件服务器数据库解决方案,但我不知道它们是否提供钩子来自动从具有dmidecode或SNMP的机器更新信息。我听说过(但没有个人经历,对不起),GLPI。
答案 8 :(得分:0)
我相信您正在寻找Zabbix。它是开源的,易于安装和使用。 几年前我已经安装了一个客户端,如果我没记错的话,它有一个连接到zabbix服务器的客户端应用程序,用所请求的信息更新它。 我真的推荐它:http://www.zabbix.com
答案 9 :(得分:0)
Checkout Machdb它是您正在描述的问题的开源解决方案。