有了这些信息我们就可以对linux服务器做监控了,也可以对所有的项目进行状态监控了
linux 服务器状态
import psutil # 进程运行情况
import platform # 包含系统信息查询函数
import os
import logging
#
# # 硬件信息
svmem = psutil.virtual_memory()
mem_total = svmem.total # 系统内存总数
mem_used = svmem.used # 内存已使用
mem_free = svmem.free # 内存空闲大小
mem_per = svmem.percent # 内存使用率
system_version = platform.linux_distribution() # 获取linux发行版本详细信息
system_machine = platform.machine() # 获取操作系统架构
with open('/proc/cpuinfo') as f: # 获取cpu型号
for line in f:
if line.strip():
if line.rstrip('\n').startswith('model name'):
cpu_name = line.rstrip('\n').split(':')[1]
break
cpu_type = cpu_name.split()[0]
cpu_count = psutil.cpu_count() # cpu核数
host_name = platform.node() # 电脑名称
stinfo = os.statvfs('/home')
print('CPU使用率', psutil.cpu_percent(1))
print('每个核的cpu使用率', psutil.cpu_percent(percpu=True))
print('硬盘使用', psutil.disk_usage("/home").percent)
# stinfo = os.statvfs('/')
st_info = stinfo.f_bsize * stinfo.f_blocks / 1024 / 1024 / 1024 # 获取磁盘大小
st_free_info = stinfo.f_bavail * stinfo.f_frsize / 1024 / 1024 / 1024 # 磁盘剩余大小
print('系统内存总数', mem_total)
print('内存已使用', mem_used)
print('内存空闲大小', mem_free)
print('内存使用率', mem_per)
print('cpu核数', cpu_count)
print('电脑名称', host_name)
print('获取磁盘大小', st_info)
print('磁盘剩余大小', st_free_info)
# os.system('python3 /home/KL/DigapisKl/mastercontrol/es_search.py')
if mem_per >= 90:
print(1)
a = '%.2f' % (st_free_info / st_info)
print(a)
当前运行进程数量
from __future__ import print_function
import os
def process_list():
pids = []
for subdir in os.listdir('/proc'):
if subdir.isdigit():
pids.append(subdir)
return pids
if __name__ == '__main__':
pids = process_list()
print('Total number of running processes:: {0}'.format(len(pids)))
当前运行进程详细信息
import psutil
import csv
def processInfo():
"""
获取全部进程信息
:return: list
"""
filename = open('./进程信息' + '.csv', 'a', newline='', encoding='utf-8')
csv_write = csv.writer(filename, dialect='excel')
heard = ['进程编号','进程名称','执行路径','当前路径','启动命令','父进程ID','父进程','状态','进程用户名','进程创建时间','终端','执行时间','内存信息','打开的文件','相关网络连接','线程数','线程','环境变量',]
csv_write.writerow(heard)
# 定义一个获取进程属性的方法
def getProperty(process, pro: str):
try:
ret = eval('process.' + pro)()
except Exception as e:
return ''
return ret
pids = psutil.pids()
output = {}
for pid in pids:
print(pid)
usar = []
try:
process = psutil.Process(pid)
parent = getProperty(process, 'parent')
if parent is str or parent is None:
parentName = ''
else:
parentName = parent.name()
output[pid] = {
'进程编号': pid,
'进程名称': process.name(),
'执行路径': getProperty(process, 'exe'),
'当前路径': getProperty(process, 'cwd'),
'启动命令': getProperty(process, 'cmdline'),
'父进程ID': process.ppid(),
'父进程': parentName,
'状态': process.status(),
'进程用户名': getProperty(process, 'username'),
'进程创建时间': process.create_time(),
'终端': getProperty(process, 'terminal'),
'执行时间': process.cpu_times(),
'内存信息': process.memory_info(),
'打开的文件': getProperty(process, 'open_files'),
'相关网络连接': process.connections(),
'线程数': process.num_threads(),
'线程': getProperty(process, 'threads'),
'环境变量': getProperty(process, 'environ'),
}
usar.append(output[pid]['进程编号'])
usar.append(output[pid]['进程名称'])
usar.append(output[pid]['执行路径'])
usar.append(output[pid]['当前路径'])
usar.append(output[pid]['启动命令'])
usar.append(output[pid]['父进程ID'])
usar.append(output[pid]['父进程'])
usar.append(output[pid]['状态'])
usar.append(output[pid]['进程用户名'])
usar.append(output[pid]['进程创建时间'])
usar.append(output[pid]['终端'])
usar.append(output[pid]['执行时间'])
usar.append(output[pid]['内存信息'])
usar.append(output[pid]['打开的文件'])
usar.append(output[pid]['相关网络连接'])
usar.append(output[pid]['线程数'])
usar.append(output[pid]['线程'])
usar.append(output[pid]['环境变量'])
print(output[pid]['进程编号'])
csv_write.writerow(usar)
except Exception as result:
print(result)
return output
a = processInfo()
print(len(a))