使用python进行服务器的监控

在linux服务器中,一切皆为文件,就是说,服务器运行的个中信息,其实是可以从某些文件中查询得到的;百度后,你会知道,在Linux系统中,有一个/proc的虚拟文件系统:

Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做“/proc”),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。proc 文件系统提供的信息如下:

1.进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm,以及 status。某些信息只有超级用户可见,例如进程根目录。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。

2.系统信息:如果需要了解整个系统信息中也可以从/proc/stat 中获得,其中包括 CPU 占用情况、磁盘空间、内存对换、中断等

3.CPU 信息:利用/proc/CPUinfo 文件可以获得中央处理器的当前准确信息

4.负载信息:/proc/loadavg 文件包含系统负载信息

5.系统内存信息:/proc/meminfo 文件包含系统内存的详细信息,其中显示物理内存的数量、可用交换空间的数量,以及空闲内存的数量等

/proc 目录中的主要文件的说明

文件或目录名称 说明
apm 高级电源管理信息
cmdline 这个文件给出了内核启动的命令行
CPUinfo 中央处理器信息
devices 可以用到的设备(块设备/字符设备)
dma 显示当前使用的 DMA 通道
filesystems 核心配置的文件系统
ioports 当前使用的 I/O 端口
interrupts 这个文件的每一行都有一个保留的中断
kcore 系统物理内存映像
kmsg 核心输出的消息,被送到日志文件
mdstat 这个文件包含了由 md 设备驱动程序控制的 RAID 设备信息
loadavg 系统平均负载均衡
meminfo 存储器使用信息,包括物理内存和交换内存
modules 这个文件给出可加载内核模块的信息
lsmod 程序用这些信息显示有关模块的名称,大小,使用数目方面的信息
net 网络协议状态信息
partitions 系统识别的分区表
pci pci 设备信息
scsi scsi 设备信息
self 到查看/proc 程序进程目录的符号连接
stat 这个文件包含的信息有 CPU 利用率,磁盘,内存页,内存对换,全部
swaps 显示的是交换分区的使用情况
uptime 这个文件给出自从上次系统自举以来的秒数,以及其中有多少秒处于空闲
version 这个文件只有一行内容,说明正在运行的内核版本。可以用标准的编程方法进行分析获得所需的系统信息

以上列出来了这么多,是不是看起来眼花缭乱,但是不要慌,其实我们进行服务器监控,只会经常用到其中比较少的以部门。

利用/proc文件系统进行服务器监控

以上我们知道了服务器信息可以从哪里获取,那么下面,我们就是编写脚本,读取我们要获取信息的文件,从中得到服务器的运行数据。下面是我们经常会需要监控的服务器的一些数据:

读取/proc/meminfo获取内存信息

该文件内容如下

MemTotal: 1017544 kB
MemFree: 583304 kB
MemAvailable: 756636 kB
Buffers: 42996 kB
Cached: 238820 kB
SwapCached: 0 kB
Active: 116092 kB
Inactive: 252004 kB
Active(anon): 11956 kB
Inactive(anon): 85136 kB
Active(file): 104136 kB
Inactive(file): 166868 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1044476 kB
SwapFree: 1044272 kB
Dirty: 64 kB
Writeback: 0 kB
AnonPages: 86304 kB
Mapped: 48832 kB
Shmem: 10812 kB
Slab: 40648 kB
SReclaimable: 29904 kB
SUnreclaim: 10744 kB
KernelStack: 2048 kB
PageTables: 8232 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1553248 kB
Committed_AS: 681428 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 5796 kB
VmallocChunk: 34359727572 kB
HardwareCorrupted: 0 kB
AnonHugePages: 32768 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 34752 kB
DirectMap2M: 1013760 kB

每个字段具体什么意思自己百度吧,直接上监控代码:

""" 内存监控
"""
def memory_stat():
 mem = {}
 f = open('/proc/meminfo', 'r')
 lines = f.readlines()
 f.close()
 for line in lines:
  if len(line) < 2:
   continue
  name = line.split(':')[0]
  var = line.split(':')[1].split()[0]
  mem[name] = float(var)
 mem['MemUsed'] = mem['MemTotal'] - mem['MemFree'] - mem['Buffers'] - mem['Cached']
 #记录内存使用率 已使用 总内存和缓存大小
 res = {}
 res['percent'] = int(round(mem['MemUsed'] / mem['MemTotal'] * 100))
 res['used'] = round(mem['MemUsed'] / (1024 * 1024), 2)
 res['MemTotal'] = round(mem['MemTotal'] / (1024 * 1024), 2)
 res['Buffers'] = round(mem['Buffers'] / (1024 * 1024), 2)
 return res

