常用的linux服务器有centos、redhat、ubuntu等,收集服务器的状态可采用saltstack python api,具体代码如下:import salt.client
client = salt.client.LocalClient()
status = client.cmd("*", "test.ping")
python的psutil模块,可对服务器磁盘、内存、CPU、进程、系统用户、网络使用状态进行检测,以下是老师写的案例:class Sinfo:
# 1.系统登录用户
@classmethod
def users(cls):
data = psutil.users()
data = map(
lambda v:
dict(
name=v.name,
terminal=v.terminal,
host=v.host,
started=datetime.datetime.fromtimestamp(v.started).strftime("%Y-%m-%d %H:%M:%S")
), data)
return data
# 2.最近开机时间
@classmethod
def boot_time(cls):
data = psutil.boot_time()
data = dict(
boot_time=datetime.datetime.fromtimestamp(data).strftime("%Y-%m-%d %H:%M:%S")
)
return data
# 3.内存信息
@classmethod
def virtual_memory(cls):
data = psutil.virtual_memory()
data = dict(
total=round(data.total / (1024 ** 3.0), 4),
available=round(data.available / (1024 ** 3.0), 4),
percent=data.percent,
used=round(data.used / (1024 ** 3.0), 4),
free=round(data.free / (1024 ** 3.0), 4),
active=round(data.active / (1024 ** 3.0), 4),
inactive=round(data.inactive / (1024 ** 3.0), 4),
buffers=round(data.buffers / (1024 ** 3.0), 4),
cached=round(data.cached / (1024 ** 3.0), 4),
shared=round(data.shared / (1024 ** 3.0), 4),
)
return data
# 4.交换分区信息
@classmethod
def swap_memory(cls):
data = psutil.swap_memory()
data = dict(
total=round(data.total / (1024 ** 3.0), 4),
used=round(data.used / (1024 ** 3.0), 4),
free=round(data.free / (1024 ** 3.0), 4),
percent=data.percent,
sin=data.sin,
sout=data.sout
)
return data
# 5.网络信息
@classmethod
def net(cls):
net_io_counters = psutil.net_io_counters(pernic=True)
net_if_addrs = psutil.net_if_addrs()
data = [
dict(
name=k,
bytes_sent=v.bytes_sent,
bytes_recv=v.bytes_recv,
packets_sent=v.packets_sent,
packets_recv=v.packets_recv,
errin=v.errin,
errout=v.errout,
dropin=v.dropin,
dropout=v.dropout,
net_if_addr=map(
lambda v:
dict(
address=v.address,
netmask=v.netmask,
broadcast=v.broadcast,
family=v.family
),
net_if_addrs[k]
)
)
for k, v in net_io_counters.items()
]
return data
# 6.磁盘信息
@classmethod
def disk(cls):
disk_partitions = psutil.disk_partitions()
disk_io_counters = psutil.disk_io_counters(perdisk=False)
data = dict(
disk_partitions=map(
lambda v: dict(
device=v.device,
mountpoint=v.mountpoint,
fstype=v.fstype,
opts=v.opts,
disk_usage=dict(
total=psutil.disk_usage(v.mountpoint).total,
used=psutil.disk_usage(v.mountpoint).used,
free=psutil.disk_usage(v.mountpoint).free,
percent=psutil.disk_usage(v.mountpoint).percent
)
),
disk_partitions
),
disk_io_counters=dict(
read_count=disk_io_counters.read_count,
write_count=disk_io_counters.write_count,
read_bytes=disk_io_counters.read_bytes,
write_bytes=disk_io_counters.write_bytes,
read_time=datetime.datetime.fromtimestamp(disk_io_counters.read_time).strftime("%Y-%m-%d %H:%M:%S"),
write_time=datetime.datetime.fromtimestamp(disk_io_counters.write_time).strftime("%Y-%m-%d %H:%M:%S"),
read_merged_count=disk_io_counters.read_merged_count,
write_merged_count=disk_io_counters.write_merged_count,
busy_time=datetime.datetime.fromtimestamp(disk_io_counters.busy_time).strftime("%Y-%m-%d %H:%M:%S")
)
)
return data
# 7.进程信息
@classmethod
def pids(cls):
data = []
try:
pids_list = psutil.pids()
data = map(
lambda v:
dict(
name=v.name(),
pid=v.pid,
exe=v.exe(),
cwd=v.cwd(),
status=v.status(),
create_time=datetime.datetime.fromtimestamp(v.create_time()).strftime("%Y-%m-%d %H:%M:%S"),
memory_percent=v.memory_percent(),
num_threads=v.num_threads(),
username=v.username(),
terminal=v.terminal(),
cpu_num=v.cpu_num(),
io_counters=dict(
read_count=v.io_counters().read_count,
write_count=v.io_counters().write_count,
read_bytes=v.io_counters().read_bytes,
write_bytes=v.io_counters().write_bytes,
),
is_running=v.is_running()
),
map(
lambda v:
psutil.Process(v),
filter(
lambda val:
psutil.pid_exists(val),
pids_list
)
)
)
except Exception, e:
pass
return data