Python自动化运维技术与最佳实现

时间:2023-02-11 12:07:41

第一章 系统基础信息模块详解

系统基础信息采集模块最为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的质量以及用户的体验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽、设备资源是否应该扩容。

本章通过具体的实例来帮助读者学习、理解并掌握。在本章接下来的内容中,可以通过运用Python第三方系统基础模块,获取服务关键运营指标数据,其中包括Linux基本性能、块设备、网卡接口、系统信息、网络地址库等信息。当采集到在这些信息后,可以全方位的了解系统服务的状态,结合告警机制,可以在第一时间响应,将异常刚刚出现时得以及时的处理。

以下实例都是在一个连续的Python=交互环境中进行。

Python自动化运维技术与最佳实现

1.1 系统性能信息模块psutil

psutil是一个跨平台库,可以轻松地实现获取系统运行的进程和系统利用率其中包括CPU、内存、硬盘、网络信息等。主要用于系统监控,分析和限制系统资源以及进程的管理。

支持的命令包括:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskst、pmap等。

通常获取系统信息采用编写shell来实现,如获取当前物理机的内存总大小以及使用大小,shell命令

total: free -m | grep Mem | awk ‘{print $2}’

used:  free -m | grep Mem | awk ‘{print $3}’

使用psutil库实现就更加简单明了。psutil大小单位采用的是字节,实例如下图:

Python自动化运维技术与最佳实现

源码安装:

Python自动化运维技术与最佳实现

1.1.1 获取系统性能信息

psutil已经封装了获取系统性能信息的方法,可以根据用户的应用场景,来调用相应的方法妈祖用户需求。

(1)CPU信息

linux中的cpu利用率包括以下几部分:

User Time 执行用户进程的时间百分比

System Time 执行内核进程和中断的时间百分比

Wait IO 由于IO等待而使CPU处于idle(空闲)状态的时间百分比

Idle Cpu处于空心状态的时间百分比

使用psutil.cpu_times()方法可以非常简单的得到信息,同时获取CPU的硬件信息,比如CPU的物理个数与逻辑个数,如下图:

Python自动化运维技术与最佳实现

使用psutil.cpu_times()获取cpu完整信息,需要显示所有逻辑CPU信息,指定方法变量percpu=True,例如psutil.cpu_times(percpu=True)。

获取单项数据信息,用户user的CPU时间比

(2)内存信息

Linux操作系统中的内存利用率包括total(内存总数),used(已使用的内存数),free(空闲内存数),buffers(缓冲使用数),cache(缓存使用数),swap(交换分区使用数)等等。分别使用  psutil.virtual_memory()和psutil.swap_memory()方法获取这些信息。详细操作如下图:

Python自动化运维技术与最佳实现

Python自动化运维技术与最佳实现

Python自动化运维技术与最佳实现

(3) 磁盘信息

在系统地所有磁盘信息中,主要关注地是磁盘的利用率以及IO信息,其中磁盘利用率使用psutil.disk_usage获取。磁盘IO信息包括:read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取,如下图实例:

Python自动化运维技术与最佳实现

Python自动化运维技术与最佳实现

(4) 网络信息

系统的网络信息与磁盘IO类似,包括:bytes_sent(发送字节数)、bytes_resv(接收字节数)、packets_sent(发送数据包数)、packets_recv(接收数据包数)等。使用psutil_net_io_counters()方法获取,操作如下:

Python自动化运维技术与最佳实现

(5)其他系统信息

psutil模块支持获取用户登录、开机时间等信息,如下图:

Python自动化运维技术与最佳实现

1.1.2 系统进程管理方法

获得当前的系统信息地进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或者设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等,这些信息可以呈现出指定进程是否存活、资源利用情况,为开发人员的代码优化、问题定位提供很好的数据参考。

(1)进程信息

psutil.pids()获取所有进程的PID,使用psutil.Process()方法获取的那个进程的名称、路径、状态、系统资源利用率等信息,如下图:

Python自动化运维技术与最佳实现

Python自动化运维技术与最佳实现

当输入p.exe()出现错误

Python自动化运维技术与最佳实现

Python自动化运维技术与最佳实现

Python自动化运维技术与最佳实现

(2)popen类的使用

psutil提供的popen类的作用是获取用户启动的应用程序进程信息,以便跟踪程序进程的运行状态。如下图:

Python自动化运维技术与最佳实现

