一种 Samba 流量统计系统的设计与实现
摘要:随着云计算的普及,用户可以更方便地使用云存储资源,对于资源提供商来说,随之而来的问题就是该如何统计用户的使用量。文章设计了一种基于 Samba 的流量统计系统,通过对用户的操作行为记录日志,可以分析用户的登录、读写等行为。同时该系统还实现了相关对外调用查询接口函数,可供前端界面开发者直接调用,便于系统管理员管理系统。
关键词:日志分析;流量统计;接口函数;SAMBA;云存储中图分类号:TP393.06 文献标识码:A 文章编号:1673-1131(2015)10-0079-03.
0 引言
存储技术的发展经历了单机时代、集群时代,目前已迈向云存储时代,数据的存储方式发生了翻天覆地的变化,用户的使用和付费模式也经历着同样的变化。随着云存储技术的进一步发展成熟,企业内部的系统也逐渐搭建起私有云环境[1]。
当前的私有云存储环境一般是通过Linux进行搭建,而访问对象则大多数是 Windows 用户,因此本文以此为应用背景设计了一种基于日志分析的流量统计系统。
现有的基于 Linux 的流量统计工具如 iptraf[2]、nload[3]、ifstat[4]
等都只能对网卡进行统计,这种粗粒度的统计不能精确到单个用户,更不要谈精确到某个文件。这对于云时代需要针对单个用户进行单独统计的需求是远远不能满足的。
基于以上特点需求,我们设计实现了一套基于日志分析的 SAMBA[5]流量统计系统,该系统针对用户特定操作进行详细的记录,通过系统实现日志分析工具对原始日志数据进行分析统计后存储,系统管理员可以通过系统实现的 API 接口对分类数据进行查询从而实现单个用户、单个文件的访问和 流量统计。同时我们还基于 GlusterFS 集群文件系统进行了多节点部署,并实现了该系统的相关数据统计。
1 功能构成与总体架构
在用户使用存储的过程中,管理员一方面系统统计用户所有的使用情况,如登录情况、文件下载情况,另一方面,管理员还希望对存储系统本身的数据使用情况进行分类统计,在使用后,还希望能够以直观的方式对用户使用情况进行报表式展示,因此本系统结合以上需求进行了功能设计。最终,本文实现的流量统计系统具备统计单个用户的对系统的使用情况,同时也能够反应系统整体的使用情况,以便于管理员能够针对使用情况进行管理。本文将需要实现的功能分类为用户访问日志和数据访问统计两部分。
1.1 用户访问日志
查看用户登录历史信息,包括登录 IP、登入时间、登出时间。该部分的统计可用于统计用户访问系统的频繁程度和在线时长,以便于针对用户按时计费的需求。
1.2 数据访问统计
1.2.1 用户视图
针对不同的用户,统计其给定时间段内下载、上传数据的总流量,统计该用户的热点数据。该部分以用户为计量单位统计使用量,以此作为容量限制和收费的依据,以便于针对用户按量计费的需求。
1.2.2 系统视图
针对系统整体,统计给定时间段内指定目录的下载、上传数据总量,指定文件的下载总量。这样系统能够灵活分配系统资源给负载量比较大的目录,优化系统效能,同时也便于管理员对整体系统进行管理。
提供 TOP10/50 功能、动态更新用户访问排名、动态更新文件或目录的访问排名,便于管理员对所属用户及共享目录进行可视化管理。
1.3 总体架构
为了实现功能构成中设计的功能,本文基于 GlusterFS、CTDB[6]、Samba 等服务搭建了实验平台,并通过 Cifs 协议[7]向Windows 客户提供服务。
GlusterFS 是一个开源的分布式文件系统,具有强大的横向扩展能力。GlusterFS 通过 TCP/IP 或 InfiniBand RDMA 网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。
CTDB是一种轻量级的集群数据库实现,基于它可以实现很多应用集群,目前 CTDB 支持 Samba、NFS、 HTTPD、VSFTPD、ISCSI、WINBIND 应用,集群共享数据存储支持GPFS、GFS(2)、GlusterFS、Luster、OCFS(2)。在本系统中,CTDB主要用来保证多个 Samba 服务器之间的数据一致性,并提供public IP 对外提供访问。
图 1 集群环境架构图
Samba 是一套使用 Server Message Block(SMB)协议和NetBIOS(Network Basic Input/Output System)协议的用于实现Unix Like 与 Windows 这两个不同的操作系统平台之间通信的程序。它能够实现共享文件与打印机服务、提供用户登录Samba 主机时的身份认证以提供不同用户的不同数据、进行Windows 网络上的主机名解析和实现设备的共享等功能。
本文的实验环境基于如图 1 所示架构实现,但是实现的流量统计系统不仅局限于该系统,在其他类似架构的采用Samba 的集群共享环境中,该流量统计系统同样适用。 2 Samba 流量统计系统的设计实现本节详细讨论了数据采集方式、数据处理过程以及对外调用接口函数功能实现以及在 GlusterFS 集群文件系统上的部署四部分的内容。
2.1 日志数据采集方式
要实现本系统中所要求的功能,就需要对用户的操作行为进行数据统计,包括用户的登录退出、文件的读写等。要对这些操作行为进行统计,我们需要制定一套机制实现记录。本文首先考察了 Samba 系统,经过分析,Samba 本身内置了一个VFS 层,在其下可以加载相应的功能模块,最后进入 vfs_default.c 返回系统层,所有通过 Samba 发起的请求都会经过这一路径,这就给我们提供了一个监控数据流的最佳机制,模块调用流程如图 2 所示。我们采用 Samba VFS 中的一个 full_audit模块,它能够对用户的读写等请求进行监视,我们只需在Samba的配置文件smb.conf中共享目录里设置相应的full_audit 参数即可对用户数据进行监控。本设计中采用了 open、close 两个过滤参数。
图 2 Samba VFS 模块调用机制
另外我们要统计多用户的使用情况,这个使用情况我们可以利用 Samba 自身产生的日志数据进行分析,在 Samba 配置文件中默认的 Samba 登录日志是以机器名来分别登记的,我们需要将其设置为按用户进行登记,具体修改参见 2.4 节中统计系统的安装配置。
结合上面两个机制,其中用户单独日志用于统计单个用户的登录信息,full_audit 产生的日志用于统计文件的用户读写操作信息。这两个原始日志文件都包含有大量不可用的信息,需要对数据进行有效提取才可用。
2.2 日志数据处理过程
以上两个机制产生的用户数据都包含大量的无效信息,不能够直接供上层使用,因此我们要分析日志的结构,并编写相应的程序对数据进行再处理。针对要实现的功能,其中用户访问日志可通过 smb.conf 生成的用户单独日志进行提取,而要实现数据访问统计的基于用户和目录的流量统计,则必须对数据进行中间处理才可用。
在本实验环境中,假设有用户smb1、smb2,共享目录office、doc,则其单个目录下的日志数据读写关系结构如图 3 所示:
在 full_audit 模块记录的日志下,会分别对某个目录下的所有读写情况进行记录,记录的事项包括时间、用户名、读写操作等。对于 Office 目录,其下的读写既包括 Smb1 用户的读写,也包括 Smb2 用户的读写,Doc 目录同理。
图 3 Samba 共享目录用户读写日志关系图
因此,对于用户视图,需要统计某个用户下的读或者写请求,则必须分别统计 office 和 doc 目录的该用户的读或者写请求之和;对于数据视图,需要统计某个目录下的读或者写请求,则必须分别统计该目录下smb1 和smb2 两个用户的读或者写请求之和。
基于以上两点分析,如果要数据可供用户直接使用,必须要对 full_audit 模块监控数据进行分类精化处理,为此本文编写了相应的处理脚本,将该数据进一步分类如下:
单个用户的读记录;
单个用户的写记录;
单个目录的读记录;
单个目录的写记录。
以上四个分类本文称之为处理元数据。后续 API 调用所有功能实现直接基于以上四类元数据。
对于文件的流量,本文采用读/写次数*文件大小的方式进行计算,其中文件的大小可以通过 ls-al 命令获取。
2.3 对外调用接口函数功能实现
为了方便上层应用程序开发调用,本文设计实现了相应的功能接口函数调用,具体功能列表如表 1:
表 1 流量统计系统对外接口函数功能表
2.4 在 GlusterFS 集群文件系统上的部署
本系统在多节点的实现即基于 GlusterFS、GlusterFS 创建的共享目录通过 Samba 对外提供服务。在本实验环境中 GlusterFS 包含两个节点,因此需要对每个服务器节点进行部署。
为了保证数据的一致性,我们在 GlusterFS 集群文件系统上创建了一个共享目录,将相关的统计执行程序、日志目录、API调用接口、Samba 配置文件 smb.conf 以及 rsyslog 配置文件rsyslog.conf 都放置于此共享目录,并将以上文件通过软链接的方式链接到各个节点,当外部有访问请求时,所有的系统调用以及文件操作都会写到位于共享目录的相应文件当中,这样就保证了数据的一致性。通过以上部署,本文设计的 Samba流量统计系统可以适用于集群文件系统并对该系统的数据访问进行有效的统计。
3 Samba 流量统计系统的安装配置
3.1 配置文件设置
单机配置需要修改 smb.conf 以及 rsyslog.conf 两个配置文件,其修改如下:
3.1.1 Samba 配置文件 smb.conf
3.1.2 rsyslog 配置文件 rsyslog.conf
3.2 GlusterFS 集群配置
要实现集群的配置,只需创建共享目录 lock,并将统计系统文件 nas_stat、smb.conf、rsyslog.conf 三个文件放入 lock 目录,并在各节点对应文件存放地建立软链接,其命令如下:
4 结语
本文实现了一种基于日志分析的 Samba 流量统计系统,该系统利用了 Samba 自身的机制记录用户使用行为,但是由于这些数据繁杂不具备直接使用的条件,本系统通过分析数据之间的相互关系,将数据分为用户读、用户写、目录读、目录写四类基本数据,并以此四类数据为基础用脚本实现了对外的 API,大大简化了对原始数据的使用难度。本系统同样适用于集群环境,在集群环境下,通过配置文件共享机制实现了多个服务器之间的数据一致性,保证了统计数据的准确。
参考文献:
[1] ARMBRUST M,FOX A,GRIFFITH R. Above the clouds:aBerkel-ey view of cloud computing[Technical Report UCB/EECS-2009-28][R].2009.
[2] Iptraf Home Page[EB/OL]. http://www.iptraf.seul.org/.
[3] Nload Home Page[EB/OL]. http://nload.mbl.edu/.
[4] Ifstat Home Page[EB/OL]. http://gael.roualland.free.fr/ifstat/.
[5] Samba Home Page[EB/OL].https://www.Samba.org/.
[6] CTDB Home Page[EB/OL]. https://ctdb.Samba.org/.
[7] Common Internet File System (CIFS) Protocol [EB/OL]https://msdn.microsoft.com/en-us/library/aa302188.aspx.
[8] 刘爱贵.基于开源软件构建高性能集群NAS系统[EB/OL].http://blog.csdn.net/liuaigui/article/details/7163482,2011-12-29/2013-10-18.
[9] 鸟哥.鸟哥的 LINUX 私房菜服务器架设篇第三版[M].北京:机械工业出版社,2012:461作者简介:文莎(1986-),男,助教,研究方向为信息存储、信息安全。