批量收集服务器变量信息并更新到数据库的工具

81次阅读
没有评论

问题描述

在公司中需要定期从数千台服务器中收集信息,并将其更新到数据库中。这些服务器已经安装了collectd以收集CPU、内存、磁盘、网络等信息。用户需要收集以下信息:
– 内核版本
– 已安装的软件包版本(如JDK、Docker等)
– 运行中的进程信息
– 一些命令的输出(lldp、docker ps等)
– 某些文件的内容(例如cat /etc/some/config | grep word

目前用户使用ansibleshell模块执行这些变量的命令,并将输出解析到NoSQL数据库中。然而,使用SSH/WINRM访问数千台服务器效率较低,即使进行了一些优化(增加forks、启用ControlMasterpipeline等)。

用户正在寻找一种更好的方法来代替ansible进行信息收集和解析。以下是用户正在调查的一些解决方案。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解决方案1: 使用facebook/osquery

facebook/osquery是一个灵活且功能强大的工具,可以用于收集变量命令的输出。它支持自定义命令以及通过编写扩展来解析输出。尽管相对于bash脚本来说可能不太容易,但它提供了更大的灵活性和强大的功能。

解决方案2: 使用collectdexec插件

使用collectd结合exec插件同样是一个直接的解决方案。你可以编写自定义脚本并通过exec插件来执行,然后将脚本的输出数据收集起来。虽然这种方法相对直接,但你需要每天将新的脚本部署到所有服务器上。

解决方案3: 使用ansible-cmdb

ansible-cmdb项目可以将Ansible的事实收集输出转换为静态的HTML概览页面,并包含系统配置信息。它支持多种类型的输出(如html、csv、sql等),并可以通过自定义数据扩展Ansible收集的信息。对于每台主机,它还显示组、主机变量、自定义变量和主机本地事实。

以下是如何使用ansible-cmdb的步骤:
1. 使用Ansible收集主机事实(facts)并将其保存为JSON文件。例如:ansible -i inventory.ini all -m setup --tree fact_data/
2. 使用ansible-cmdb将这些JSON文件转换为HTML概览页面。例如:ansible-cmdb fact_data/ > overview.html

ansible-cmdb可以帮助你更方便地查看服务器的配置信息,并且持续得到改进。

解决方案4: 使用其他监控工具

除了上述解决方案,你还可以考虑使用其他监控工具,如Nagios或Datadog,来处理进程监控和指标收集。

结论

针对收集服务器变量信息并更新到数据库的需求,你有多种选择。根据你的需求和技术偏好,可以选择facebook/osquerycollectdexec插件、ansible-cmdb或其他监控工具来满足你的需求。每种方法都有其优势和限制,需要根据实际情况进行选择和调整。

请根据具体情况选择适合你的解决方案,并确保在操作之前做好备份和测试。

正文完