Python自动化运维:技术与最佳实践.html.pdf

上传人:紫竹语嫣 文档编号:5514559 上传时间:2020-05-27 格式:PDF 页数:172 大小:8.20MB
返回 下载 相关 举报
Python自动化运维:技术与最佳实践.html.pdf_第1页
第1页 / 共172页
Python自动化运维:技术与最佳实践.html.pdf_第2页
第2页 / 共172页
Python自动化运维:技术与最佳实践.html.pdf_第3页
第3页 / 共172页
Python自动化运维:技术与最佳实践.html.pdf_第4页
第4页 / 共172页
Python自动化运维:技术与最佳实践.html.pdf_第5页
第5页 / 共172页
点击查看更多>>
资源描述

《Python自动化运维:技术与最佳实践.html.pdf》由会员分享,可在线阅读,更多相关《Python自动化运维:技术与最佳实践.html.pdf(172页珍藏版)》请在三一文库上搜索。

1、本书赞誉 市面上介绍互动的、面向对象的Python编程语言的书有很多,其强大而又灵活的特性,使其成为很多企图通过工具来实现工作(半)自动化的运营同学的首选。更难得的是,本书作者以其在腾讯游戏 运营的工作经验,辅以大量实际的案例来讲述了他是如何使用Python来解决诸如监控、安全、订制报表和大数据应用等问题,以及构建一个自动化运维的平台来提升运维工作效率,值得一看。 腾讯互动娱乐运营部副总经理 崔晓春 Python自动化运维:技术与最佳实践是结合刘天斯先生超过十年,在互联网行业“天涯在线”及“腾讯”等的工作经验,实际贴近工作应用场景所撰写的书籍,没有浮夸的文藻修饰,只有实际的 落地执行和动手操做

2、,可以作为大家在工作中的工具书。 全书以系统信息的了解、采集、监控,以及信息良好地输出为开头,以提升个人工作效率的基础运维工具为承接,再深入介绍集中化管理海量机器、系统的方案,并且搭配实际的例子进行介绍,相信 能够覆盖读者的大部分应用场景需求,也能够给予读者相关领域的入门指引。 刘天斯先生的精神也是很值得推广和赞赏的,在繁忙的工作之余,能够思考、总结,并且能够以文字的方式与更多的人分享和传承,是除了书籍本身之外,我学习到的重要收获。 腾讯互动娱乐运营部数据中心总监 孙龙君 在移动互联和大数据时代,无论是出于对效率的追逐,还是应对海量规模运维,自动化运维都是企业的必然选择。Python因为具有简

3、单、灵活、功能强大和适合脚本处理等优点,在运维领域被广泛使 用,让很多运维工程师从烦琐的日常工作中解放出来。 天斯是运维领域的资深专家,在互联网行业工作多年,不仅具备解决各种运维难题的强大能力,拥有多项专利,还开发过多个运维利器,非常受欢迎。本书是国内第一本讲述Python如何应用在自动化 运维领域的著作,是基于天斯对Python自动化运维的深入研究,以及在海量互联网实战经验中总结提炼而来,具有高度可读性和实战价值。 腾讯架构平台部运维服务中心总监 孙雷 刘天斯和我相识于腾讯,期间我正在负责腾讯云平台相关工作。腾讯有一个优良的新员工培养体系,那就是导师制度。有幸作为天斯的导师,让我接触并逐渐深

4、入了解天斯。所以当天斯找到我为本书 写推荐语时,我欣然应允,因为共事期间天斯给我留下了深刻的印象。时至今日,在中国的互联网企业里,我认为天斯都是最优秀的架构师之一。 天斯来腾讯工作之前,在中国著名的天涯社区负责整个社区的运维工作,经历了天涯社区从Windows平台到开源架构的大改造,因此对B/S相关产品的技术架构和细节非常熟悉;而天斯又是一个在技 术输出领域非常活跃的人,自己维护的技术博客荣获2010年度十大杰出IT博客,在中国互联网技术领域小有名气。 记得来腾讯不到两个星期,天斯就向我提交了一份关于腾讯业务自动化运维的技术文档,从业务的部署到监控再到容灾等,都理解得较为深刻。这份输出文档让我

