当前位置: 首页 > news >正文

免密批量抓取日志并集中输出

免密批量抓取日志

项目全部跑的都是批量程序,每个批量程序都有很多很多日志。每次跑完整批量,涉及执行的任务job量特别大,而排查问题的时候,又得一个个通过堡垒机去登录单台服务器,然后查询某个具体日志。统计了一个完整批,涉及到的任务11240个!!

为了集中排查问题方便,打算做一个工具,集中抓取所有的日志。前期依赖准备 如下:

  1. 因为每个job都会有调度ID,该job执行过程中的所有日志,都带上了该关键字,因此可以通过该关键字抓取。
  2. 所有执行的job,都会在各应用的数据库平台表中,有该任务的调度ID、执行HOST、日期。
  3. 对于日志文件名,遵照命令规则:
    1. 当前日志文件名: $path_prefix/logs/batch-file.log
    2. 已归档日志文件: $path_prefix/logs/batch-file.20260205.n.log.gz
  4. 对于linux,可以通过token免密登录,并且通过指定-n 并带上命令参数 来实现效果:执行命令,完事后退出
    1. 示例: ssh -n $host "grep '|1001|' logs/batch-file.log" 这样就将命令的结果直接输出到标准流中
    2. 示例: ssh -n $host "grep '|1001|' logs/batch-file.log" > 1001.log 执行命令并将结果输出到本地1001.log文件中
  5. 通过命令zgrep 可以同时实现普通文件、压缩文件的grep操作。

配置免密登录

堡垒机中,各服务器是互通的,但是没有明文密码,因此不能相互访问。但是通过验证发现:

  1. 在A服务器上通过ssh-keygen生成秘钥对;
  2. 将公钥加入B服务器的~/.ssh/authorized_keys中并配置好权限
  3. 这是,服务器A可以ssh直接登录到B

需要注意,权限包括:

  • .ssh 目录,必须是700
  • .ssh/authorized_keys 文件,必须是600

操作中遇到个
通过vi打开生成的公钥id_rsa.pub, 然后拷贝放到B的authorized_keys文件中,操作后ssh还是提示输入密码。在此之前,已经确认过权限。后来经排查发现,vi中拷贝的内容,在粘贴时自动换行了,导致公钥被断开不完整,因此需要输入密码。

因为批量框架有广播,可以直接下发文件、执行脚本,因此把公钥下发并在脚本中完成上述权限操作即可。

免密,在有明文密码的情况下,尽量使用: ssh-copy-id 这样可以避坑。

批量抓日志脚本

脚本规划:

  • 因为平台每次调度批都有唯一ID,因此整个配置、抓取日志输出,都可以跟该调度ID绑定。
  • 因每次调度批,分多个模块,各模块有自己的库和应用,同时为了时间考虑,按模块并行抓取日志。
  • 基于上述考虑,脚本批包括:
    • grep_log.sh 这是主脚本
    • config/$schedule_$module.cfg 这是每个模块的配置文件
    • output/$schedule/$eid.log 这是每个job的日志
  • 执行脚本:
    • sh grep_log.sh $schedule $module
    • 参数1: schedule 完整调度ID
    • 参数2: module 跑那个模块
    • 执行过程:根据调度id、模块ID找到自己的配置文件,对每条配置使用使用zgrep抓日志并输出到对应日志文件中。

首先,通过应用模块的数据库表,将每个任务的host,eid,dt几个关键字拿到,放入到配置文件中。内容通过sql生成:

select host || ',' || eid || ',' || task_exec_date
from t_frame_task
where schedule = ${spe_id: 1001}

编写实现脚本:

#!/bin/bash# 检查是否传入了参数 p1
if [ $# -ne 1 ]; thenecho "Usage: $0 <p1>"exit 1
fip1="$1"
config_file="${p1}.cfg"# 检查配置文件是否存在
if [ ! -f "$config_file" ]; thenecho "Error: Configuration file '$config_file' does not exist." >&2exit 1
fi# 读取配置文件,跳过空行和以#开头的行
while IFS= read -r line || [ -n "$line" ]; do# 跳过空行if [ -z "$line" ]; thencontinuefi# 跳过以#开头的注释行(允许前面有空白字符)if [[ "$line" =~ ^[[:space:]]*# ]]; thencontinuefi# 按逗号分割成三个字段IFS=',' read -r host eid datestr <<< "$line"# 去除每个字段前后的空白字符# 因为配置中直接就是sql生成,没有空白,下面的处理不需要host=$(echo "$host" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')keyword=$(echo "$eid" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')datestr=$(echo "$datestr" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')# 检查是否成功解析出三个字段if [ -z "$host" ] || [ -z "$keyword" ] || [ -z "$datestr" ]; thenecho "Warning: Skipping invalid line: $line" >&2continuefi# 构造并输出命令字符串shell_cmd="ssh -n $host \"zgrep $keyword batch-file.$datestr.*.gz batch-file.log\""echo "shell cmd: ${shell_cmd}"ssh -n  $host "zgrep '${keyword}' batch-file.$datestr.*.gz batch-file.log" > $keyword.logdone < "$config_file"echo "done!!"

使用

因为服务器比较多,因此每个抓取时间可能长,推荐后台进程方式运行

nohup sh grep_log.sh 10086 ma > 10086_ma_grep.log 2>&1 &

可以个性化的点:

  • 具体每个job抓取日志的范围,可以去定制,比如只抓取带有warn, error的日志
  • 要抓取哪些job,可以去定制,比如对执行失败的任务、对耗时超过5分钟的任务

小结

通过这个日志抓取工具,工作更顺了呢 () !!

http://www.jsqmd.com/news/351007/

相关文章:

  • P1057 [NOIP2008 普及组] 传球游戏 题解
  • CANN 生态安全基石:`cann-security-module` 如何构建可信 AI 执行环境
  • 备考2026执医,新课程推荐哪一个? - 医考机构品牌测评专家
  • Spring AI Alibaba 核心组件
  • CANN 生态工具链实战:用 `profiler` 项目深度优化模型性能
  • CANN 生态全景:`cann-toolkit` —— 一站式开发套件如何提升 AI 工程效率
  • 哪个执业医师课程通过率最高? - 医考机构品牌测评专家
  • 全网热议!2026年青岛实验室净化工程源头厂家排行 - 睿易优选
  • 从外包到大厂 AI 岗:我用 1 年时间踩平的 5 个职业坑
  • P7909 [CSP-J 2021] 分糖果
  • 学考赋能哪家优?泛微青蓝阁、考试星、酷学院、云学堂实力拆解
  • 低代码赋能供应商管理:打破管理壁垒,重塑供应链效能
  • CANN 生态新星:`minddata-dataset-engine` 如何加速 AI 数据 pipeline
  • 达梦数据库查重实战:多字段联合去重完整指南
  • 考临床执医,推荐听谁的课好? - 医考机构品牌测评专家
  • SSM基于J2EE的山西旅游网站的设计与实现iiqmx(软件+源码+数据库+调试部署+创建环境)带论文文档1万字以上,文末可获取,框架界面在最后面。
  • 2026中医执医刷题神器深度测评:如何选择高效备考工具? - 医考机构品牌测评专家
  • 维卡软化点与热变形试验设备:技术解析与操作指南
  • 飞牛Nas使用docker安装OpenClaw
  • audio核心技术原理全景解读
  • 决胜2026执业医师考试:一份全面的备考资料选择与使用指南 - 医考机构品牌测评专家
  • 2026年分样仪选购指南:分样精度/收集容器选择/品牌排名/性能参数深度解析 - 品牌推荐大师1
  • 2026年厦门HE封片机企业最新推荐榜:HE滴染封片机、滴染HE封片机、HE染色封片机、聚焦产品研发实力与行业服务能力深度剖析 - 海棠依旧大
  • 计时工具 Catime
  • 战术级MEMS陀螺适用于哪些领域?
  • Nginx 站点屏蔽/特定国家或地区
  • 【防坑指南 | 可以不会不能不懂】夏日开车注意事项
  • CANN赋能AIGC:深度剖析与实践,解锁智能生成新范式
  • 这款 MEMS 陀螺升级了哪些地方?
  • CANN赋能AIGC:深度定制算子,释放生成式AI的极致性能潜力