env_check高级使用指南:如何自定义检查规则和扩展测试actor

env_check高级使用指南:如何自定义检查规则和扩展测试actor
env_check高级使用指南如何自定义检查规则和扩展测试actor【免费下载链接】env_checkA tool for health checking after operating system upgrade项目地址: https://gitcode.com/openeuler/env_check前往项目官网免费下载https://ar.openeuler.org/ar/openEuler的env_check工具是一个强大的操作系统健康检查工具专门用于系统升级后的环境验证。本文将深入探讨env_check的高级功能包括如何自定义检查规则和扩展测试actor帮助用户充分利用这个工具进行系统健康检查。为什么需要自定义检查规则 env_check默认提供了丰富的系统检查功能涵盖了文件系统、网络配置、安全设置、服务状态等多个方面。然而每个企业的IT环境都有其独特性定制化需求不同业务场景需要不同的检查标准合规性要求特定行业或组织有专门的合规检查项性能优化针对特定硬件或应用的特殊性能检查安全加固自定义的安全基线检查规则通过自定义检查规则您可以确保系统符合组织特定的安全策略验证业务应用依赖的特殊配置检查自定义服务的运行状态验证特定的性能指标env_check架构解析 ️env_check采用模块化的actor架构每个检查单元都是一个独立的actorsut/env_check/check_actor/ ├── base_check_actor.py # 基类定义 ├── example_actor.py # 示例actor ├── system_cmd_actor.py # 系统命令检查 ├── network_cmd_actor.py # 网络配置检查 ├── security_cmd_actor.py # 安全检查 └── ... 50个检查actor核心组件说明BaseCheckActor(sut/env_check/check_actor/base_check_actor.py) - 所有actor的基类OeBaseActor(sut/env_check/check_actor/oe_base_actor.py) - 基于脚本执行的actor基类EnvCheck(sut/env_check.py) - 主程序负责加载和执行所有actor如何创建自定义检查actor ✨步骤1了解actor基本结构每个actor都是一个Python类继承自BaseCheckActor或OeBaseActor。最基本的actor结构如下# 自定义actor示例 from sut.env_check.check_actor.base_check_actor import BaseCheckActor, ReturnMessage class CustomSecurityActor(BaseCheckActor): name CustomSecurityActor description 自定义安全配置检查 level High priority mandatory task_type (BaseCheckActor.task_type.SYSTEM_UPGRADE,) staticmethod def run(node): # 实现具体的检查逻辑 solution message {check_item: 防火墙状态} return ReturnMessage(BaseCheckActor.SUCCESS, solution, message, )步骤2选择继承基类根据检查类型选择合适的基类BaseCheckActor适用于纯Python逻辑的检查OeBaseActor适用于需要执行Shell脚本的检查步骤3实现检查逻辑方案A使用Python直接检查from sut.env_check.check_actor.base_check_actor import BaseCheckActor, ReturnMessage import subprocess class PythonCustomActor(BaseCheckActor): name PythonCustomActor description 使用Python实现的定制检查 level Medium priority mandatory staticmethod def run(node): # 检查SSH服务状态 try: result subprocess.run([systemctl, is-active, sshd], capture_outputTrue, textTrue) if result.returncode 0 and active in result.stdout: return ReturnMessage(BaseCheckActor.SUCCESS, , {service: sshd, status: active}, ) else: return ReturnMessage(BaseCheckActor.FAIL, 请启动SSH服务, {service: sshd, status: inactive}, SSH服务未运行) except Exception as e: return ReturnMessage(BaseCheckActor.FAIL, f检查失败: {str(e)}, {}, 执行检查时发生异常)方案B使用Shell脚本检查from sut.env_check.check_actor.oe_base_actor import OeBaseActor class ShellCustomActor(OeBaseActor): name ShellCustomActor description 使用Shell脚本的定制检查 level High priority mandatory sh_file custom_checks/oe_test_custom_check.sh步骤4编写对应的Shell脚本在sut/env_check/smoke_test/local_sh/目录下创建对应的脚本#!/usr/bin/bash -x # 自定义检查脚本示例 source $OET_PATH/../../common/common_lib.sh function pre_test() { LOG_INFO 开始准备测试环境 # 环境准备逻辑 } function run_test() { LOG_INFO 开始执行自定义检查... # 检查1磁盘使用率 disk_usage$(df -h / | awk NR2 {print $5} | sed s/%//) if [ $disk_usage -gt 90 ]; then LOG_WARN 根分区使用率过高: ${disk_usage}% return 1 fi # 检查2内存使用率 mem_usage$(free | awk /Mem:/ {print int($3/$2*100)}) if [ $mem_usage -gt 85 ]; then LOG_WARN 内存使用率过高: ${mem_usage}% return 1 fi # 检查3关键服务状态 services(sshd crond network) for service in ${services[]}; do systemctl is-active $service /dev/null 21 CHECK_RESULT $? 0 0 服务 $service 运行状态检查 done LOG_INFO 自定义检查完成 } function post_test() { LOG_INFO 开始清理测试环境 # 清理逻辑 } main $高级自定义技巧 1. 参数化检查规则通过node参数传递配置信息class ParametricActor(BaseCheckActor): name ParametricActor description 支持参数化的检查 staticmethod def run(node): # 从node参数获取配置 threshold node.get(disk_threshold, 90) critical_services node.get(critical_services, [sshd, crond]) # 使用参数执行检查 disk_usage get_disk_usage() if disk_usage threshold: return ReturnMessage(BaseCheckActor.FAIL, f磁盘使用率超过阈值: {disk_usage}% {threshold}%, {}, 磁盘空间不足) # 检查关键服务 for service in critical_services: if not is_service_running(service): return ReturnMessage(BaseCheckActor.FAIL, f关键服务 {service} 未运行, {}, 服务状态异常) return ReturnMessage(BaseCheckActor.SUCCESS, , {}, )2. 检查结果聚合class AggregatedActor(BaseCheckActor): name AggregatedActor description 聚合多个检查结果 staticmethod def run(node): checks [ {name: 磁盘检查, func: check_disk}, {name: 内存检查, func: check_memory}, {name: 网络检查, func: check_network}, ] results {} all_passed True failed_reasons [] for check in checks: result check[func]() results[check[name]] result[passed] if not result[passed]: all_passed False failed_reasons.append(f{check[name]}: {result[reason]}) return ReturnMessage( resultall_passed, solution\n.join([f- {reason} for reason in failed_reasons]), messageresults, failed_reason; .join(failed_reasons) if failed_reasons else )3. 条件检查逻辑class ConditionalActor(BaseCheckActor): name ConditionalActor description 根据系统条件执行不同检查 staticmethod def run(node): # 检测系统类型 system_type detect_system_type() if system_type server: # 服务器特定检查 return check_server_specific() elif system_type desktop: # 桌面环境特定检查 return check_desktop_specific() else: # 通用检查 return check_general()最佳实践指南 1. 检查规则设计原则单一职责每个actor只负责一个特定的检查项错误处理完善的异常处理和日志记录资源友好避免占用过多系统资源可配置性支持通过参数调整检查行为2. 优先级设置建议优先级适用场景示例mandatory关键系统功能SSH服务、网络连通性optional推荐配置项时区设置、语言环境unnecessary可选功能特定软件包安装3. 测试脚本编写规范使用标准的pre_test、run_test、post_test结构充分利用common_lib.sh中的辅助函数添加详细的日志记录确保脚本的幂等性可重复执行部署和使用自定义actor 1. 放置actor文件将自定义的actor文件放置在正确的位置sut/env_check/check_actor/ └── custom_actor.py # 你的自定义actor2. 放置测试脚本将对应的Shell脚本放置在sut/env_check/smoke_test/local_sh/ └── custom_checks/ └── oe_test_custom_check.sh3. 运行自定义检查# 运行所有检查包括自定义的 python3 sut/env_check.py # 指定检查路径 python3 sut/env_check.py --checkpath /path/to/env_check # 指定结果输出路径 python3 sut/env_check.py --outputpath /tmp/results4. 查看检查结果检查结果会以JSON格式保存{ result: true, total_count: 45, pass: 43, no_pass: 2, detail: [ { actor_name: CustomSecurityActor, actor_description: 自定义安全配置检查, actor_priority: mandatory, actor_result: true, actor_solution: , failed_reason: } ] }故障排除 常见问题及解决方案Actor未加载检查文件名是否在黑名单中避免使用__init__、base_check_actor等确认actor类名以Actor结尾检查Python语法是否正确脚本执行失败确认Shell脚本有执行权限chmod x script.sh检查脚本中的路径是否正确查看日志文件获取详细错误信息检查结果不准确验证检查逻辑的正确性添加更详细的日志输出考虑环境差异的影响性能问题优化检查逻辑避免重复操作考虑使用缓存机制并行执行独立的检查项扩展思路 1. 集成外部工具class ExternalToolActor(BaseCheckActor): name ExternalToolActor description 集成外部安全检查工具 staticmethod def run(node): # 集成Lynis安全扫描 lynis_result run_lynis_scan() # 集成ClamAV病毒扫描 clamav_result run_clamav_scan() # 整合结果 return aggregate_results(lynis_result, clamav_result)2. 实时监控集成class MonitoringActor(BaseCheckActor): name MonitoringActor description 与监控系统集成 staticmethod def run(node): # 从Prometheus获取指标 metrics fetch_prometheus_metrics() # 从Zabbix获取告警 alerts fetch_zabbix_alerts() # 分析监控数据 return analyze_monitoring_data(metrics, alerts)3. 自动化修复建议class AutoFixActor(BaseCheckActor): name AutoFixActor description 提供自动化修复建议 staticmethod def run(node): issues detect_issues() fixes [] for issue in issues: if issue[type] config_mismatch: fix generate_fix_script(issue) fixes.append(fix) return ReturnMessage( resultlen(issues) 0, solution\n.join(fixes) if fixes else 无问题, message{issues: issues, fixes: fixes}, failed_reason发现配置问题 if issues else )总结 env_check工具的强大之处在于其可扩展的actor架构。通过自定义检查规则和扩展测试actor您可以定制化系统健康检查满足特定业务需求自动化合规检查确保系统符合安全标准集成现有工具构建统一的检查平台持续改进根据运维经验不断完善检查项记住良好的检查规则应该✅ 明确检查目的和预期结果✅ 提供清晰的修复建议✅ 记录详细的检查日志✅ 考虑不同环境的兼容性✅ 保持代码的可维护性通过本文的指南您已经掌握了env_check高级使用的核心技能。现在就开始创建您的第一个自定义actor为系统健康检查添加专属的检查规则吧 提示在开始自定义开发前建议先参考现有的actor实现特别是sut/env_check/check_actor/example_actor.py中的示例代码。【免费下载链接】env_checkA tool for health checking after operating system upgrade项目地址: https://gitcode.com/openeuler/env_check创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考