5、眼前一亮,当时第一感觉是这个典型 的在生活中不善言辞的IT男,一定对云计算中的自动运维管理有独到的思维和沉淀。 Python语言作为获得2010年度编程大奖的语言,具备诸多优点:简单、开源、速度快、可移植性强、可扩展性强、面对对象、具备丰富的库等;更可贵的是,作为“胶水语言”,可以把Python嵌入 C/C+程序等,从而向程序用户提供脚本功能。 本书从互联网业务自动运维的场景出发,以Python语言为基础,总结了大量的实战案例,这些都是作者在十余年的大型互联网运维工作中的宝贵经验,相信会给读者带来不少的启发。 更难能可贵的是,作者能从通俗易懂的角度出发,由浅入深地剖析Python自动运维管理之

6、道。因此,目前Python水平处于各种层次的读者均能有效地阅读和吸收,各取所需。 最后,感谢天斯能给中国互联网从业者带来这么好的分享,感谢我们的老东家中国互联网的黄埔军校腾讯培养了一批又一批的杰出架构师。 开卷有益,我想应该就是指的此类书籍吧。 微赢宝创始人 许明 “Operation”,运维在互联网时代一直有着举足轻重的地位,而近两年运维本身这个群体也变得强大起来,最为显著的特征就是运维人员所出的书越来越多,而都以“专”、“精”为卖点。这也是 作为一名运维人员值得骄傲的地方。 伴随着“云时代”、“物联网”的到来,无论数据,还是服务器规模都达到了空前的庞大,企业对运维工作人员的要求也由之前的运

7、维维护转为“DevOps”,即研发型运维;在这个充满挑战的时 代,任何一个岗位都需要保持持续学习的状态,而运维更不例外。 “Python”,运维的标配语言,比起Bash、Perl、PHP等,它在系统管理上有着强大的开发能力和完整的工具链。易读易写,兼具面向对象和函数式风格,还有元编程能力都是它的优势所在。最关键 的地方在于,可以利用Python系统化地将各个工具进行整合,对运维常用工具进行二次开发,形成一套完整的运维体系。“一套完整的产品生命周期”,这才是运维需要做的事情。 运维“三板斧”:系统安装、命令执行、配置管理,再加上监控与日志分析等这些都是我们最常用的工具,而它们都有Python的版

8、本,例如:Fabric、Ansible、Saltstack、Func等,这些都将在本书 Python自动化运维:技术与最佳实践中向大家一一呈现,安装、用法、技巧、特别是大量实例一网打尽。为了让读者更好地系统学习,天斯又写了前端以及从“0”开始打造一个运维平台,可谓用心 良苦。 未来,中小型企业将精减运维,不会开发的运维,竞争力将显得更加单薄,相信天斯多年运维开发经验的结晶能帮到大家。 西山居架构师,Puppet实战作者 刘宇 初识刘天斯先生是邀其参加我在ChinaUnix举办的活动“千万级pv高性能高并发网站架构与设计交流”,刘天斯先生提出的架构方案,堪称成熟、缜密、灵动,足见其在系统运维领域

9、的功力。纵 观Python自动化运维:技术与最佳实践一书,都是出自于刘天斯先生在天涯及腾讯工作的一线宝贵经验,相信无论是开发人员还是系统管理员们均能从中学习到新的知识点,使自己的职业生涯更上一 个新的台阶。 融贯资讯系统架构师 余洪春 前言 为什么要写这本书 随着信息时代的迅速发展,尤其是互联网日益融入大众生活,作为这一切背后的IT服务支撑,运维角色的作用越来越大,传统的人工运维方式已经无法满足业务的发展需求,需要从流程化、标准化、 自动化去构建运维体系,其中流程化与标准化是自动化的前提条件,自动化的最终目的是提高工作效率、释放人力资源、节约运营成本、提升业务服务质量等。我们该如何达成这个目标

10、呢?运维自动化工 具的建设是最重要的途径,具体包括监控、部署变更、安全保障、故障处理、运营数据报表等。本书介绍如何使用Python语言来实现这些功能点,以及Python在我们的自动化运维之路上发挥作用,解决 了哪些运维问题等。 为什么是Python?Python是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年年底发明,具有简单易学、开发效率高、运行速度快、跨平台等特点,尤其是具有大量第三 方模块的支持,其中不乏优秀的运维相关组件,例如Saltstack、Ansible、Func、Fabric等。大部分运维人员为非专业开发人士,对他们而言,选择一门上手快、

