11、Ansible 高频故障排查 10 条速记口诀+ 可落地的运维巡检剧本

张开发
2026/4/6 21:53:04 15 分钟阅读

分享文章

11、Ansible 高频故障排查 10 条速记口诀+ 可落地的运维巡检剧本
Ansible 高频故障排查速记口诀 生产级运维巡检剧本一、Ansible 高频故障排查 10 条速记口诀口诀好记、对应故障面试被问直接答无需死记复杂流程每条口诀对应核心故障关键解决思路精准踩分。SSH 连不上并发、密钥、sshd对应批量 SSH 失败查 forks、密钥、被控端 sshd 配置权限拒访问tmp、sudo、become对应权限报错查临时目录、sudo 配置、become 权限Python 找不到解释器来指定对应Python 缺失inventory 配置 ansible_python_interpreter执行特别慢Facts、DNS 查对应执行超时关无用 Facts、禁用 DNS 反解sudo 要密码免密、Vault 加对应sudo 密码提示配置免密或 Vault 加密 become_pass执行卡不动交互、超时控对应任务卡死关交互、加 async/poll 超时日志泄敏感no_log、Vault 管对应敏感信息泄露加 no_log、用 Vault 加密负载飙太高forks、serial 调对应被控端负载高降 forks、用 serial 分批执行文件乱码错编码、template 做对应文件渲染异常查编码、用 template 模块Vault 解失败ID、文件查对应Vault 解密失败查 vault ID、加密文件完整性补充面试延伸话术——所有故障排查先单主机测试ansible 单主机 ping再看详细日志-vvv最后定位 SSH/权限/Python 三大核心高效排障。二、Ansible 生产级运维巡检剧本可直接执行剧本核心覆盖 Ansible 运维全场景巡检被控端基础环境、SSH 安全、权限配置、Python 环境、临时目录等提前预防故障输出巡检报告支持批量执行。说明剧本适配 CentOS/Ubuntu 主流系统无需修改执行后会在控制节点生成巡检报告异常项标红提示可直接用于生产日常巡检。巡检剧本inspect_ansible.yml-name:Ansible 生产级运维巡检剧本hosts:all# 可指定具体主机组如 web、dbgather_facts:truebecome:truevars:# 巡检基准配置可根据生产环境调整ansible_standard_user:ansible# Ansible 专用远程用户ansible_tmp_dir:/var/tmp/ansible-{{ ansible_standard_user }}ssh_max_startups:100:30:200ssh_max_sessions:50python_min_version:3.6tasks:-name:1. 基础环境巡检系统、磁盘、负载block:-name:1.1 收集系统信息ansible.builtin.setup:filter:-ansible_distribution*-ansible_kernel-ansible_memtotal_mb-ansible_processor_vcpusregister:system_info-name:1.2 检查磁盘空间根目录使用率 80%ansible.builtin.command:df-h /register:disk_usagechanged_when:false-name:1.3 检查系统负载1分钟负载 CPU核心数ansible.builtin.command:uptimeregister:system_loadchanged_when:false-name:标记基础环境异常磁盘/负载ansible.builtin.debug:msg:【异常】{{ inventory_hostname }} - 根目录使用率过高或系统负载异常when:-80% in disk_usage.stdout or 90% in disk_usage.stdoutor (system_load.stdout.split(load average:)[1].split(,)[0]|float)ansible_processor_vcpusrescue:-name:基础环境巡检失败ansible.builtin.debug:msg:【失败】{{ inventory_hostname }} - 基础环境巡检异常请手动排查-name:2. SSH 安全与连接巡检block:-name:2.1 检查 SSH 服务运行状态ansible.builtin.service:name:sshdstate:startedenabled:trueregister:sshd_status-name:2.2 检查 SSH 配置MaxStartups、MaxSessionsansible.builtin.lineinfile:path:/etc/ssh/sshd_configline:{{ item.line }}state:presentregexp:{{ item.regexp }}loop:-{line:MaxStartups {{ ssh_max_startups }},regexp:^MaxStartups}-{line:MaxSessions {{ ssh_max_sessions }},regexp:^MaxSessions}register:ssh_config_checkchanged_when:false-name:2.3 检查 SSH 密码登录禁用状态ansible.builtin.lineinfile:path:/etc/ssh/sshd_configline:PasswordAuthentication nostate:presentregexp:^PasswordAuthenticationregister:ssh_password_checkchanged_when:false-name:标记 SSH 配置异常ansible.builtin.debug:msg:【异常】{{ inventory_hostname }} - SSH 配置不符合安全规范密码登录未禁用/连接数配置不足when:ssh_password_check.changed or ssh_config_check.changedrescue:-name:SSH 巡检失败ansible.builtin.debug:msg:【失败】{{ inventory_hostname }} - SSH 服务或配置巡检异常-name:3. Ansible 专用用户与权限巡检block:-name:3.1 检查 Ansible 专用用户存在ansible.builtin.user:name:{{ ansible_standard_user }}state:presentregister:ansible_user_check-name:3.2 检查用户 sudo 权限最小权限无需密码ansible.builtin.command:sudo-l-U{{ansible_standard_user}}register:sudo_permchanged_when:false-name:标记 sudo 权限异常ansible.builtin.debug:msg:【异常】{{ inventory_hostname }} - Ansible 专用用户 sudo 权限不符合要求when:NOPASSWD not in sudo_perm.stdoutrescue:-name:权限巡检失败ansible.builtin.debug:msg:【失败】{{ inventory_hostname }} - Ansible 专用用户或权限巡检异常-name:4. Python 环境巡检block:-name:4.1 检查 Python 3 存在ansible.builtin.command:which python3register:python3_pathchanged_when:false-name:4.2 检查 Python 版本不低于基准版本ansible.builtin.command:python3--versionregister:python_versionchanged_when:false-name:标记 Python 环境异常ansible.builtin.debug:msg:【异常】{{ inventory_hostname }} - Python 版本过低需 ≥ {{ python_min_version }}或未安装when:-python3_path.rc!0 or (python_version.stdout.split( )[1].split(.)[0:2]|join(.)|float) (python_min_version|float)rescue:-name:Python 巡检失败ansible.builtin.debug:msg:【失败】{{ inventory_hostname }} - Python 环境巡检异常-name:5. 临时目录与权限巡检block:-name:5.1 检查 Ansible 临时目录存在且权限正确ansible.builtin.file:path:{{ ansible_tmp_dir }}state:directoryowner:{{ ansible_standard_user }}group:{{ ansible_standard_user }}mode:0700register:tmp_dir_checkchanged_when:false-name:5.2 检查 /tmp 目录权限禁止 noexecansible.builtin.command:mount|grep /tmpregister:tmp_mountchanged_when:falseignore_errors:true-name:标记临时目录异常ansible.builtin.debug:msg:【异常】{{ inventory_hostname }} - Ansible 临时目录权限错误或 /tmp 挂载 noexecwhen:-tmp_dir_check.changed or (noexec in tmp_mount.stdout|default())rescue:-name:临时目录巡检失败ansible.builtin.debug:msg:【失败】{{ inventory_hostname }} - 临时目录巡检异常-name:6. 生成巡检报告控制节点ansible.builtin.copy:content:| {{ inventory_hostname }} Ansible 巡检报告 巡检时间{{ ansible_date_time.iso8601 }} 系统信息{{ system_info | to_nice_json }} 磁盘使用率{{ disk_usage.stdout_lines | last }} 系统负载{{ system_load.stdout }} SSH 服务状态{{ 正常 if sshd_status.state started else 异常 }} Python 版本{{ python_version.stdout | default(未安装) }} 异常项{{ ansible_failed_task | default(无异常) }} dest:./ansible_inspect_report_{{ inventory_hostname }}.txtdelegate_to:localhostchanged_when:false-name:汇总所有主机巡检结果hosts:localhostgather_facts:falsetasks:-name:汇总巡检报告ansible.builtin.shell:cat ./ansible_inspect_report_*.txt./ansible_inspect_summary.txtchanged_when:false-name:提示巡检完成ansible.builtin.debug:msg:Ansible 生产巡检完成汇总报告已生成./ansible_inspect_summary.txt三、剧本使用说明直接落地保存剧本将上述内容保存为inspect_ansible.yml可放在 Ansible 工作目录。调整变量可选根据生产环境修改 vars 里的基准配置如专用用户名、SSH 连接数、Python 最低版本。执行剧本# 批量巡检所有主机需提前配置 inventory ansible-playbook inspect_ansible.yml --ask-become-pass # 巡检指定主机组如 web 组 ansible-playbook inspect_ansible.yml -l web --ask-become-pass查看报告执行完成后控制节点会生成单主机报告ansible_inspect_report_主机IP.txt和汇总报告ansible_inspect_summary.txt直接查看异常项即可。四、补充说明剧本幂等性可重复执行不会修改正常配置仅标记异常项适合日常巡检如每日/每周执行。兼容性适配 CentOS 7/8/9、Ubuntu 18.04/20.04/22.04其他系统可微调 tasks 中的命令如 Debian 系统 SSH 服务名是 ssh非 sshd。面试加分若被问“如何保障 Ansible 生产稳定”可结合口诀 巡检剧本说明“提前巡检预防故障快速排障解决问题”的思路。

更多文章