前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux下监控文件变化并抓取系统运行参数

Linux下监控文件变化并抓取系统运行参数

原创
作者头像
张作峰
修改于 2017-06-23 08:54:28
修改于 2017-06-23 08:54:28
5.6K00
代码可运行
举报
文章被收录于专栏:张作峰的专栏张作峰的专栏
运行总次数:0
代码可运行

最近遇到一个需求:

web应用层往中间件发送信息的时候,经常出现莫名奇妙的异常,为了定位该中间件发送客户端的bug,需要抓取异常瞬间的系统运行参数: momery dumptcp dump等.

  1. 当发生异常时已经将发送失败的信息打印到了日志文件中。
  2. 异常不定期的发生。

针对这个问题,手动的跟踪肯定不现实。因此,需要通过脚本监控日志文件的变化,且在变化的瞬间捕获系统运行参数。

系统参数

代码语言:javascript
代码运行次数:0
运行
复制
cat /etc/redhat-release
CentOS Linux release 7.0 (Final)

Linux的文件监控工具 inotify-tools

inotify-tools提供的两个命令行工具

inotifywait:通过inotify API等待被监控文件上的相应事件并返回监控结果,默认情况下,正常的结果返回至标准输出,诊断类的信息则返回至标准错误输出。它可以在监控到对应监控对象上指定的事件后退出,也可以进行持续性的监控。

inotifywatch:通过inotify API收集被监控文件或目录的相关事件并输出统计信息。

在此次需求中,需要使用inotifywait

inotifywait命令使用简介:

inotifywait尤其适用于在脚本中等待某事件的发生,并可基于特定的事件执行相应操作。如将其用于脚本中监控某指定目录中的文件上的修改、新建、删除、属性信息的改变,而后使用rsync命令将某事件对应的文件同步至其它主机上。其常用选项如下:

-m, --monitor:inotifywait的默认动作是在监控至指定文件的特定事件发生一次后就退出了,而使用此选项则可实现持续性的监控;

-r, --recursive:递归监控指定目录下的所有文件,包括新建的文件或子目录;如果要监控的目录中文件数量巨大,则通常需要修改/proc/sys/fs/inotify/max_users_watchs内核参数,因为其默认值为8192。

-e , --event :指定要监控的特定事件,默认是监控所有的事件;此处包括access, modify, attrib, close_write, close_nowirte, close, open, moved_to, moved_from, move, create, delete, delete_selt等;

--timefmt :当在--format选项中使用%T时,--timefrt选项则可以用来指定自定义的符合strftime规范的时间格式,此时间格式可用的格式符可以通过strftime的手册页获取;--timefrt后常用的参数是'%d/%m/%y %H:%M';

--format :自定义inotifywait的输出格式,如--format '%T %w %f';常用的格式符如下:

%w:显示被监控文件的文件名;

%f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;

%T:使用--timefmt选项中自定义的时间格式;

例如,要监控/tmp/test目录及其内部所有文件上发生的create,delete,modify,close_write事件,则使用如下命令:

代码语言:javascript
代码运行次数:0
运行
复制
inotify -r --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e create,delete,modify,close_write /tmp/test

此命令在监控到某文件上第一次事件后就会退出,如果想一直监控,则需要为命令添加-m选项。

更详细的使用介绍: 系统监控工具----Inotify-Tools, 关于原理: 基于inotify机制的实时文件监控

安装

代码语言:javascript
代码运行次数:0
运行
复制
yum --enablerepo=epel -y install inotify-tools

编写shell脚本并运行

1. 编写shell脚本

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
DIR=$1
echo $1   
tomcatport=$(ps -ef | grep tomcat | grep -v grep | awk '{print $2}' )
echo $tomcatport
echo 'wait'
inotifywait  -e modify $DIR
echo $1
echo 'file change , then tcp dump'
tcpdump -i eth1 -c 1000 > tcpdump.log
echo 'dump end, then memory dump'
jmap -dump:format=b,file=heap.hprof $tomcatport
echo 'all done'
exit
  1. 文件一旦变化,打印memory dumptcp dump
  2. memory dump 需要先获取 tomcatPID

如果需要循环监听文件变化, 可以给inotifywait添加-m参数, 并通过管道添加while循环

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
 DIR=$1    
 echo $1   
 tomcatport=$(ps -ef | grep tomcat | grep -v grep | awk '{print $2}' )
 echo $tomcatport

echo 'wait'
inotifywait -m -e close_write $DIR --format "%w%f" | while read FILE
do
    tcpdump -i eth1    -c 100 > tcpdump.log
    jmap -dump:format=b,file=heap.hprof $tomcatport
done

保存成shell脚本文件: Monica.sh

2. 上传到服务器

代码语言:javascript
代码运行次数:0
运行
复制
rz -e

将dos命令符修改为unix [可选] 由于lz使用的是windows系统,需要将文件转码

代码语言:javascript
代码运行次数:0
运行
复制
dos2unix Monica.sh

3. 添加可执行权限

代码语言:javascript
代码运行次数:0
运行
复制
chmod +x Monica.sh

4. 运行

代码语言:javascript
代码运行次数:0
运行
复制
sh Monica.sh /data/logs/ocece-message.log &