11、技术门槛低的开发语言非常重要。由于 Python具有脚本语言的特点,学习资源多,社区非常活跃,且在Linux平台默认已安装等优势。Python已经是当今运维领域最流行程的开发语言之一。 2003年毕业后,我的第一份工作是当PHP程序员,人力紧张时还要兼顾美工的工作。时常回想,其实也只有在小公司才能修炼出“十八般武艺”。在“非典”肆虐的岁月,大部分公司都闭门不招聘, 一个毕业生能有这样的机会锻炼也显得尤为珍贵。工作中一次偶然的机会看到导师诗成兄在黑漆漆的界面中输入不同指令,第一感觉非常震撼,很酷,联想到黑客帝国电影中的画面,与之前接触到的 Windows系统完全不一样,后来才晓得是Redhat

12、9(红帽9)。此后很长的一段时间里,整个人完全沉醉在Linux的世界里,处于一种痴迷的状态,那时我还是一个程序员。 到了2005年10月,看到隔壁公司招聘一名Linux系统工程师,抱着试一试的心态去面试,结果出乎意料,我被录用了,这样我就找到了第二个东家天涯社区。人生的第一个转折点在此酝酿,由于 赶上了公司快速发展的阶段,接触到了很多开源技术,包括LVS、Squid、Haproxy、MongoDB、MySQL、Cfengine等,并且不断在生产环境中应用所学的技术,取得了非常不错的效果,重点业务的高 可用持续保持在99.99%。期间新的问题也陆续出现,包括如何更好整合各类开源组件,发挥其最大效

13、能,以及如何高效运营。不可否认,具有开发背景的运维人员有着先天优势,可以在不同角色之间进行 思考,扩大视野。期间我参与了推动大量标准化、规范化的建设,以此为前提,开发了“SDR1.0-Linux主机集中管理”、“天涯LVS管理系统”、“天涯服务器管理系统(C/S与B/S版)”、“服务器机柜 模拟图平台”、“Varnish缓存推送平台V1.0”等平台,这些平台在很大程度上改变了运维人员手工作坊式的工作模式。在释放人力的同时,我看到国内其他公司的同仁也在做同样的事情,突然间有一个想 法,就是开源。此时已经是2009年,这个想法也得到系统部经理小军认可,同年12月陆续在平台托管,让业界更深入了解天涯

