python在系统运维中都有哪些应用?

2013-07-09 01:06:12 +08:00
 tinytub
自学了一段时间python,感觉可能是我学习的姿势不太对。总是感觉python相比于shell和perl更偏向于web开发。而对linux的运维管理偏弱。
抛开fabric等这类用python开发的运维工具不谈。自己在日常运维中运用python能做些什么?比shell脚本便捷或效率高的地方又体现在哪里?
现在只用python写过部分日志分析脚本和从页面中提取uid生成链接然后测试播放等动作的简单脚本。
其他的就不知道做些什么好了。
想请v2上的前辈多给些指点,如果能有些具体实例就更好不过了。

多谢大家
17318 次点击
所在节点    DevOps
37 条回复
terry
2013-07-10 12:00:49 +08:00
@clino Ansible 已经算是成熟好用的工具了,成立商业公司之后模块一下子多了起来。但实际应用中会发现直接通过 SSH 操作大量机器是会出现问题的,这时候有中间件(Message Queue)的并行执行工具就要出场了,比如 MCollective 和 Salt 用 ActiveMQ / RabbitMQ 做消息队列来保证一致性和可靠性。

BTW: Ansible 提供 SSH 和 Paramiko (一个 Python SSH 实现)两种连接方式,不知道后者是否也是基于上面提到的场景的考虑。
dcoder
2013-07-10 14:16:52 +08:00
以前被各种shell折腾惨了,现在基本只用Python写*nix上的脚本。

问个可能很弱的问题,那个维护得很好的 oh-my-zsh 不是支持很多版本的*nix么,
如果大家都用这个zsh,有希望统一各种不同的shell吗?
clino
2013-07-10 14:29:29 +08:00
@terry "但实际应用中会发现直接通过 SSH 操作大量机器是会出现问题的"
这个有没有具体的信息?

"Ansible 提供 SSH 和 Paramiko (一个 Python SSH 实现)两种连接方式,不知道后者是否也是基于上面提到的场景的考虑"
这个我估计没有吧,因为服务端是一样的 ssh server,协议要一致吧.用ssh有个不好的是前面连接到能执行命令需要一段时间.好处是不用另外部署服务端.
tinytub
2013-07-11 11:21:14 +08:00
@clino ssh在同时连接大量服务器的时候不稳定,有的时候可能会卡断.而且网络条件对ssh也有很大的影响.
terry
2013-07-12 10:07:34 +08:00
@clino 用 Ansible 操作10个服务器就有点慢得受不了了。

若同时操作100个服务器,Ansible 的并行执行是顺序执行的(不是多线程的),碰到网络问题,目标节点问题都不得不等待 timeout 浪费大量的时间。根本不可靠,甚至没法用。

所以出现了 MCollective / Salt 这样在中间放中间件(message broker/queue)的工具,来提高效率和可靠性。

BTW: 对 Ansible 理解有限,有错误请指出。
clino
2013-07-12 10:43:40 +08:00
@terry 我这里已经同时操作 170+ 台服务器了,没有发现你说的 "用 Ansible 操作10个服务器就有点慢得受不了了"

"若同时操作100个服务器,Ansible 的并行执行是顺序执行的(不是多线程的)"
多少线程可以配置的吧...

"目标节点问题都不得不等待 timeout 浪费大量的时间。根本不可靠,甚至没法用"
实在是没有碰到过这种问题...
terry
2013-07-12 17:06:32 +08:00
@clino SHIT 当时看 Ansible 文档的时候(还是 ansible.cc 这个域名)没有看到有 -f 这个参数。你说的设置多线程是这个 fork 进程方式?
clino
2013-07-12 17:49:48 +08:00
@terry 我没有用playbook,所有的都是在python里给的参数,例如:
runner = ansible.runner.Runner(
host_list=hl,
module_name='command',
module_args=options.cmd,
remote_user='root',
pattern='all',
forks=len(hl)
)
我经常是很暴力的用了forks=len(hl),如果有100个host就直接开了100个线程(进程?)了
goinaction
2013-07-13 14:43:56 +08:00
@clino fork应该是开了100个进程
likuku
2013-07-13 15:54:26 +08:00
@terry
@clino

或许网络环境不同,
上百台机器都在LAN内,批量ssh可能也秒杀。而10台在世界不同时区的机器就可能频断卡顿吧。
clino
2013-07-14 19:23:46 +08:00
@likuku @terry 这倒是有可能,我说的这 170+ 台机器有 3/4 是在异地城市的,不过之间都有专线连接,还算比较稳定,可视为在局域网内
terry
2013-07-16 13:39:56 +08:00
Ansible -f 的并行是用的是操作系统进程实现多线程的,据说效率不是很好的样子...

没学过 python 但还能看懂一些,源代码里挖到这一块,应该就是了...

workers = []
for i in range(self.forks):
new_stdin = os.fdopen(os.dup(sys.stdin.fileno()))
prc = multiprocessing.Process(target=_executor_hook,
args=(job_queue, result_queue, new_stdin))
prc.start()
workers.append(prc)

机器分布在几个大洲这样操作起来够呛...
clino
2013-07-16 16:35:07 +08:00
@terry "Ansible -f 的并行是用的是操作系统进程实现多线程的,据说效率不是很好的样子..."
不知道你说的效率不好体现在哪里,linux下进程的开销和线程差不了多少

"机器分布在几个大洲这样操作起来够呛..."
从论据怎么得出的这个结论,不是很明白啊
shanks
2013-07-17 17:32:03 +08:00
自从学了bash script之后,一直觉得语法严谨到蛋疼的程度。超过100行就比较难维护了。还老是记不住那些语法细节,不知何故。。。 QAQ
sykp241095
2013-12-17 15:32:44 +08:00
额,ansible 方面的话,推荐自己写的:https://github.com/douban/farmer
dennyzhang
2016-09-14 08:42:42 +08:00
考虑将 Bash 的运维脚本换成其它。在纠结是选 Python 还是 Golang.
lmx07
2017-10-03 16:21:21 +08:00
大家好,在下的拙作《 Python Linux 系统管理与自动化运维》正式发布了,大家可以看一看。

书籍的完整目录:

https://github.com/lalor/python_for_linux_system_administration.git

书籍介绍:本书以 Linux 系统管理为线索,以 Python 语言为载体,从工具、脚本、方法等多个方面讲解了如何在 Linux 系统管理和自动化运维中使用 Python 来解决各种问题,包含大量案例和最佳实践。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/75193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX