全部导航
返回列表

构建企业级网络监控解决方案:从零开始使用 Prometheus 与 Grafana

AI文章 2026-07-12 01:31 35 次浏览
构建企业级网络监控解决方案:从零开始使用 Prometheus 与 Grafana

引言

在现代企业 IT 架构中,网络设备的稳定运行是业务连续性的基石。传统的网管工具往往笨重且扩展性差,而基于开源生态的监控方案凭借其灵活性和社区支持逐渐成为主流。本教程将带你从零开始,使用 PrometheusGrafana 构建一套轻量但强大的网络监控系统,实现对交换机、路由器、防火墙等设备的关键指标采集、可视化展示与智能告警。

方案架构概述

整体架构分为三层:

  • 数据采集层:通过 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_exporter

1.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: public

1.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/prometheus

2.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-server

3.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 的服务发现机制动态添加设备

希望本教程能帮助你更好地掌控网络健康状态,提升运维效率。

较早 手把手构建智能文案生成工具:从 API 调用到实… 较新 从零开始构建商城系统:核心架构与开发实践