14、社区的技术架构。凭着这些作品及分享的技术文章,我的博 客“运维进行时”(http:/ 同。 再谈谈如何与Python结缘。接触Python是从简明Python教程开始,由于我有Perl与PHP的基础,学习Python没有太大压力。事实上,Python的简洁、容易上手以及大量第三方模块等特点,深 深吸引了我,让我第二次沉醉于知识的海洋。我很快深入学习了Func、Django框架、SQLAlchemy、BeautifulSoup、Pys60、wxPython、Pygame、wmi等经典模块,同时将所学知识应用到运维体系 中,解决在工作中碰到的问题。例如,开发的“多节点应用延时监控平台”解决了多运营

15、商网络环境下的业务服务质量监控问题;开发的“Varnish&Squid缓存推送平台”解决了快速刷新缓存对象的问 题。再例如,删除敏感帖子的时效性要求非常高,需要在后台触发删除后立即生效,与缓存推送平台对接后很好地解决了这一问题;天涯服务器管理系统(C/S、B/S、移动版)实现自助、智能、多维度接 入,提高了运维效率,减少了人工误操作,释放了人力资源,同时标准化与流程化得到技术保障与实施落地。 天涯社区是我个人职业生涯的培育期,让我重新审视自我,明确了未来的规划与定位。2011年9月是我职业生涯的成长期的开始,加盟了腾讯,负责静态图片、大游戏下载业务CDN的运维工作,接触 到庞大的用户群、海量的

16、资源(设备、带宽、存储)、世界级的平台、人性化的工作氛围以及大量优秀的同事。所有的这些都深深地吸引着我,也让我的视野与工作能力得到前所未有的提升。分工细化产 生运维工作模式的差异,从“单兵作战”转向“集团军作战”。我继续保持着对新技术的狂热,思考如何使用Python在运维工作中发挥作用。工作期间研究了大量高级组件,包括Paramiko、Fabric、 Saltstack、Ansible、Func等,这些组件有了更高级的封装,强大且灵活,贴近各类业务场景。我个人也基于Python开发了集群自动化操作工具yorauto,在公司各大事业群广泛使用,同时入选公司 精品推荐组件。我的部分个人发明专利使用

17、Python作为技术实现。目前我也关注大数据发展趋势,研究Python在大数据领域所扮演的角色。 回到主题“为什么要写这本书”,这一点可以从51CTO对我的专访中找到答案。当时的场景是这样的: 51CTO:您对开源是如何理解的?天涯社区在过去两年间陆续开源了包含LVS管理系统、Varnish缓存推送平台、高性能数据引擎memlink等好几个项目,业内人士对此都十分关注,您认为这给整个产业 带来了哪些好处?身为天涯社区的一位运维人员,您认为在这个过程中自己的价值在哪里? 刘天斯:开源就是分享,让更多人受益的同时自己也在提高。经常看到很多朋友都在做监控平台、运维工具。事实上功能惊人相似,大家都在做

18、重复的工作,为什么不能由一个人开源出来,大家一起 来使用、完善呢。这样对整个行业来讲,这块的投入成本都会降低,对个体来讲也是资源的整合。如果形成良性循环,行业的生态环境将会有很大程度的改善。本人热衷于开源技术,同样也愿意为开源贡 献自己一分微薄之力,希望更多的人能支持开源、参考开源。 这就是我的初衷,也是答案。写书的意义在于将10年的工作沉淀、经验、思路方法做个梳理与总结,同时与大家分享。最终目的是为每个渴望学习、进步、提升的运营人员提供指导。 读者对象 系统架构师、运维人员 运营开发人员 Python程序员 系统管理员或企业网管 大专院校的计算机专业学生 如何阅读本书 本书分为三大部分。 第

19、一部分为基础篇(第14章),介绍Python在运维领域中的常用基础模块,覆盖了系统基础信息、服务监控、数据报表、系统安全等内容。 第二部分为高级篇(第512章),着重讲解Python在系统运维生命周期中的高级应用功能,包括相关自动化操作、系统管理、配置管理、集群管理及大数据应用等内容。 第三部分为案例篇(第1316章),通过讲解4个不同功能运维平台案例,让读者了解平台的完整架构及开发流程。 说明: 书中的代码以“【路径】”方式引用,测试路径为“/home/test/模块”、“/data/www/项目”。 书中涉及的所有示例及源码的Github地址为https:/ 其中第三部分以接近实战的案例来

20、讲解,相比于前两部分更独立。如果你是一名经验丰富Linux管理员且具有Python基础,可以直接切入高级篇。但如果你是一名初学者,请一定从基础篇开始学习。 本书不涉及Python基础知识,推荐新手在线学习手册:简明Python教程与深入Python:Dive Into Python中文版。 勘误和支持 由于笔者的水平有限,且编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,特意创建一个在线支持与应急方案问答站点:http:/。你可以将书中的 错误发布到“错误反馈”分类中,同时如果你遇到任何问题或有任何建议,也可以在问答站点中发表,我将尽量在线上提供最满意的解答。我也

21、会将及时更新相应的功能更新。如果你有更多的宝贵意见, 欢迎发送邮件至邮箱,期待能够得到你们的真挚反馈。 致谢 首先要感谢Guido大神,是他创立了Python语言,同时也要感谢提供Python优秀第三方模块的所有作者,开源的精神与力量在他们身上体现得淋漓尽致。 感谢钟总、王工、诗成兄,是他们给予我第一份工作,也为个人此后的成长提供了非常多的指导。感谢天涯社区的邢总(968)、王总(建科)、小军,是他们提供了这么优秀的平台,让我有机会可 以尽情施展才能,体现个人价值。感谢腾讯的Willim(崔晓春)、Tomxiao(肖志立)、Thundersun(孙雷)、Stanleysun(孙龙君)、Trac

22、kynong(农益辉)、Chanceli(李飞宏)、Blue(许明)导 师,以及接入运维组(TEG)、数据管理组(IEG)所有兄弟姐妹在工作中给予的帮助、指导与支持,让我可以在新的环境继续突破自我,实现自我价值。感谢洪春兄(抚琴煮酒)的引荐,在他的努力下才 促成了这本书的合作与出版。 感谢机械工业出版社的编辑杨福川和姜影,在这一年多的时间中始终支持我的写作,他们的鼓励和帮助引导我能顺利完成全部书稿。 感谢已经过世的爷爷,是他深深影响着我的人生观与价值观,他的教导我会永远铭记在心。感谢我的爸爸、妈妈,感谢他们将我培养成人,在成长的过程中不断鼓励、激励我继续前进。感谢姐姐、弟 弟,他们是我成长过程

23、中最好的挚友与伙伴。 最后感谢我的爱人杜海英,没有你就没有我们幸福的小家和可爱的宝宝。感谢她支持我做的所有决定,没有她背后默默的支持与鼓励,也没有我今天的成就,更也不会有这本书。我想说:谢谢你!有 你真好。 谨以此书献给我最亲爱的家人与我自己,以及众多热爱开源技术的朋友们! 刘天斯(Yorkoliu) 第一部分 基础篇 第1章 系统基础信息模块详解 第2章 业务服务监控详解 第3章 定制业务质量报表详解 第4章 Python与系统安全 第1章 系统基础信息模块详解 系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统

24、资源吃紧,会直接影响业务的服务质量及用户体 验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽、设备资源是否应该扩容。本章通过运用Python第三方系统基础模块,可以轻松获取服务关键运营指标数据,包括Linux基本性能、块设 备、网卡接口、系统信息、网络地址库等信息。在采集到这些数据后,我们就可以全方位了解系统服务的状态,再结合告警机制,可以在第一时间响应,将异常出现在苗头时就得以处理。 本章通过具体的示例来帮助读者学习、理解并掌握。在本章接下来的内容当中,我们的示例将在一个连续的Python交互环境中进行。 进入Python终端,执行python命令进入交互式的Python环境,像这

25、样: # python Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) GCC 4.4.7 20120313 (Red Hat 4.4.7-4) on linux2 Type “help“, “copyright“, “credits“ or “license“ for more information. 1.1 系统性能信息模块psutil psutil是一个跨平台库(http:/ 源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ioni

26、ce、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持 32位和64位的Linux、Windows、OS X、FreeBSD和Sun Solaris等操作系统,支持从2.4到3.4的Python版本,目前最新版本为2.0.0。通常我们获取操作系统信息往往采用编写shell来实现,如获取当前物 理内存总大小及已使用大小,shell命令如下: 物理内存total值: free -m | grep Mem | awk print $2 物理内存used值: free -m | grep Mem | awk print $3 相比较而言,使用psutil

27、库实现则更加简单明了。psutil大小单位一般都采用字节,如下: import psutil mem = psutil.virtual_memory() mem.total,mem.used (506277888L, 500367360L) psutil的源码安装步骤如下: #wget https:/pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz -no-check-certificate # tar -xzvf psutil-2.0.0.tar.gz # cd psutil-2.0.0 # python setup.p

28、y install 1.1.1 获取系统性能信息 采集系统的基本性能信息包括CPU、内存、磁盘、网络等,可以完整描述当前系统的运行状态及质量。psutil模块已经封装了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非 常简单实用。 (1)CPU信息 Linux操作系统的CPU利用率有以下几个部分: User Time,执行用户进程的时间百分比; System Time,执行内核进程和中断的时间百分比; Wait IO,由于IO等待而使CPU处于idle(空闲)状态的时间百分比; Idle,CPU处于idle状态的时间百分比。 我们使用Python的psutil.cpu_tim

29、es()方法可以非常简单地得到这些信息,同时也可以获取CPU的硬件相关信息,比如CPU的物理个数与逻辑个数,具体见下面的操作例子: import psutil psutil.cpu_times()#使用cpu_times方法获取CPU完整信息,需要显示所有逻辑CPU信息, #指定方法变量percpu=True即可,如psutil.cpu_times(percpu=True) scputimes(user=38.039999999999999, nice=0.01, system=110.88, idle=177062.59, iowait=53.399999999999999, irq=2.9

30、100000000000001, softirq=79.579999999999998, steal=0.0, guest=0.0) psutil.cpu_times().user #获取单项数据信息,如用户user的CPU时间比 38.0 psutil.cpu_count() #获取CPU的逻辑个数,默认logical=True4 psutil.cpu_count(logical=False) #获取CPU的物理个数 2 (2)内存信息 Linux系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存

