python运维实例.pdf

基础篇 第一部分 第 1 章 系统基础信息模块详解 第 2 章 业务服务监控详解 第 3 章 定制业务质量报表详解 第 4 章 Python 与系统安全 Part 1 第 1 章 系统基础信息模块详解 系统基础信息采集模块作为监控模块的重要组成部分 能够帮助运维人员了解当前系统 的健康程度 同时也是衡量业务的服务质量的依据 比如系统资源吃紧 会直接影响业务的 服务质量及用户体验 另外获取设备的流量信息 也可以让运维人员更好地评估带宽 设备 资源是否应该扩容 本章通过运用 Python 第三方系统基础模块 可以轻松获取服务关键运营 指标数据 包括 Linux 基本性能 块设备 网卡接口 系统信息 网络地址库等信息 在采 集到这些数据后 我们就可以全方位了解系统服务的状态 再结合告警机制 可以在第一时 间响应 将异常出现在苗头时就得以处理 本章通过具体的示例来帮助读者学习 理解并掌握 在本章接下来的内容当中 我们的 示例将在一个连续的 Python 交互环境中进行 进入 Python 终端 执行 python 命令进入交互式的 Python 环境 像这样 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 ination 1 1 系统性能信息模块 psutil psutil 是一个跨平台库 能够轻松实现获取系统运行的 Chapter 1 第1章 系统基础信息模块详解 3 进程和系统利用率 包括 CPU 内存 磁盘 网络等 信息 它主要应用于系统监控 分 析和限制系统资源及进程的管理 它实现了同等命令行工具提供的功能 如 ps top lsof netstat ifconfig who df kill free nice ionice 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 grepMem awk print 2 物理内存 used 值 free m grepMem awk print 3 相比较而言 使用 psutil 库实现则更加简单明了 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 certifi cate tar xzvf psutil 2 0 0 tar gz cd psutil 2 0 0 python setup py 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 times 方法可以非常简单地得到这些信息 同时也可以获 取 CPU 的硬件相关信息 比如 CPU 的物理个数与逻辑个数 具体见下面的操作例子 4 第一部分 基础篇 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 9100000000000001 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 缓存使用数 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 163733504 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 数 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 mountpoint data fstype ext4 opts rw psutil disk usage 使用 psutil disk usage 方法获取分区 参数 的使用情况 第1章 系统基础信息模块详解 5 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 35824 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 write 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 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 True 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 其他系统信息 除了前面介绍的几个获取系统基本信息的方法 psutil 模块还支持获取用户登录 开机 时间等信息 具体见下面的操作例子 psutil users 使用 psutil users 方法返回当前登录系统的用户信息 s u s e r n a m e r o o t t e r m i n a l p t s 0 h o s t 1 9 2 1 6 8 1 1 0 3 s t a r t e d 1 3 9 4 6 3 8 7 2 0 0 s u s e r n a m e r o o t t e r m i n a l p t s 1 host 192 168 1 10