1.2 实用的IP地址处理模块IPy

  IP地址规划是网络设计中非常重要的环节,规划的好坏会直接影响路由协议算法的效率,其中摆阔网络性能、可扩展性等,在这过程中,是避免不了要计算大量的IP地址,例如网段、网络掩码、广播地址、子网数、IP类型等。Python提供了强大的第三方模块IPy,可以很好的辅助我们高效完成IP的规划工作。

(1)IPy模块安装

Python自动化运维技术与最佳实现

(2)IP地址、网段的基本处理

  IPy模块包含IP类,使用他可以方便处理绝大部分格式为IPv6以及IPv4的网络和地址。

  可以通过cersion()来区分,首先要导入IPy库,from IPy import IP ,之后进行操作,如下图:

Python自动化运维技术与最佳实现

通过指定的网段输出该网段的IP个数以及所有IP地址清单,代码如下:

Python自动化运维技术与最佳实现

下面介绍IP类几个常见的方法,包括反向解析名称,IP类型,IP转换等。iptype()代表ip类型,strHex()转换成十六进制,strBin()转换成二进制格式,IP(0x8080808)十六进制转换成IP格式。Python自动化运维技术与最佳实现

IP方法支持网络地址的转换,例如根据IP与掩码生产网段格式,如下:

Python自动化运维技术与最佳实现

也可以通过strNormal方法指定不同wantprefixlen参数值以定制不同输出类型的网段,输出另外i行字符串,如下:

Python自动化运维技术与最佳实现

wantprefixlen = 0,无返回,如192.168.1.0

wantprefixlen = 1,prefix格式,192.168.1.0/24

wantprefixlen = 2,decima net mask格式,192.168.1.0/255.255.255.0

wantprefixlen = 3,lastIP格式,192.168.1.0-192.168.1.255

(3) 多网络计算方法详解

  比较两个网段是否存在包含、重叠等关系,同网络但不同prefixlen会认为是不同的网段,例如192.168.0.0/16不等于192.168.0.0/24,另外即使具有相同的prefixlen但会处于不同的网络地址,同样视为不相等,例如10.0.0.0/16不等于192.0.0.0/16.IPy支持类似于数值型数据的比较,以帮助IP对象进行比较,如:

Python自动化运维技术与最佳实现

判断IP地址和网段是否包含于另一个网段中:

Python自动化运维技术与最佳实现

判断两个网段是否存在重叠,采用IPy提供的overlaps方法,如下图:(返回1有重叠,0没有重叠)

Python自动化运维技术与最佳实现

实例 根据输入的IP地址或者子网返回网络、掩码、广播、反向解析、子网数、IP类型等信息。

Python自动化运维技术与最佳实现

运行结果:

Python自动化运维技术与最佳实现

1.3 DNS处理模块dnspython

  dnspython是Python实现的一个DNS工具包,他支持几乎所有的记录类型,可以用于查询、传输并动态更i新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验,可以代替nslookup及dig等工具,轻松做到与现有平台的整合,下面进行详细介绍。

安装:

Python自动化运维技术与最佳实现

(1)模块域名解析方案详解

  dnspython模块提供了大量的DNS处理方法,最常用的方法是域名查询。dnspython提供了DNS的解析器类----resolver,使用他的query方法来实现域名的查询功能。query方法如下:

Python自动化运维技术与最佳实现

其中,qname参数为查询的域名。rdtype参数来制定RR资源的类型,常用的有以下几种:

A记录:将主机名转换成IP地址

MX记录:邮件交换记录,定义邮件服务器的域名

CNAME:指的是别名记录,实现域名间的映射

NS记录:标记区域的域名服务器以及授权子域

PTR记录:反向解析,与A记录相反,将IP转换成主机名

SOA记录:SOA标记,一个其实授权区的定义

  rdclass参数由于指定网络类型(IN,CH,HS)其中IN是默认,使用广泛。tcp参数由于指定查询是否启用TCP协议,默认False(不启用)。source与source_port参数指定查询源地址与端口,默认值为查询设备IP地址和0。raise_on_answer参数用于指定当查询无应答是是否触发异常,默认为True。

(2)常见解析类型示例说明

  常见的DNS解析类型包括A,MX,NS,CNAME等。利用dnspython的dns.resolver.query方法可以简单的实现简单的DNS类型的查询,为后面要实现的功能提供数据来源,比如对各使用DNS轮循业务的域名进行可用性监控,需要得到当前的解析结果。下面一一进行介绍。

A记录:

Python自动化运维技术与最佳实现

运行结果:www.google.com

Python自动化运维技术与最佳实现

 MX记录:

Python自动化运维技术与最佳实现

运行结果:163.com

Python自动化运维技术与最佳实现

NS记录:

Python自动化运维技术与最佳实现