31、使用数)、swap(交换分区使用数)等,分别使用 psutil.virtual_memory()与psutil.swap_memory()方法获取这些信息,具体见下面的操作例子: import psutil mem = psutil.virtual_memory() #使用psutil.virtual_memory方法获取内存完整信息 mem svmem(total=506277888L, available=204951552L, percent=59.5, used=499867648L, free=6410240L, active=245858304, inactive=16373350

32、4, buffers=117035008L, cached=81506304) mem.total #获取内存总数 506277888L mem.free #获取空闲内存数 6410240L psutil.swap_memory() #获取SWAP分区信息sswap(total=1073733632L, used=0L, free=1073733632L, percent=0.0, sin=0, sout=0) (3)磁盘信息 在系统的所有磁盘信息中,我们更加关注磁盘的利用率及IO信息,其中磁盘利用率使用psutil.disk_usage方法获取。磁盘IO信息包括read_count(读IO数

33、)、write_count(写IO数)、 read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取,具体见下面的操作例子: psutil.disk_partitions() #使用psutil.disk_partitions方法获取磁盘完整信息 sdiskpart(device=/dev/sda1, mountpoint=/, fstype=ext4, opts=rw), sdiskpart(device=/dev/sda3,

34、mountpoint=/data, fstype=ext4, opts=rw) psutil.disk_usage(/) #使用psutil.disk_usage方法获取分区(参数)的使用情况 sdiskusage(total=15481577472, used=4008087552, free=10687057920, percent=25.899999999999999) psutil.disk_io_counters() #使用psutil.disk_io_counters获取硬盘总的IO个数、 #读写信息 sdiskio(read_count=9424, write_count=358