参考文献

  1. inotify用法简介及以之结合rsync实现主机间的文件实时同步
  2. Inotify: 高效、实时的Linux文件系统事件监控框架

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
linux实时文件事件监听--inotify
inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改、新增、删除等,并可以将相应的事件通知给应用程序。该机制由著名的桌面搜索引擎项目beagle引入用于替代此前具有类似功能但存在诸多缺陷的dnotify。
sunsky
2020/08/20
13K1
Linux 结合 inotify 和 rsync 实现文件动态同步
根据 inotify 的相关知识,可以发现,很多动作都涉及了close事件,且大多数情况都是伴随着close_write事件的。所以,大多数情况下在定义监控事件时,其实并不真的需要监控open、modify、close事件。特别是close,只需监控它的分支事件close_write和close_nowrite即可。由于一般情况下inotify都是为了监控文件的增删改,不会监控它的访问,所以一般只需监控close_write即可。
为为为什么
2022/08/06
2.1K0
Shell 监控文件变化
文件监控可以配合rsync实现文件自动同步,例如监听某个目录,当文件变化时,使用rsync命令将变化的文件同步。(可用于代码自动发布)
释然IT杂谈
2022/10/27
1.5K0
Shell 监控文件变化
inotify+rsync实现实时同步
惨绿少年
2017/12/27
1.7K0
inotify+rsync实现实时同步
inotify-tools监控文件的变动情况
在实际的生产中,都会存在不同系统的对接问题,比如A系统将数据生产后存放到/data文件下,B系统需要监控/data文件夹下数据的变动情况,来做出调整,linux系统中inotify-tools正好可以完成系统的监控而supervise正好可以完成进程的持续监控,起到出错重启的效果。
Tim在路上
2020/08/04
7610
inotify 实时的Linux文件系统事件监控
# wget http://downloads.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
星哥玩云
2022/06/30
8390
Linux 通知 inotify
如果看到显示 max_queued_events max_user_instances max_user_watches 则说明支持inotify
为为为什么
2022/08/06
1.3K0
linux如何监控文件变化
使用nohup,其中test.sh为所执行的脚本,out.txt为输出信息的地方。
用户10002156
2023/09/12
1.2K0
linux如何监控文件变化
LINUX运维学习之综合架构篇——综合架构实时同步服务
1)需要部署好rsync守护进程服务,实现数据传输 2)需要部署好inotify服务,实现目录中数据变化监控 3)将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输
云计算小黑
2021/06/16
4390
文件监控-inotify安装与使用分享
开篇:在Linux环境开发过程中,遇到需要监控某个目录的文件是否发生变化执行相应脚本,网上了解一下,inotify完美符合需求。
恒恒
2019/04/25
5.2K0
inotify软件部署及实时同步
声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/developerworks/cn/linux/l-inotifynew/ inotify--Linux 2.6内核中的文件系统变化通知机制 安装inotify须知 首先,在安装inotify软件之前一定要确认系统中,必须要存在的三个文件 [root@backup ~]# ll /proc/sys/fs/inotif
863987322
2018/01/24
8790
inotify软件部署及实时同步
rsync+inotify自动进行同步
Sync:同步 async:异步 Rsync:远程同步,可以将数据同步到多个和它能够通信的主机上。
互联网-小阿宇
2022/11/21
2080
rsync+inotify自动进行同步
rsync+inotify实现分布式集群部署
上一篇:Linux下使用ssh密钥实现无交互备份 上二篇:Linux下使用rsync实现文件备份 缘起 由于公司要对支付做压测,于是使用了公司的服务器搭建了一个简单的集群环境,但是各个节点分别部署确实有点麻烦,由此产生了一下想法,使用rsync+inotify同步部署集群项目,就是主节点项目变更会自动同步到其他集群节点上。 优点 使用rsyn工具和inotify机制相结合,可以实现触发式部署(实时同步),只要原始(主)位置的文档发生变幻,则立即启用增量推送操作,否则处于静态等待状态,这样以来,就避免了分布式
小柒2012
2018/04/13
1.4K0
rsync+inotify实现分布式集群部署
linux服务器同步利器​Rsync全介绍(付脚本)
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试 此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具
IT运维技术圈
2023/02/02
2K0
inotify+rsync数据的实时同步
inotify可以监控同步数据服务器目录中信息的变化,采用异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件。
用户9949933
2023/02/24
5260
rsync+inotify实时同步环境部署记录
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足。 首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。 其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时
洗尽了浮华
2018/01/22
1.1K0
inotify-tools工具安装配置
Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。。
felixxue
2022/12/29
1.2K0
inotify-tools工具安装配置
Linux下使用inotify-tools实现文件监控并自动推送钉钉webhook告警
Linux下使用inotify-tools实现文件监控并自动推送钉钉webhook告警
yuanfan2012
2024/06/14
6320
Linux下使用inotify-tools实现文件监控并自动推送钉钉webhook告警
inotify-rsync文件实时同步问题记录
如图分析原因:通过ftp或者其他客户端上传一个稍大点的文件到文件同步监控目录下,inotifywait会实时监控到此目录下该文件的创建及修改,此时上传文件对文件修改可能是每1024个字节一次写入(可能更多,根据写文件客户端而定),因此在一定时间内造成了大量的并发,因为每次修改都会触发inotifywait检测到MODIFY类型的文件操作,同时也会调用rsync传输工具对该文件进行传输,在大量并发的情况下,对该文件的文件传输也会产生大量并发的传输,会造成io阻塞。 修改方案:在正常对文件的操作下,都会有CLOSE_WRITE,因此我们不需要让inotifywait监控MODIFY类型的事件,就不会触发大量并发的文件传输。 附上部分文件同步监控shell代码:
felixxue
2022/12/30
5950
inotify-rsync文件实时同步问题记录
使用 inotify 和 rsync 实现文件实时同步
在生产中有一种需求是,当目录下的文件数据发生变化时,就将数据备份到备份服务器上。实现这样的需求需要做到以下两点:
:Darwin
2023/07/05
1.9K0
相关推荐
linux实时文件事件监听--inotify
更多 >
目录
  • Linux的文件监控工具 inotify-tools
  • 编写shell脚本并运行
    • 1. 编写shell脚本
    • 2. 上传到服务器
    • 3. 添加可执行权限
    • 4. 运行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档