如何在Ansible或Python中高效地收集远程主机信息?

ac1kyiln  于 16天前  发布在  Python
关注(0)|答案(1)|浏览(10)

我想收集远程主机的一些信息,我尝试使用Ansible来执行一些shell命令,但是在一些机器上执行时,我发现它的效率有点慢,并且消耗了很多资源。
下面是我编写的一些shell命令,用于收集所需的信息。

# Startup status of some services
chkconfig --list ip6tables| awk '{$1=""; print $0}' | sed 's/\s\s*/ /g'
# Some kernel parameters, such as vm.swappiness
sysctl vm.swappiness|awk '{print $3}'
# Other parameters that need to read the file
cat /etc/logrotate.conf |grep -i '^rotate'|awk '{print $2}'
# some database information
lsnrctl status | grep -v 'Connecting'|grep -Po '(?<=HOST=)[^)]+|(?<=PORT=)\d+'|sed 'N;s/\n/:/'

我使用Ansible的shell模块来执行,但在某些机器上,它执行得很慢,大约55个类似的命令,执行时间超过100秒。
有没有其他方法可以提高速度和减少资源消耗?

hi3rlvi2

hi3rlvi21#

根据您目前的模糊描述,没有任何测量和进一步的细节

  • 我尝试用Anisble执行一些shell命令,但是在一些机器上执行的时候,我发现它的效率有点慢,而且消耗了很多资源......我用Ansible的shell模块执行,但是在一些机器上,它执行的比较慢,大概有55个类似的命令,执行需要100多秒。*

这似乎是预期的行为,因为对于每个命令,创建新的连接,将小程序发送到远程节点以供执行,并且收集结果并通过线路将其发送回控制节点。
根据

  • 是否有其他方法可以提高速度并减少资源消耗?*

我知道您对性能提升很感兴趣。当然,简短的回答是肯定的。对于如何实现这一目标,您可能需要考虑某些问题域。在这里提供一个单一的问题答案太复杂了。
1.了解一下shell模块是如何工作的,以及为什么会遇到这种情况。
1.了解分布式计算、本地执行、远程执行等。在哪里生成和收集数据和信息?如何生成和收集数据和信息?您可能会对远程节点的自定义事实感兴趣,这些事实可以由远程节点自己预先生成。为此,将Adding Custom Facts发送到远程节点,然后通过gather_facts收集所有结果。单次运行setup模块,无需任何其他剧本代码。
1.根据您未进一步描述的用例,您可能会利用可用的Ansible模块或实现自己的自定义模块,例如数据库信息。
经过研究,阅读和考虑到某些问题域,并解决他们适当的,这将是可能的减少运行时间到1/4到1/10容易,其中我已经看到了高达1/100的结果。

部分进一步阅读

除了已经连接的...

我们建议您阅读它们,甚至按照那里的链接。

摘要

总而言之,要避免将shell模块用于一长串的单个命令和您的特定用例。

相关问题