运行结果:baidu.com

Python自动化运维技术与最佳实现

CNAME记录:

Python自动化运维技术与最佳实现

运行结果:www.baidu.com

Python自动化运维技术与最佳实现

 (3)实践:DNS域名轮循业务监控

  大部分的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮循技术可以做到一个域名对应多个IP,从而实现最简单且高效的负载均衡,不过此方案最大的弊端是目标主机不可用时无法被自动解除,因此做好业务主机的服务可用监控至关重要。本实例通过分析当前域名的解析IP,再结合服务端口探测来实现自动监控,在域名解析中添加,删除IP时,无需对监控脚本进行更改。架构图:

Python自动化运维技术与最佳实现

步骤

1.实现域名的解析,获取域名所有的A记录解析IP列表;

2.对IP列表进行HTTP级别的探测

代码解析

第一步通过dns.resolver.query()方法获取业务域名A记录,查询出所有的IP地址列表,在使用httplib模块的request()方法以GET方式请求监控页面,监控业务所有服务的IP是否正常。

Python自动化运维技术与最佳实现的更多相关文章

  1. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  2. python自动化运维技术读书笔记

    import psutilprint(psutil.cpu_times(percpu=True)) #使用cpu_times方法获取CPU完整信息需要显示所有逻辑CPU信息 import psutil ...

  3. Python自动化运维:技术与最佳实践 PDF高清完整版&vert;网盘下载内附地址提取码&vert;

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  4. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  5. Day1 老男孩python自动化运维课程学习笔记

    2017年1月7日老男孩python自动化运维课程正式开课 第一天学习内容: 上午 1.python语言的基本介绍 python语言是一门解释型的语言,与1989年的圣诞节期间,吉多·范罗苏姆为了在阿 ...

  6. python自动化运维学习第一天--day1

    学习python自动化运维第一天自己总结的作业 所使用到知识:json模块,用于数据转化sys.exit 用于中断循环退出程序字符串格式化.format字典.文件打开读写with open(file, ...

  7. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  8. Python自动化运维的职业发展道路(暂定)

    Python职业发展之路 Python自动化运维工程 Python基础 Linux Shell Fabric Ansible Playbook Zabbix Saltstack Puppet Dock ...

  9. 技术沙龙&vert;京东云DevOps自动化运维技术实践

    自动化测试体系不完善.缺少自助式的持续交付平台.系统间耦合度高服务拆分难度大.成熟的DevOps工程师稀缺,缺少敏捷文化--这些都是DevOps 在落地过程中,或多或少会碰到的问题,DevOps发展任 ...

随机推荐

  1. 简单的Viewing Frustum Culling

    Viewing Frustum Culling是图形绘制流水线中,将不可见物体(即不在视锥体内的物体)提前剔除的操作. 在实践中,精确判断物体的可见性开销较大,因而通常用物体包围球或包围盒与视锥体(平 ...

  2. 标签q

    标记短的引用,默认是中文符号:双引号 <p>文字<q>段落中的引用</q>文字</p> 如果是在html里直接敲出引号,是这样的: <p>文 ...

  3. HDU 1698 区间更新

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. 1-Highcharts环境介绍及配置

    Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库,废话不多说,直接进入主题! 首先,下载Highcharts包文件,下载地址如下: 中文网下载中心:http:// ...

  5. 使用read&lpar;&rpar;&comma;write&lpar;&rpar;&comma;seekg&lpar;&rpar;&comma;seekp&lpar;&rpar;实现二进制方式文件随机存取

    // binary.cpp -- binary file I/O #include <iostream> #include <fstream> #include <iom ...

  6. 在MVC5中的使用Ninject

    在MVC5中的使用 Ninject 从MVC3中就开始接触Ninject这个IOC工具.也一直是MVC Framework系列书籍中推荐的IOC工具,当然还有优秀的Autofac等.性能和使用上面个有 ...

  7. v-bind特性

    插值语法不能作用在 HTML 特性上,因此使用 v-bind 指令1.v-bind在一般特性上的使用:如id,src,disabled,checked,selected,name html: < ...

  8. debug apk logCat

    Microsoft Windows [版本 10.0.15063](c) 2017 Microsoft Corporation.保留所有权利. C:\Users\Administrator>ad ...

  9. Python 编码的一些问题

    >>> ord('中') 20013 >>> chr(65) 'A' >>> chr(20013) '中' - Python文件默认是UTF-8编 ...

  10. python获取当前日期时间

    转载自:https://www.cnblogs.com/wenBlog/p/6023742.html 在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函 ...