本文目录导读:

要实现全网设备的定时巡检,通常需要借助自动化运维平台或脚本+调度工具的组合,核心思路是:定时触发 -> 远程登录/API调用 -> 执行采集命令 -> 结果解析与存储 -> 告警/报告。
以下是几种主流的实现方案,从简单到复杂:
基于开源工具的组合(适合中小规模网络)
这是最灵活、成本最低的方式,主要用到的核心组件是 Ansible + 定时任务(如 Linux Crontab 或 Windows 任务计划程序)。
核心工具:Ansible
- 原理:无需在设备上安装客户端,通过 SSH(网络设备)或 API(云资源)连接。
- 作用:编写 Playbook(剧本),定义“采集什么命令”和“解析什么内容”。
实现步骤
-
编写 Ansible Playbook: 创建一个 YAML 文件,内容大致如下:
- name: 每日全网巡检 hosts: all_network_devices # 你的设备清单 gather_facts: no tasks: - name: 采集接口状态 ios_command: # 针对思科设备;华为用 ce_command,华三用 comware_command commands: - show interface status - show ip interface brief register: interface_output - name: 保存结果到文件 copy: content: "{{ interface_output.stdout | join('\n') }}" dest: "/var/log/巡检报告/{{ inventory_hostname }}_{{ ansible_date_time.date }}.txt" -
设置定时任务 (Crontab): 在 Linux 服务器上输入
crontab -e,添加:# 每天凌晨 2:00 执行 Ansible Playbook 0 2 * * * /usr/bin/ansible-playbook /path/to/network_inspection.yml >> /var/log/ansible_cron.log 2>&1
优点:免费、灵活、定制性强。
缺点:需要一定的编程基础;报告格式简陋;大规模设备并发执行时需要优化(如使用 forks 参数)。
使用专业网管/监控平台(适合中大型网络,推荐)
市面上有成熟的商业软件,省去了大量开发工作,这些平台通常具备内置的定时任务引擎。
商业企业软件(如 SolarWinds Orion、HP NNMi、ManageEngine OpManager)
- 操作:
- 添加设备 IP 和 SNMP 团体字(或 SSH 凭据)。
- 进入“计划任务”或“合规策略”模块。
- 选择 定时(如每天、每周),勾选要巡检的指标(CPU、内存、端口状态、配置文件)。
- 设置告警条件(如端口 Down 超过 5 分钟)。
- 输出:自动生成 PDF/Excel 报告、发送邮件。
开源/免费监控平台(如 Zabbix、Prometheus + SNMP Exporter)
- Zabbix 方案:
- 通过 SNMP 或 IPMI 自动发现全网设备。
- 创建 定时任务 (Zabbix Scheduler):例如每 5 分钟采集一次 CPU,每天凌晨 3 点备份配置。
- 优势:支持非常复杂的触发器和告警逻辑(如:连续 3 次采集值超过阈值才告警)。
- Prometheus 方案:
- 使用
snmp_exporter采集 SNMP 数据。 - 问题:Prometheus 主要用于实时监控(15-30 秒拉取一次),不太适合做一次性的“日/周报生成”,需要配合
Cortex或Thanos做长期存储,并用Grafana导出定时报告。
- 使用
优点:图形化界面、自动发现、告警完善、报告专业。
缺点:商业软件贵;开源软件部署和维护有一定复杂度。
脚本 + 数据库 + 报告生成(适合有开发能力的团队)
用 Python 脚本直接调用 Paramiko/Netmiko 库,把数据存入数据库,并生成报告。
示例代码片段(Python + Netmiko + APScheduler):
from netmiko import ConnectHandler
from apscheduler.schedulers.blocking import BlockingScheduler
import datetime
def inspect_router(ip, username, password):
device = {
'device_type': 'cisco_ios',
'host': ip,
'username': username,
'password': password,
}
try:
connection = ConnectHandler(**device)
output = connection.send_command("show version | include uptime")
print(f"设备 {ip} 已巡检: {output}")
# 此处可以将结果写入 MySQL 或 InfluxDB
connection.disconnect()
except Exception as e:
print(f"巡检 {ip} 失败: {e}")
# 定时调度器
scheduler = BlockingScheduler()
# 每天 08:30 执行任务
@scheduler.scheduled_job('cron', hour=8, minute=30)
def scheduled_job():
devices_ip = ["192.168.1.1", "192.168.1.2"] # 实际从数据库读取
for ip in devices_ip:
inspect_router(ip, "admin", "password")
scheduler.start()
优点:完全自定义,数据可深度分析。
缺点:开发工作量大;需要处理异常重试、并发控制。
选择指南
| 需求规模 | 推荐方案 | 原因 |
|---|---|---|
| 小型网络(< 50 台) | Ansible + Crontab | 简单、免费、零成本;手动维护设备列表可行。 |
| 中型网络(50-500 台) | Zabbix / Prometheus | 自动发现设备;监控与巡检一体化;告警成熟。 |
| 大型企业(> 500 台) | 商业软件(SolarWinds等) | 专业的 SLA 报告、合规审计、权限管理、对等发现。 |
| 云原生环境 | Prometheus + Kubernetes Operator | 自动通过 Service Discovery 发现云服务器和容器。 |
实际运维中的几个“坑”和建议
- 连接过期:很多设备默认 SSH 空闲 10 分钟后断开,建议在脚本中每次只建立一个连接,执行完立即关闭,不要长连接。
- 并发控制:如果全网 1000 台设备同时执行
show tech,设备 CPU 可能被打满。建议:使用分片(如分 10 个批次,每批间隔 1 分钟执行)。 - 凭证安全:不要把明文密码写在脚本里,使用 Ansible Vault 加密,或集成 CyberArk / Vault 动态获取密码。
- 结果解析:不要只看“是否连通”,需要解析
show命令的输出,检查特定字段(如status是否up、errors是否 > 0)。
总结一句话:如果你只需要“能干活”,Ansible + Crontab 最快,如果你需要“长期稳定、告警、报告”,Zabbix 最均衡,如果公司有预算且团队运维压力大,商业软件最省心。
标签: 全网设备