借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

admin 2024年8月6日10:46:35评论11 views字数 2968阅读9分53秒阅读模式

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

一、场景

《业务服务器免装插件,使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1》 

之前有做一定的优化

参考此篇:《使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1【优化篇】》 进行了rsync同步脚本的优化,优化内容如下 1、只同步源服务器上当天的日志文件(日志文件名中有日期)

2、排除掉异常的日志文件,加到排除名单文件中

vi /opt/server_logfiles_rsync.sh 
#!/bin/bash
LOCK=/var/log/logs_rsync_record.log
FILENAME_MONTH=`date +%m`
FILENAME_DAY=`date +%e`
echo "同步日期:" >> ${LOCK} 2>&1
echo `date '+%Y-%m-%d_%T'`  >> ${LOCK} 2>&1
echo "=================  logs Rsync starting==============================="   >> ${LOCK} 2>&1
rsync --progress -avz --exclude-from='/opt/exclude-files.txt' --perms --chmod=ugo+r -og --chown=root:root -e "ssh -p 22" [email protected]:/data/*_${FILENAME_MONTH}_${FILENAME_DAY}_*.txt /datarsync/ >> ${LOCK} 2>&1
echo "================= logs Rsync Finished==============================="   >> ${LOCK} 2>&1

然后crontab定时同步

crontab -e
crontab -l
#每分钟同步一次
*/1 * * * * /opt/server_logfiles_rsync.sh 

二、后面再次优化

crontab定时任务最多能实现1分钟执行一次的频率

借助telegraf的inputs.exec模块实现秒级的shell脚本定时执行

参考此篇:《【优化篇】telegraf+shell脚本实现秒级的服务状态异常监测与告警

telegraf部分配置如下

[[inputs.exec]]
  commands = [
    "sudo sh /opt/server_logfiles_rsync.sh"
  ]
  name_override = "rsync"
  timeout = "10s"
  interval = "10s"
  data_format = "value"
  data_type = "string"

同步的频率设置成10秒1次

三、问题

但是发现rsync+nxlog采集后发送给Graylog,Graylog的收到日志量暴增,如下图所示

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

且业务侧反馈Graylog上面查询到的告警日志经常会有很多重复的日志,一直没有找到原因

四、借助chatgpt解决该问题的过程

后来经过借助chatgpt询问

rsync 将文件同步到本地Linux服务器上,在本地的Linux服务器上用nxlog读取该文件,发现读取时有重复,这是什么原因导致的?

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

接着在原来的脚本的基础上面增加-u --update增量同步的参数

rsync --progress -avzu --min-size=1 --perms --chmod=ugo+r -og --chown=root:root -e "ssh -p 22" [email protected]:/data/*_${FILENAME_MONTH}_${FILENAME_DAY}_*.txt /datarsync/ >> ${LOCK} 2>&1

但是发现加了这个参数后问题依旧,还是会有重复读取的问题 这是觉得可能是nxlog的配置问题

继续询问chatgpt

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题(图片点击放大查看)

发现真正的原因是:日志文件被修改或替换:如果日志文件在 nxlog 启动后被修改或替换,可能导致文件的位置信息不准确。例如,当 rsync 同步过程中文件被替换为新的文件时,nxlog 可能会将其视为新文件,并从头开始读取。

这如何避免rsync同步时重复读取的这种情况?

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

并且日志重复读取的时候,tail -f /var/log/nxlog/nxlog.log发现

 nxlog 日志中出现大量 "reopening possibly rotated file”关键字

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

五、最终的解决办法:

配置 rsync 的 --inplace 参数:通过将 rsync 命令中的 --inplace 参数添加到命令中,可以使 rsync 在同步过程中直接将更新写入目标文件,而不是创建一个新的临时文件后再替换。这样可以确保文件的 inode 和修改时间保持不变,避免引起 nxlog 重新读取文件。

这时修改脚本即可,添加--inplace参数 server_logfiles_rsync.sh 最终的脚本如下

#!/bin/bash
FILENAME_MONTH=`date +%m`
FILENAME_DAY=`date +%d`
LOCK=/var/log/rsynclogs/logs_rsync_record_${FILENAME_MONTH}_${FILENAME_DAY}.log
echo "同步日期:" >> ${LOCK} 2>&1
echo `date '+%Y-%m-%d_%T'`  >> ${LOCK} 2>&1
echo "=================  logs Rsync starting==============================="   >> ${LOCK} 2>&1
rsync --progress -avuz --inplace --exclude-from='/opt/exclude-files.txt' --perms --chmod=ugo+r -og --chown=root:root -e "ssh -p 22" [email protected]:/data/*_${FILENAME_MONTH}_${FILENAME_DAY}_*.txt /datarsync/ >> ${LOCK} 2>&1
echo "================= logs Rsync Finished==============================="   >> ${LOCK} 2>&1

然后日志量明显下降,且日志未再重复

借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

(图片点击放大查看)

原文始发于微信公众号(WalkingCloud):借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月6日10:46:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   借助chatgpt解决GrayLog下使用rsync+nxlog采集日志时出现大量日志重复读取的问题https://cn-sec.com/archives/2009610.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息