读取/proc/loadavg获取CPU负载信息

该文件内容如下:

0.00 0.01 0.05 1/128 9424 

简单说明一下每个字段的含义,前三个参数分别为1、5、15分钟内cpu的平均负载,第四个参数为正在运行的进程数和总进程数,最后一个代表最近活跃的进程ID

下面为python实现的监控CPU负载的代码:

""" CPU负载监控
"""
def load_stat():
 loadavg = {}
 f = open("/proc/loadavg")
 con = f.read().split()
 f.close()
 loadavg['lavg_1']=con[0]
 loadavg['lavg_5']=con[1]
 loadavg['lavg_15']=con[2]
 loadavg['nr']=con[3]
 prosess_list = loadavg['nr'].split('/')
 loadavg['running_prosess']=prosess_list[0]
 loadavg['total_prosess']=prosess_list[1]
 loadavg['last_pid']=con[4]
 return loadavg

利用python的os包获取硬盘信息

""" 磁盘空间监控
"""
def disk_stat():
 import os
 hd={}
 disk = os.statvfs('/')
 hd['available'] = float(disk.f_bsize * disk.f_bavail)
 hd['capacity'] = float(disk.f_bsize * disk.f_blocks)
 hd['used'] = float((disk.f_blocks - disk.f_bfree) * disk.f_frsize)
 res = {}
 res['used'] = round(hd['used'] / (1024 * 1024 * 1024), 2)
 res['capacity'] = round(hd['capacity'] / (1024 * 1024 * 1024), 2)
 res['available'] = res['capacity'] - res['used']
 res['percent'] = int(round(float(res['used']) / res['capacity'] * 100))
 return res

获取服务器的ip

在一个服务器上,可能有多块网卡, 在获取网卡信息时,你需要传入网卡的名字,具体有哪些网卡,可以使用ifconfig命令查看

""" 获取当前服务器ip
"""
def get_ip(ifname):
 import socket
 import fcntl
 import struct
 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15]))[20:24])

读取/proc/net/dev获取网卡流量信息

我们将会从该文件中获得系统的网络接口,以及当系统重启之后通过它们数据发送和接受数据的信息。 /proc/net/dev文件让这些信息可用。如果你检查了这个文件的内容,你就会注意到头一两行包含了头信息等等,这个文件第一列是网络接口名,第二和第三列显示了接收和发送的字节数信息(例如总发送字节数,包数,错误等等)。这里我们所感兴趣的就是他哦难过不同的网络设备提取出总发送数据和接收数据。下面的代码展示了怎么从/proc/net/dev文件中提取出这些信息,文件内容会是这样的:

Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:13092608592182 4315193859 0 0 0 0 0 0 13092608592182 4315193859 0 0 0 0 0 0
eth0:6081251983019 4697841969 0 0 0 0 0 0 196939978179 2079619999 0 0 0 0 0 0
eth1:5718927608592 9484371630 0 0 0 0 0 0 142737118022 2007173284 0 0 0 0 0 0

下面将获取每个网卡的进出流量信息:

#!/usr/bin/env python
from __future__ import print_function
def net_stat():
 net = {}
 f = open("/proc/net/dev")
 lines = f.readlines()
 f.close
 for line in lines[2:]:
  line = line.split(":")
  eth_name = line[0].strip()
  if eth_name != 'lo':
   net_io = {}
   net_io['receive'] = round(float(line[1].split()[0]) / (1024.0 * 1024.0),2)
   net_io['transmit'] = round(float(line[1].split()[8]) / (1024.0 * 1024.0),2)
   net[eth_name] = net_io
 return net
if __name__ == '__main__':
 netdevs = net_stat()
 print(netdevs)

最后在提供一个Apache服务的监控脚本

#!/usr/bin/env Python
import os, sys, time
while True:
 time.sleep(4)
 try:
  ret = os.popen('ps -C apache -o pid,cmd').readlines()
  if len(ret) < 2:
   print "apache 进程异常退出, 4 秒后重新启动"
   time.sleep(3)
   os.system("service apache2 restart")
 except:
  print "Error", sys.exc_info()[1]

总结

以上所述是小编给大家介绍的使用python进行服务器的监控,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

您可能感兴趣的文章:

  • linux系统使用python监控apache服务器进程脚本分享
  • 使用Python脚本对Linux服务器进行监控的教程
(0)