35、24, read_bytes=128006144, write_bytes=204312576, read_time=72266, write_time=182485) psutil.disk_io_counters(perdisk=True) #“perdisk=True”参数获取单个分区IO个数、 #读写信息 sda2: sdiskio(read_count=322, write_count=0, read_bytes=1445888, write_bytes=0, read_time=445, write_time=0), sda3: sdiskio(read_count=618, wr

36、ite_count=3, read_bytes=2855936, write_bytes=12288, read_time=871, write_time=155), sda1: sdiskio(read_count=8484, write_count=35821, read_bytes=123704320, write_bytes=204300288, read_time=70950, write_time=182330) (4)网络信息 系统的网络信息与磁盘IO类似,涉及几个关键点,包括bytes_sent(发送字节数)、bytes_recv=28220119(接收字节数)、packets

37、_sent=200978(发送数据包数)、packets_recv=212672(接收 数据包数)等。这些网络信息使用_io_counters()方法获取,具体见下面的操作例子: _io_counters() #使用_io_counters获取网络总的IO信息,默 #认pernic=False snetio(bytes_sent=27098178, bytes_recv=28220119, packets_sent=200978, packets_recv=212672, errin=0, errout=0, dropin=0, dropout=0) _io_counters(pernic=T

38、rue) #pernic=True输出每个网络接口的IO信息lo: snetio(bytes_sent=26406824, bytes_recv=26406824, packets_sent=198526, packets_recv=198526, errin=0, errout=0, dropin=0, dropout=0), eth0: snetio(bytes_sent=694750, bytes_recv=1816743, packets_sent=2478, packets_recv=14175, errin=0, errout=0, dropin=0, dropout=0) (5)

