Python 作为一种推崇“简单、优雅、明确”的面向对象语言,以其简捷明了的语法结构,丰富的类库,出色的易用性在互联网时代得到了广泛的应用。不论是国外的 Facebook 、 Youtube 、 Instagram 、 Pinterest ,还是国内的知乎、豆瓣,用 Python 开发的 Web 应用已经无处不在。
而随着云计算时代的到来,以及基于 Python 的云架构开源项目 OpenStack 的流行,越来越多的企业开始引入云服务的概念,尝试利用云计算服务来构建新的高可用架构。而同样地,企业级应用程序的设计与开发方式也发生了转变——开发人员需要构建原生的云计算应用,以便更有效的降低运营成本并提升灵活性。利用云平台与云服务再结合 Python 来进行应用开发,就成为了一种行之有效的途径。
Python 确实是个好语言,简单易用上手快,标准库和 PyPI 第三方库有丰富而又有用的资源,可以快速的解决开发者的问题,而不用重复造轮子,这些特点使得 Python 这几年逐渐流行起来。相对而言, C 受限于较为低级的语法,开发周期长,一般用来开发性能要求高的软件。 Java 偏重于企业开发,缓慢的 JVM 启动速度导致 Java 不适合用来开发系统管理脚本。而 Python 作为一个多面手,被广泛应用于 Web 开发、科学计算、数据分析、云计算(OpenStack )、运维平台和自动化运维(SaltStack )等。
Python 的优点很多,但随着企业业务向云端和移动互联网上的迁移,真实线上环境的复杂性,巨大的流量压力,以及 IT 架构的高可用问题,都会造成 Python 应用的性能瓶颈。作为 Pythoner 的你是否常被这几个问题所困扰:
代码执行速度真的很快吗?
代码性能瓶颈出在哪里?
内存消耗大不大?
是否存在内存泄漏?
透视宝 Python 监控实现原理
在刚刚举行的 PyConChina 2015 大会上,国内领先的应用性能管理服务商云智慧 VP 刘国强 (Bruce Liu )先生,为广大 Pythoner 带来《 Python 应用性能管理》主题分享,和大家一同探讨云智慧透视宝是如何保障 Python 应用在生产环境下的高性能。
针对复杂的 IT 架构,云智慧采用 Backbone 分布式监测节点监控,实现系统统一调度监控任务,所有监控点同步执行,依赖可靠的骨干网监测点执行监控任务,技术上消除网络抖动和噪声带来的干扰,稳定可靠的数据可以用于评估 SLA 。
而部署在应用系统中的智能探针会根据应用系统的语言,自动安装对应的探针程序,并为系统绘制应用拓扑。透视宝 Python 探针 pythonAgent 会在框架的 RequestHandler 添加上下文管理器(context manager ),通过 Smartpythonagent 模块实现上下文管理协议的__enter__() 和 __exit__() 方法控制 tracer 进程的起始和结束。 Tracer 进程通过 python 的 sys.settrace ()库方法进行开启和结束代码的 trace 过程。
Output 模块会对 tracer 进程返回的代码 trace 信息进程处理生成我们想要的数据。其中的 tree 是对代码执行过程以方法名作为节点生成树状的结构,能直接通过 tree 来还原代码执行时的方法调用过程。而 Map 则记录 tree 中每个节点的执行信息,如消耗内存,执行时间等。 Output 模块处理完数据后会向 smartAgent 的 sendproxy 发送数据,最后 sendproxy 会向透视宝服务器发送数据。 pythonAgent 的 tracer 进程能跟踪到'call', 'line', 'return', 'exception', 'c_call', 'c_return', or 'c_exception'事件。
依托于各种 Web 轻量级应用框架, Python 在 Web 应用上得到最广泛支持,而透视宝的 SmartAgent 支持主流的 Django 、 Tornado 、 CherryPy 、 Flask 、 Pylons 、 Bottle 等应用框架,保证 Python 代码性能数据抓取的准确性和高效能。配合透视宝部署在服务端的其他应用服务监控,包括 Apache 、 Nginx 、 Tomcat 、 Weblogic 、 MySQL 、 Memcache 、 Redis 、 Oracle 、 MongoDB 、 PostgreSQL 等,开发和运维人员能够第一时间发现应用系统的潜在问题,准确定位应用执行缓慢的真实原因。
如何利用透视宝监控 Python 应用
用户可以访问透视宝产品网站:
http://toushibao.com/ ,申请免费试用帐号,进入应用管理,下载 Smart Agent 并进行安装,安装完成访问“系统→插件管理”,找到 Smart Agent 所安装的主机,按以下说明来安装、配置及开启相关代码插件。
1 、安装 Python 应用发现插件
根据 Web 容器类型安装应用发现插件,该插件可自动发现容器内的所有应用实例并生成应用拓扑图。
如果直接使用的 Python Server ,可以直接跳过本步骤。
如果 Web 容器为 Apache
请安装并配置 Apache 类型的应用发现插件 ApacheApp ,配置完成后开启插件。
如果 Web 容器是 Nginx
请首先在插件的配置界面中选择安装 Nginx 类型的应用发现插件 NginxApp 。安装完成之后您还需要配置 Nginx 插件,与 Apache 不同的是,此时您需要在主机上手工编译,请参考安装目录中“./plugins/nginx_path/README ”文档。
2 、安装并开启 Python 代码监控插件 PythonCode
选择 PythonCode 插件安装并开启, SmartAgent 将自动下载插件至安装目录的 smart_agent/plugins 下。
默认会使用系统 Python 进行安装。修改 PythonAgent.sh 中 PythonCommand 值,可安装至系统中其他 Python 环境。
3 、重启 Web Server
安装开启 Python 代码监控插件后,可能需要您手动重启 web Server ( apache\httpd\Nginx\Python Server 等软件)。
4 、查看 Python 应用数据
配置完成后,大致两分钟后您就可以在“应用”模块中查看数据。
透视宝官网:
www.toushibao.com