相关推荐

  • 使用Python脚本对Linux服务器进行监控的教程

    目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控. 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的编写. Python 版本说明 Python 是由 Guido van Rossum 开发的.可免费获得的.

  • linux系统使用python监控apache服务器进程脚本分享

    crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bin/env Python import os, sys, time while True: time.sleep(4) try: ret = os.popen('ps -C apache -o pid,cmd').readlines() if len(ret) < 2: print "apache 进程异常退出, 4 秒后重新启动" time.sleep(3) os.system

  • 使用python进行服务器的监控

    在linux服务器中,一切皆为文件,就是说,服务器运行的个中信息,其实是可以从某些文件中查询得到的:百度后,你会知道,在Linux系统中,有一个/proc的虚拟文件系统: Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的./proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息

  • Python WXPY实现微信监控报警功能的代码

    概述: 本文主要分享一下博主在学习wxpy 的过程中开发的一个小程序.博主在最近有一个监控报警的需求需要完成,然后刚好在学习wxpy 这个东西,因此很巧妙的将工作和学习联系在一起. 博文中主要使用到的技术设计到Python,Redis,以及Java.涉及到的技术看似很多,但是主要的语言是基于Python进行开发的. 架构涉及主要采用了 生产者消费者的涉及模式,使用Redis作为消息队列进行解耦操作. 主要架构涉及如下: 接下来开始介绍一下程序的实现过程,主要讲解wxpy -> python.re

  • python爬虫爬取监控教务系统的思路详解

    这几天考了大大小小几门课,教务系统又没有成绩通知功能,为了急切想知道自己挂了多少门,于是我写下这个脚本. 设计思路: 设计思路很简单,首先对已有的成绩进行处理,变为list集合,然后定时爬取教务系统查成绩的页面,对爬取的成绩也处理成list集合,如果newList的长度增加了,就找出增加的部分,并通过邮件通知我. 脚本运行效果: 服务器: 发送邮件通知: 代码如下: import datetime import time from email.header import Header impor

  • python中watchdog文件监控与检测上传功能

    引言 上一篇介绍完了观察者模式的原理,本篇想就此再介绍一个小应用,虽然我也就玩了一下午,是当时看observer正好找到的,以及还有Django-observer,但Django很久没用了,所以提下这个作为一个笔记. watchdog介绍 Watchdog的中文的"看门狗",有保护的意思.最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序"跑飞",造成整个系统无法正常工作,因此,引入了一个"看门狗",对

  • 用python实现域名资产监控的详细步骤

    应用场景 域名资产监控,通过输入一个主域名,找到该域名对应的ip地址所在的服务器的端口开闭情况.通过定期做这样的监控,有助于让自己知道自己的资产的整体暴露面情况. 所需要具备的前缀技能 python的简单使用 linux操作系统的简单使用 DNS的原理 工具 pycharm 专业版 xshell 用于部署脚本 步骤 通过域名得到对应的ip地址 首先,我们知道对于一个域名来说,可以设置很多类型的记录值,比如A记录.AAAA记录.SOA记录.TXT记录等等.安全领域常见的记录值和其含义对应关系如下:

  • PHP实现服务器状态监控的方法

    本文实例讲述了PHP实现服务器状态监控的方法.分享给大家供大家参考.具体分析如下: PHP服务器状态监控对于很多朋友来讲都没做,只有看到网站挂了才知道,这种半夜网站关了是不知道情况了,对于网站也非常不好,为此这两天抽空写了个网页服务器状态监控,看到有朋友说需要,那我就放出来吧.很简单的东西. 使用方法: 打开压缩包里面的status.php文件.编辑这里的内容为你自己的邮箱信息.代码如下: 复制代码 代码如下: $mail->Host       = 'smtp.exmail.qq.com'; 

  • python检测服务器是否正常

    经常使用python检测服务器是否能ping通, 程序是否正常运行(检测对应的端口是否正常) 以前使用shell脚本的写法如下: 复制代码 代码如下: PINGRET=$( ping www.baidu.com -c 2 | grep "icmp_" );  if [ -z $PINGRET ]; then echo "ping fail"; else echo "ping ok"; fi 或者 复制代码 代码如下: ping -c 2 www.

  • Python获取服务器信息的最简单实现方法

    本文实例讲述了Python获取服务器信息的最简单实现方法.分享给大家供大家参考.具体如下: 主要核心代码如下: sUrl = 'http://www.163.com' sock = urllib2.urlopen(sUrl) sock.headers.values() 希望本文所述对大家的Python程序设计有所帮助.

  • python删除服务器文件代码示例

    本文主要研究的是Python编程删除服务器文件,具体实现 代码如下. 实例1 #coding:utf-8 import paramiko """ 创建文件 删除文件 root权限 """ ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname="192.168.1.37",po

随机推荐