首页 > 系统相关 >老板必备!Linux服务器上统计监控各用户的活动数据

老板必备!Linux服务器上统计监控各用户的活动数据

时间:2023-09-27 11:23:24浏览次数:44  
标签:slot users 必备 Linux user time 服务器 line total

BigBrother

链接:https://github.com/hhr346/BigBrother
突然的一个想法,然后就花了一晚上实施了一下,具体逻辑是通过直接调用Linux服务器上的命令,在服务器上统计各个用户的活动数据,分为登录次数、登陆时间和进程活动次数。

具体的实施的三个部分逻辑都很相似,挑一个在线时长来进行具体说明:

output = subprocess.check_output(['last'])

# Extract usernames and time spent, return a list
lines = output.decode().split('\n')
users = [line.split()[0] for line in lines[:-3] if line]
time_last = [line.split()[9] for line in lines[:-3] if line]

首先是用last命令来提取输出,并且分析出用户名和在线时长。

这里的截取范围是去除了最后三行,因为last的输出的最后三行有点问题

image
可以看到这里自动就已经有了在线时长了,所以我们只提取最后括号里的数值(不过这也提示我们可以做一个用户的活跃时间段的分布)

digits = [re.findall(r"\d+", i) for i in time_last]
index = np.array(np.where([len(digit)==2 for digit in digits]))[0].tolist()
users = [users[i] for i in index]
time_slots = [timedelta(hours=int(digits[i][0]), minutes=int(digits[i][1])) for i in index]

之后我们就通过正则表达式将小时和分钟提取出来(这里可能有点问题,如果单次在线时长大于24个小时的话,显示的格式是不一样的,之后更改一下)

最后将每个用户对应的在线时长进行累加,并排序后输出结果。

# Do the sum
print(len(users), len(time_slots))
slot_total = {}
for user, time_slot in zip(users, time_slots):
  #print(f'{user:10} %10s' %time_slot)
  if user in slot_total:
    slot_total[user] += time_slot
  else:
    slot_total[user] = time_slot
# Do the sorting
slot_total = sorted(slot_total.items(), key=operator.itemgetter(1), reverse=True)
# 这将返回一个字典对象,其中键是用户名,值是对应的活动次数。
user_activity = Counter(users)
login_total = sorted(user_activity.items(), key=operator.itemgetter(1), reverse=True)

目前可能的问题是这三个指标都各有缺陷,不能完全的反映用户实际的参与度,比如登录次数对喜欢开多个终端的用户来说就比较利好;在线时间也只能说明是一直挂着的,而不能说明太多;进程活动数则忽略了不同进程之间的差异性。

标签:slot,users,必备,Linux,user,time,服务器,line,total
From: https://www.cnblogs.com/hhr346/p/17732245.html

相关文章

  • linux文件上传至百度网盘备份
    一、摘要说明1.工具:百度网盘的python客户端--bypy2.下载方式:通过pip下载3.实现方案:安装pip-->安装bypy-->百度网盘授权-->测试验证-->扩展4.注意事项:使用bypy工具绑定后,由于百度PCSAPI权限限制,程序只能存取百度云端/apps(我的应用数据)/bypy目录下面的文件和目录。5.命令解释:......
  • linux机器设置密码不过期
    在Linux系统中,可以使用以下步骤来修改密码永不过期:1.使用root用户或具有sudo权限的用户登录到Linux系统中。2.打开终端窗口,并使用以下命令来修改用户的密码失效日期(-1表示永不过期):sudochage-M-1username其中,`username`是要修改密码过期策略的用户名。3.输入密码时,终......
  • linux查看命令 more 、less
    Linuxmore命令类似cat,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功能(与vi相似),使用中的说明文件,请按h。语法more[-dlfpcsu][-num][+/pattern][+linenum][fileNam......
  • 征稿啦!第 18 届「中国 Linux 内核开发者大会」重磅启动
    第十八届中国Linux内核开发者大会(CLK)如期而至。CLK以“自由、协作、创新”为理念,以开源技术的推广和普及为使命,旨在促进Linux内核开发爱好者相互交流,共同进步。经过组委会公开征集承办单位和各意向承办单位的答辩竞选,本届大会的承办方最终确定为OPPO,今年,我们计划于10月28......
  • 在Linux课程中所学01
    今天在大学期间一节Linux课程中,我学习到了一些基本的命令记录一下less命令命令也是对文件或其他输出进行分页显示,可用pageup、pagedown与键盘方向键控制,查找文件内容比more更容易,最后按q键退出。head命令有些配置文件内容很多,但真正需要查看的内容只有前几行,head命令可以查看......
  • 网络兼职|推广腾讯云服务器赚佣金
    随着互联网的飞速发展,越来越多的人开始通过网络兼职赚取额外的收入。今天要推荐的网络兼职项目是推广腾讯云服务器赚佣金。腾讯云是国内领先的云计算服务商,提供云服务器、云数据库、云存储、云安全等一系列云计算服务。腾讯云服务器是其中的核心产品之一,它可以为企业、开发者和个......
  • 49、linux下/srv /var /tmp的区别
    /srv:用于存储本机或者本服务器提供的服务数据或数据。(用户主动生产的数据、对外提供服务)/var:系统产生不可自动销毁的缓存文件、日志记录。(系统和程序运行后产生的数据、不对外提供服务、只能用户自己手动清理)/tmp:保存使用完毕后可随时销毁的缓存文件。(有可能是有由系统或程序产......
  • Linux 6.5+ 带来了一些针对 AMD Ryzen Z1 Extreme 的性能/改进
    导读最近发布的 Linux 6.5内核默认启用了AMDP-StateEPP,用于现代Ryzen系统,而不再使用通用的ACPICPUFreq驱动程序。在各种工作负载下运行Linux6.5(或更新版本)可以提高性能和/或能效。对于移动端的影响,我最近在Linux6.3、6.4、6.5和6.6Git内核上对ASUSROGA......
  • Linux命令杂记
    可能不是很有序,但都是实用命令,不会面面俱到,多了容易记不住find:查找文件命令。用法:find路径选项搜索内容递归搜索当前目录下的stdio.h文件gcc:编译。流程常用选项......
  • Linux下使用lvm将多块盘合并
    需求:将vdbvdc这两个500G的盘合并成一个1000G的盘,然后新建一个目录挂载到大盘上,当大盘出现磁盘紧张的时候还可以自动扩容.由于部门里有基础服务的同事,很少有机会直接接触lvm,刚好最近有几台物理服务器,借这个机会,就尝试自己实践了一番lsblk12345678#使用lsblk查看当前......