39、其他系统信息 除了前面介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登录、开机时间等信息,具体见下面的操作例子: psutil.users() #使用psutil.users方法返回当前登录系统的用户信息 suser(name=root, terminal=pts/0, host=192.168.1.103, started=1394638720.0), suser(name=root, terminal=pts/1, host=192.168.1.103, started=1394723840.0) import psutil, datetime psutil.boot_t

40、ime() #使用psutil.boot_time方法获取开机时间,以Linux时间戳格式返回 1389563460.0 datetime.datetime.fromtimestamp(psutil.boot_time().strftime(“%Y-%m-%d %H:%M:%S“) 2014-01-12 22:51:00 #转换成自然时间格式 1.1.2 系统进程管理方法 获得当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等,这些信息可以呈现出指定进程是 否存活、资源利用情况,为开发人员的代码

41、优化、问题定位提供很好的数据参考。 (1)进程信息 psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息,具体见 下面的操作例子: import psutil psutil.pids() #列出所有进程PID 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 p = psutil.Process(2424) #实例化一个Process对象,参数为一进程PID p.

42、name() #进程名 java p.exe() #进程bin路径 /usr/java/jdk1.6.0_45/bin/java p.cwd() #进程工作目录绝对路径 /usr/local/hadoop-1.2.1 p.status() #进程状态 sleeping p.create_time() #进程创建时间,时间戳格式 1394852592.6900001 p.uids() #进程uid信息 puids(real=0, effective=0, saved=0) p.gids() #进程gid信息 pgids(real=0, effective=0, saved=0) p.cpu_ti

43、mes() #进程CPU时间信息,包括user、system两个CPU时间 pcputimes(user=9.0500000000000007, system=20.25) p.cpu_affinity() #get进程CPU亲和度,如要设置进程CPU亲和度,将CPU号作为参数即可 0, 1 p.memory_percent() #进程内存利用率 14.147714861289776 p.memory_info() #进程内存rss、vms信息 pmem(rss=71626752, vms=1575665664) p.io_counters() #进程IO信息,包括读写IO数及字节数 pio(

44、read_count=41133, write_count=16811, read_bytes=37023744, write_bytes=4722688) p.connections() #返回打开进程socket的namedutples列表,包括fs、family、laddr #等信息 pconn(fd=65, family=10, type=1, laddr=(:ffff:192.168.1.20, 9000), raddr=(), p.num_threads() #进程开启的线程数 33 (2)popen类的使用 psutil提供的popen类的作用是获取用户启动的应用程序进程信息,以

45、便跟踪程序进程的运行状态。具体实现方法如下: import psutil from subprocess import PIPE #通过psutil的Popen方法启动的应用程序,可以跟踪该程序运行的所有相关信息 p = psutil.Popen(“/usr/bin/python“, “-c“, “print(hello)“, stdout=PIPE) p.name() python p.username() root municate() (hellon, None) p.cpu_times() #得到进程运行的CPU时间,更多方法见上一小节 pcputimes(user=0.01, sys

46、tem=0.040000000000000001) 参考提示 1.1.1节示例参考https:/ 1.1.1节模块说明参考官网http:/psutil.readthedocs.org/en/latest/。 1.2 实用的IP地址处理模块IPy IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、 广播地址、子网数、IP类型等。Python提供了一个强大的第三方模块IPy(https:/ 详细介绍。 以下是IPy模块的安装,这里采用源码的安装方式: # wget htt

47、ps:/pypi.python.org/packages/source/I/IPy/IPy-0.81.tar.gz -no-check-certificate # tar -zxvf IPy-0.81.tar.gz # cd IPy-0.81 # python setup.py install 1.2.1 IP地址、网段的基本处理 IPy模块包含IP类,使用它可以方便处理绝大部分格式为IPv6及IPv4的网络和地址。比如通过version方法就可以区分出IPv4与IPv6,如: IP(10.0.0.0/8).version() 4 #4代表IPv4类型 IP(:1).version() 6 #6代表IPv6类型 通过指定的网段输出该网段的IP个数及所有IP地址清单,代码如下: from IPy import IP ip = IP(192.168.0.0/16) print ip.len() #输出192.168.0.0/16网段的IP个数 for x in ip: #输出192.168.0.0/16网段的所有IP清单 print(x) 执行结果如下: 65536 192.168.0.0 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 192.168.0.6 192.1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1