下面从**“用 Ansible 做监控”的常见方式到具体实现示例给你一个系统性的说明。Ansible 本身不是专业监控系统,但非常适合轻量级巡检、状态采集、告警触发**。
Ansible 不适合做:
Ansible 适合做:
[定时任务(cron)]
↓
[Ansible Playbook]
↓
[采集服务器状态]
↓
[判断异常 → 告警]
- hosts: all
gather_facts: true
tasks:
- name: 检查磁盘使用率
shell: df -h / | awk 'NR==2 {print $5}' | sed 's/%//'
register: disk_usage
- name: 磁盘超过 80% 告警
debug:
msg: "磁盘使用率过高: {{ disk_usage.stdout }}%"
when: disk_usage.stdout | int > 80
- name: 检查内存使用率
shell: free | awk '/Mem/ {printf "%.0f", $3/$2*100}'
register: mem_usage
- name: 内存超过 90% 告警
debug:
msg: "内存使用率过高: {{ mem_usage.stdout }}%"
when: mem_usage.stdout | int > 90
- name: 检查关键服务
systemd:
name: nginx
state: started
register: nginx_status
ignore_errors: true
- name: Nginx 未运行告警
debug:
msg: "Nginx 服务异常"
when: nginx_status.failed
在控制机上:
crontab -e
*/5 * * * * ansible-playbook /opt/ansible/check_server.yml >> /var/log/ansible_monitor.log
✅ 每 5 分钟检查一次
- name: 发送邮件
mail:
host: smtp.example.com
port: 25
to: admin@example.com
subject: "服务器告警"
body: "磁盘使用率: {{ disk_usage.stdout }}%"
when: disk_usage.stdout | int > 80
- name: 发送钉钉告警
uri:
url: https://oapi.dingtalk.com/robot/send?access_token=xxx
method: POST
body_format: json
body:
msgtype: text
text:
content: "服务器磁盘使用率过高: {{ disk_usage.stdout }}%"
- name: 检查是否禁用 root 登录
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: 'PermitRootLogin no'
check_mode: true
register: root_login
- name: 配置不合规告警
debug:
msg: "SSH 允许 root 登录"
when: root_login.changed
✅ 轻量监控
✅ 专业监控
Ansible 不是监控系统,而是“自动化巡检 + 异常响应工具”
如果你愿意,我可以:
你现在是单机 / 多机 / 云服务器?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。