cci-job-client日志与监控:构建可观测的测试作业管理系统
cci-job-client日志与监控:构建可观测的测试作业管理系统
【免费下载链接】cci-job-clientA LKP jobs client for Compass-ci: submit LKP jobs and get the status of the LKP jobs项目地址: https://gitcode.com/openeuler/cci-job-client
前往项目官网免费下载:https://ar.openeuler.org/ar/
cci-job-client是openEuler社区推出的LKP作业客户端工具,能够帮助用户便捷地提交LKP测试作业并实时监控作业状态。在测试流程中,完善的日志记录与监控机制是保障作业稳定运行和问题快速定位的关键。本文将详细介绍如何通过cci-job-client的日志配置与监控功能,构建可观测的测试作业管理系统。
日志系统基础:配置与结构
日志是系统可观测性的基础,cci-job-client通过灵活的日志配置满足不同场景的需求。项目的日志配置文件位于config/logger.conf,采用Python logging模块的标准配置格式,支持多处理器、多格式器和日志级别控制。
核心日志配置解析
配置文件主要包含三个部分:日志器(loggers)、处理器(handlers)和格式器(formatters):
- 日志器:定义不同命名空间的日志行为,如
root(根日志)和common(应用日志) - 处理器:指定日志输出方式,支持控制台输出(
consoleHandler)和文件输出(fileHandler) - 格式器:控制日志内容格式,提供简单格式(控制台输出)和详细格式(文件输出)
文件处理器采用轮转策略(RotatingFileHandler),配置如下:
[handler_fileHandler] class=logging.handlers.RotatingFileHandler level=INFO formatter=detailedFormatter args=('logs/common.log', 'a', 5*1024*1024, 5, 'utf-8')上述配置表示日志文件达到5MB时自动轮转,最多保留5个备份文件,确保日志不会无限增长。
日志格式设计
cci-job-client采用两种日志格式:
简单格式(控制台输出):包含时间、日志名称、级别和消息
%(asctime)s - %(name)s - %(levelname)s - %(message)s详细格式(文件输出):额外包含文件名、行号和函数名,便于问题定位
%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(funcName)s - %(message)s
作业监控机制:实时追踪与状态管理
测试作业的监控是确保测试流程可靠执行的关键环节。cci-job-client通过src/wait_job_finish.py实现作业状态的持续追踪,核心功能包括状态轮询、前置任务检查和结果统计。
状态轮询实现
wait_job_finish.py中的query_jobs函数实现了作业状态的循环查询逻辑:
- 定期调用
fetch_job_status函数获取作业状态(默认每10秒一次) - 检查HTTP响应状态码,处理API请求失败情况
- 解析作业阶段(
job_stage),判断作业是否进入终态(完成或中止) - 支持最长等待时间设置(默认24小时),避免无限等待
关键状态判断代码:
if job_stage in ('finish', 'abort_invalid', 'abort_provider', 'abort_wait'): logger.info(f"{job_suite}:{job_id}任务已结束,状态:{job_stage}") break前置任务依赖处理
系统支持作业间的依赖关系管理,当检测到当前作业存在前置任务时:
- 自动查询前置任务ID(
pre_job_id) - 递归等待前置任务完成
- 获取前置任务结果归档链接,实现全链路追踪
相关实现位于query_jobs函数中:
wait_job = data.get('wait_on') if wait_job: pre_job_id = list(wait_job.keys())[0] logger.info(f"{job_suite}:{job_id}存在前置任务{pre_job_id}, 需查询并等到前置任务结束") _, pre_job_suite = query_jobs(pre_job_id, sched_host, sched_port, timeout, poll_interval)日志与监控实践:从部署到问题定位
快速部署与配置
克隆项目仓库:
git clone https://gitcode.com/openeuler/cci-job-client cd cci-job-client安装依赖:
pip install -r requirements.txt自定义日志配置(可选): 修改config/logger.conf调整日志级别、输出路径或轮转策略
作业监控命令示例
提交作业后,使用以下命令监控作业状态:
python src/wait_job_finish.py --job_id 123456 --sched_host 192.168.1.100 --poll_interval 5主要参数说明:
--job_id:作业ID(必需)--sched_host:调度器主机地址--poll_interval:状态查询间隔(秒)--timeout:最长等待时间(秒)
日志分析与问题定位
当日志中出现警告或错误时,可通过以下步骤快速定位问题:
- 检查日志文件:默认位于
logs/common.log - 利用详细日志格式:通过文件名、行号定位问题代码位置
- 关注关键状态码:HTTP请求失败(非200状态码)通常指示网络或服务问题
- 分析作业阶段转换:异常终止状态(如
abort_provider)提示资源或配置问题
高级监控:测试结果统计与可视化
cci-job-client提供了测试结果的自动统计功能,当作业完成后,系统会解析result.json文件并生成测试报告:
- 用例状态分类:成功(pass)、失败(failed)、跳过(skip)
- 数量统计:总用例数、各类状态用例数量
- 详细日志链接:为每个用例提供直接访问日志的URL
结果统计实现位于wait_job_status函数中,通过表格形式展示:
测试用例统计结果: ============================================================ 总用例数 成功用例 失败用例 跳过用例 10 8 2 0 ============================================================对于失败用例,系统会特别标记并提供日志路径,便于快速定位问题原因:
失败的测试用例: case1 failed http://sched_host:port/result_root/logs/case1 case2 failed http://sched_host:port/result_root/logs/case2 ------------------------------------------------------------总结:构建可靠的测试作业观测体系
通过cci-job-client的日志与监控功能,用户可以构建完整的测试作业观测体系:
- 全面的日志记录:多级别、多格式的日志输出,满足调试和审计需求
- 实时状态监控:持续追踪作业进度,支持前置任务依赖管理
- 详细结果分析:自动统计测试用例状态,提供直观的结果报告
- 灵活的配置选项:通过配置文件调整日志行为,适应不同环境需求
无论是日常测试还是大规模自动化测试场景,这些功能都能帮助用户提高测试效率,快速定位问题,确保测试流程的可靠性和可追溯性。
要开始使用cci-job-client构建你的测试作业管理系统,只需克隆仓库并参考README.md中的详细说明进行配置和部署。通过合理利用日志和监控功能,你将能够更加轻松地管理和维护测试作业流程。
【免费下载链接】cci-job-clientA LKP jobs client for Compass-ci: submit LKP jobs and get the status of the LKP jobs项目地址: https://gitcode.com/openeuler/cci-job-client
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
