修改Ansible Playbook:内存使用率超90%时输出至自定义日志文件
调整Ansible内存监控Playbook实现日志写入需求
需求说明
- 原Playbook会在控制台输出目标机内存使用率的“正常/异常”状态
- 现在要改成:只有当内存使用率超过90%时,把相关信息写到名为
utilisation的自定义日志文件里,完全不再往控制台输出
修改后的完整Playbook代码
--- - name: 监控内存使用率并记录异常日志 hosts: all gather_facts: yes vars: mem_threshold: 90 # 触发日志的内存使用率阈值 log_file: "/var/log/utilisation" # 日志文件路径,可根据实际情况修改 tasks: - name: 计算当前内存使用率 set_fact: mem_usage: "{{ (ansible_memory_mb.real.total - ansible_memory_mb.real.free - ansible_memory_mb.real.buffers - ansible_memory_mb.real.cached) / ansible_memory_mb.real.total * 100 | round(2) }}" - name: 内存使用率超标时写入日志 lineinfile: path: "{{ log_file }}" line: "{{ ansible_date_time.iso8601 }} - 主机: {{ inventory_hostname }} - 内存使用率: {{ mem_usage }}% (已超过阈值{{ mem_threshold }}%)" create: yes # 日志文件不存在就自动创建 when: mem_usage | float > mem_threshold
修改要点
- 替换输出方式:删掉原来控制台输出的逻辑(比如
debug模块),改用lineinfile模块往日志文件里追加内容,避免控制台产生冗余输出 - 添加条件判断:通过
when语句限定只有内存使用率超过90%时才执行日志写入操作 - 丰富日志内容:加入时间戳、主机名、使用率和阈值信息,方便后续排查问题
- 自动创建日志:
lineinfile的create: yes参数可以确保日志文件不存在时自动生成
注意事项
- 要保证Ansible执行用户对日志文件路径有读写权限,比如示例里的
/var/log/目录通常需要sudo权限,执行Playbook时可以加--become - 如果需要覆盖旧日志而不是追加,可把
lineinfile换成copy模块并设置force: yes,但监控场景一般推荐追加日志 - 阈值
mem_threshold和日志路径log_file可以根据实际需求调整
内容的提问来源于stack exchange,提问作者nihit kumar
相关产品推荐
相关产品推荐

