构建企业级网络监控解决方案:从零开始使用 Prometheus 与 Grafana
引言
在现代企业 IT 架构中,网络设备的稳定运行是业务连续性的基石。传统的网管工具往往笨重且扩展性差,而基于开源生态的监控方案凭借其灵活性和社区支持逐渐成为主流。本教程将带你从零开始,使用 Prometheus 和 Grafana 构建一套轻量但强大的网络监控系统,实现对交换机、路由器、防火墙等设备的关键指标采集、可视化展示与智能告警。
方案架构概述
整体架构分为三层:
- 数据采集层:通过 SNMP Exporter 将网络设备的 SNMP 指标转换为 Prometheus 可识别的格式。
- 存储与查询层:Prometheus Server 定时拉取指标数据,存储于本地时序数据库,并提供 PromQL 查询语言。
- 可视化与告警层:Grafana 对接 Prometheus 数据源,构建动态仪表板;Alertmanager 负责告警路由与通知。
环境准备
本教程假设你已拥有一台 Linux 服务器(本文以 Ubuntu 22.04 为例),并具备基本的命令行操作能力。需要安装的组件包括:
- Prometheus Server
- SNMP Exporter
- Grafana
- Alertmanager(可选)
步骤一:安装与配置 SNMP Exporter
SNMP Exporter 负责从网络设备获取 SNMP 信息并暴露为 HTTP 接口供 Prometheus 抓取。
1.1 下载并解压
wget https://github.com/prometheus/snmp_exporter/releases/download/v0.25.0/snmp_exporter-0.25.0.linux-amd64.tar.gz
tar -xzf snmp_exporter-0.25.0.linux-amd64.tar.gz
sudo mv snmp_exporter-0.25.0.linux-amd64 /opt/snmp_exporter1.2 配置 snmp.yml
默认配置文件已包含常见厂商的 MIB 库,如 Cisco、Juniper 等。若需自定义 OID,可编辑 /opt/snmp_exporter/snmp.yml。以下为监控交换机接口流量的简单示例:
modules:
if_mib:
walk:
- 1.3.6.1.2.1.2 # IF-MIB
- 1.3.6.1.2.1.31.1.1 # IF-MIB (64-bit counters)
version: 2
auth:
community: public1.3 创建系统服务并启动
sudo tee /etc/systemd/system/snmp_exporter.service <<EOF
[Unit]
Description=SNMP Exporter
After=network.target
[Service]
ExecStart=/opt/snmp_exporter/snmp_exporter --config.file=/opt/snmp_exporter/snmp.yml
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now snmp_exporter验证服务:curl http://localhost:9116/metrics 应返回大量 SNMP 相关指标。
步骤二:部署 Prometheus Server
Prometheus 是整个监控系统的核心,负责定期采集并存储数据。
2.1 下载与安装
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar -xzf prometheus-2.53.0.linux-amd64.tar.gz
sudo mv prometheus-2.53.0.linux-amd64 /opt/prometheus2.2 配置 prometheus.yml
编辑 /opt/prometheus/prometheus.yml,添加网络设备的抓取任务:
global:
scrape_interval: 30s
scrape_configs:
- job_name: 'network_devices'
static_configs:
- targets:
- 192.168.1.1 # 核心交换机
- 192.168.1.2 # 路由器
metrics_path: /snmp
params:
module: [if_mib]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9116 # SNMP Exporter 地址2.3 启动 Prometheus
sudo tee /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Server
After=network.target
[Service]
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus访问 http://服务器IP:9090 即可看到 Prometheus Web UI,在 Graph 页面尝试查询 ifInOctets 验证数据采集是否正常。
步骤三:使用 Grafana 构建可视化仪表板
Grafana 提供丰富的图表组件,能够将 Prometheus 数据以直观的方式展示出来。
3.1 安装 Grafana
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable --now grafana-server3.2 添加数据源
登录 Grafana(默认 http://IP:3000,初始账号 admin/admin),进入“Configuration → Data Sources”,添加 Prometheus,URL 填写 http://localhost:9090,保存并测试。
3.3 导入网络设备仪表板
推荐使用社区提供的网络监控模板(ID: 11169 或 14410)。进入“Create → Import”,输入模板 ID,加载后选择刚添加的数据源即可。仪表板将自动展示设备 CPU、内存、接口流量、错误包等关键指标。
步骤四:配置告警通知
及时告警是监控系统的重要环节,Alertmanager 负责接收 Prometheus 发出的告警并路由到邮件、钉钉、Slack 等通道。
4.1 配置告警规则
在 /opt/prometheus/ 下创建 rules.yml:
groups:
- name: network_alerts
rules:
- alert: HighInterfaceUtilization
expr: (rate(ifInOctets{job="network_devices"}[5m]) * 8) / ifSpeed > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "接口 {{ $labels.ifDescr }} 利用率超过 80%"
description: "设备 {{ $labels.instance }} 的接口 {{ $labels.ifDescr }} 当前利用率 {{ $value | humanizePercentage }}。"在 prometheus.yml 中引用该文件:
rule_files:
- "rules.yml"重启 Prometheus 生效。
4.2 安装与配置 Alertmanager
下载并部署 Alertmanager,配置 alertmanager.yml 定义接收者(例如企业微信机器人)。详细步骤可参考官方文档,本教程不再赘述。
总结
通过以上步骤,我们成功构建了一套完整的网络监控解决方案。该方案完全基于开源组件,成本低、定制性强,可轻松扩展至成百上千台设备。后续你可以进一步探索:
- 使用 Ansible 自动化部署监控组件
- 引入 Loki 实现日志监控联动
- 利用 Prometheus 的服务发现机制动态添加设备
希望本教程能帮助你更好地掌控网络健康状态,提升运维效率。