2.2 Linux及其系统内核
2.2.1 Linux及其系统内核的简介
Linux是一个开源免费的类Unix操作系统。Linux基于Unix系统而开发,含有多用户、多任务、多线程、多CPU的特性。Linux还继承了Unix的网络核心的设计理念,是一个优秀的网络操作系统。
Linux内核将一切都文件化了——所有的指令、软硬件、进程、操作系统等等,都以各式的文件形式表现出来,这使得用户对Linux系统的掌控能力进一步增强,也更易于监控和获取系统参数,例如:/dev目录下存放了系统所使用的外部设备;/etc目录存放了系统和应用的配置文件;/proc目录存放了各种系统信息等等。
此外,Linux内核还提供了各种系统函数和结构体,通过这些函数和结构体也可以查看系统当前的性能状态,例如:stat()函数可以获取Linux中的文件信息;getrusage()可以获取系统资源使用情况;sysinfo()可以获取系统信息;time()可以取得系统时间;sysinfo结构体可以查看内存等等。
2.2.2 Linux及其系统内核在本文中的应用
本文使用了Linux下"/proc"目录的虚拟文件系统。用户通过这个文件文件系统可以和内核数据结构交互,获取内存中的信息,比如:
"/proc/cpuinfo"文件提供了CPU的信息,比如型号、主频、缓存等信息。
"/proc/meminfo"文件提供了物理内存空间等信息。
同时"/proc"目录下还可以获取运行中的进程的信息。这个目录下有一些被编号的子目录,这些子目录就对应着它们编号相同的进程。
本文还使用了Linux内核提供的系统函数sysconf()和sysinfo()。
当代PC大多使用了多核心的CPU,所以监控时必须了解CPU的个数,分别监控,所以我们调用sysconf(_SC_NPROCESSORS_CONF)函数获得CPU的数量,调用sysconf(_SC_NPROCESSORS_ONLN)函数获得在线的CPU数量。
在内存方面,我们使用系统提供的结构体sysinfo来获取有关信息。Sysinfo提供了启动到现在经过的时间、总的可用内存大小、还未被使用的内存大小、共享的存储器大小、缓冲区大小、交换区大小、还可用的交换区大小、当前进程数等。这些是我们监控系统性能的重要组成部分。
2.3 正则表达式Regex
2.3.1 正则表达式Regex的简介
正则表达式,也被称作规则表达式。英译为:Regular Expression(Regex)。它在计算机科学中时常被用来匹配符合特定规则的字符串,从而起到筛选、查找的作用。
数学家Stephen Kleene在1951年提出了正则表达式的概念,之后它被推广到更多的应用领域,Unix之父Ken Thompson把正则表达式引入了Unix,之后被广泛使用在Unix和Unix有关或者类似的工具中,变成了一个成功的字符规则。如今,我们几乎可以在计算机领域的各个角落都能发现正则表达式的优美的身影。
我们可以把正则表达式看做是一种字符串公式,它的输入是一个原字符串,我们通过我们设定的规则,去过滤原字符串,从而获得我们想要得到目标子串。
正则表达式的特点有:功能性、逻辑性和灵活性强;可以用极短的篇幅表示一些极复杂的字符串。
2.3.2 正则表达式RegEx在本文中的应用
本文中,我们的系统需要监控网络应用所产生的日志和操作系统本身的日志。但是大部分的时间,我们的系统都处在正常运行的状态中,可以一整天都不会出现问题,但是这一天它依然后生成成百上千甚至上万的日志量,这些日志在我们排除故障的过程,都是无用的日志,我们无法通过这些日志查找错误的来源。而它们的数量决定了我们必须将它们剔除在我们的视野之外。因此我们需要工具过滤出一些包含特定动作或者含义的日志记录,比如:regist,submit,login,error,warning等关键词。然后我们需要提取它们的时间戳,IP地址等等,在这方面,正则表达式有着拔群的效果。 zabbix程序能力训练测试平台分布式服务器维护监控系统(5):http://www.chuibin.com/jisuanji/lunwen_205642.html