Linux培训笔记之监控工具(2)

上面,简单介绍了 inotify 原理相关的东西。其中,我提到了 inotify 提供了面向用户态的 API 。那么 inotify 在用户态的表现形式是什么呢?

这就需要用到一个工具inotify-tools 。

inotify-tools 是为linux下inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件。 inotify-tools是用c编写的,除了要求内核支持 inotify 外,不依赖于其他。

下面来看如何安装inotify-tools!

环境

CentOS6.5 x86_64位 采用最小化安装,系统经过了基本优化

selinux为关闭状态,iptables为无限制模式

源码包存放位置:/root

1、查看服务器内核是否支持inotify

安装inotify 的第一步是确定你使用的 Linux 内核是否支持它

[root@rsync-client ~]# uname -r

2.6.32-431.el6.x86_64

[root@rsync-client ~]# ll /proc/sys/fs/inotify/*

-rw-r--r-- 1 root root 0 Jun  4 15:30 /proc/sys/fs/inotify/max_queued_events

-rw-r--r-- 1 root root 0 Jun  4 15:30 /proc/sys/fs/inotify/max_user_instances

-rw-r--r-- 1 root root 0 Jun  4 15:30 /proc/sys/fs/inotify/max_user_watches

inotify 的默认内核参数详解

/proc/sys/fs/inotify/max_queued_events

默认值: 16384

该文件中的值为调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值得事件被丢弃,但会触发IN_Q_OVERFLOW事件

/proc/sys/fs/inotify/max_user_instances

默认值: 128

指定了每一个real user ID可创建的inotify instatnces的数量上限

/proc/sys/fs/inotify/max_user_watches

默认值: 8192

指定了每个inotify instance相关联的watches的上限,也就是每一个inotify实例可监控的最大目录数。如果监控的文件数目巨大,需要根据实际情况适当增加此值得大小。

注意:

max_queued_events 是 Inotify 管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大!如果你在日志中看到Event Queue Overflow,说明max_queued_events太小需要调整参数后再次使用

调整范例:

[root@rsync-client ~]#

echo 10000000 > /proc/sys/fs/inotify/max_user_watches

2、安装inotify-tools

[root@rsync-client ~]# yum install make  gcc gcc-c++

[root@rsync-client ~]# wget

[root@rsync-client ~]# tar xzf inotify-tools-3.13.tar.gz

[root@rsync-client ~]# cd inotify-tools-3.13

[root@rsync-client inotify-tools-3.13]# ./configure

[root@rsync-client inotify-tools-3.13]# make && make install

OK!这样就安装完成了!

在编译安装 inotify-tools 成功之后,默认情况会在 /usr/local/bin 目录下生成两个二进制文件:

[root@rsync-client ~]# ll /usr/local/bin/inotify*

-rwxr-xr-x. 1 root root 38582 Jun  3 22:23 /usr/local/bin/inotifywait

-rwxr-xr-x. 1 root root 40353 Jun  3 22:23 /usr/local/bin/inotifywatch

其中

inotifywait 仅执行阻塞,等待 inotify 事件,你可以使用它来监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等),并且可以结合 shell 脚本,更好的使用 inotifywait。

inotifywatch 用来收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

inotifywait和inotifywatch学习

下面,我来带大家一起来学习下这2个命令的用法!

inotifywait

语法:

inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]


选项参数:

-h,–help    # 输出帮助信息

@    # 排除不需要监视的文件,可以是相对路径,也可以是绝对路径

–fromfile  # 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头

-m,–monitor # 接收到一个事情而不退出,无限期地执行。默认行为是接收到一个事情后立即退出

-d,–daemon  # 跟–monitor一样,除了是在后台运行,需要指定 –outfile把事情输出到一个文件。也意味着使用了–syslog

-o,–outfile # 输出事情到一个文件而不是标准输出。

-s,–syslog  # 输出错误信息到系统日志

-r,–recursive # 监视一个目录下的所有子目录。

-q,–quiet  # 指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。

–exclude    # 正则匹配需要排除的文件,大小写敏感。

–excludei  # 正则匹配需要排除的文件,忽略大小写。

-t,–timeout# 设置超时时间,如果为0,则无限期地执行下去。

-e,–event  # 指定监视的事件。

-c,–csv    # 输出csv格式。

–timefmt    # 指定时间格式,用于–format选项中的%T格式。

–format    # 指定输出格式。

%w 表示发生事件的目录

%f 表示发生事件的文件

%e 表示发生的事件

%Xe 事件以“X”分隔

%T 使用由–timefmt定义的时间格式

下面是一些可监听事件,针对-e选项使用:

access

 

文件读取

 

modify

 

文件更改。

 

attrib

 

文件属性更改,如权限,时间戳等。

 

close_write

 

以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。

 

close_nowrite

 

以只读模式打开的文件被关闭。

 

close

 

文件被关闭,不管它是如何打开的。

 

open

 

文件打开。

 

moved_to

 

一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。

 

moved_from

 

一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。

 

move

 

包括moved_to和 moved_from

 

move_self

 

文件或目录被移除,之后不再监听此文件或目录。

 

create

 

文件或目录创建

 

delete

 

文件或目录删除

 

delete_self

 

文件或目录移除,之后不再监听此文件或目录

 

unmount

 

文件系统取消挂载,之后不再监听此文件系统。

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/17814.html