check-cpu-mem-disk.yml 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. ---
  2. - name: 检测主机 CPU、内存、磁盘占用
  3. hosts: all
  4. gather_facts: yes
  5. vars:
  6. warn_threshold: 80
  7. crit_threshold: 90
  8. tasks:
  9. - name: 获取 CPU 使用率
  10. shell: |
  11. top -bn1 | grep "Cpu(s)" | awk '{print "cpu_usage:" $2}' | cut -d'%' -f1
  12. register: cpu_result
  13. - name: 获取内存使用率
  14. shell: |
  15. free | grep Mem | awk '{printf "memory_used:%.0f\nmemory_total:%.0f\n", $3, $2}'
  16. register: mem_result
  17. - name: 获取磁盘使用率
  18. shell: |
  19. df -h | grep -E '/$|/data' | awk '{print $1 ":" $5}'
  20. register: disk_result
  21. - name: 格式化输出
  22. set_fact:
  23. cpu_usage: "{{ cpu_result.stdout_lines[0].split(':')[1] | trim }}"
  24. memory_used_mb: "{{ (mem_result.stdout_lines[0].split(':')[1] | trim | float / 1024) | round | int }}"
  25. memory_total_mb: "{{ (mem_result.stdout_lines[1].split(':')[1] | trim | float / 1024) | round | int }}"
  26. disk_usage: "{{ disk_result.stdout_lines }}"
  27. - name: 显示检测结果
  28. debug:
  29. msg: |
  30. ================== 主机检测报告 ==================
  31. 主机名: {{ inventory_hostname }}
  32. CPU 使用率: {{ cpu_usage }}%
  33. 内存使用: {{ memory_used_mb }} MB / {{ memory_total_mb }} MB
  34. 磁盘使用:
  35. {% for disk in disk_usage %}
  36. - {{ disk }}
  37. {% endfor %}
  38. =================================================
  39. - name: 告警判断
  40. fail:
  41. msg: "{{ inventory_hostname }} CPU 使用率超过 {{ crit_threshold }}%: {{ cpu_usage }}%"
  42. when: cpu_usage | int >= crit_threshold
  43. - name: 警告判断
  44. debug:
  45. msg: "⚠️ WARNING: {{ inventory_hostname }} CPU 使用率超过 {{ warn_threshold }}%: {{ cpu_usage }}%"
  46. when: cpu_usage | int >= warn_threshold and cpu_usage | int < crit_threshold