前言

Cacti 应该是目前我唯一没有扔掉的 php 服务了,一直觉得 php 慢的同时还有很多洞,之前已经换掉了 php 搞的可道云,那会儿天天被他的“重要安全更新”搞的很麻,于是可是去 php ,前段时间搭了 Zabbix (还是 php),LTT 在用的 Checkmk (用不习惯),最后还是选了 Prometheus + Grafana ,一是 Go 写的洞少资源占用少,二是可以和我目前已经用的其他监控整合到一起

搭建

Prometheus 和 Grafana 的搭建非常简单,网上很多教程,这里不再赘述,go 的项目部署都很容易,重点说一下 SNMP 的配置

SNMP 的 Exporter 也是一个 Go 的项目,直接下载二进制文件部署:Releases · prometheus/snmp_exporter (github.com)

SNMP Exporter 这个东西比较麻烦的地方在于生成他的配置

首先需要准备 Golang 环境,写这篇文章的时候,我使用 1.22.0 ,如果不知道使用哪个版本,可以去看项目里面的这个文件:https://github.com/prometheus/snmp_exporter/blob/main/go.mod,在 Linux 平台,我个人比较喜欢用 voidint/g: Golang Version Manager (github.com) 这个项目来装 Golang ,可以非常方便的在各个版本之间切换,取决于你使用的是 debian 系还是 rhel 系,还需要安装以下包

# Debian-based distributions.
sudo apt-get install unzip build-essential libsnmp-dev # Debian-based distros
# Redhat-based distributions.
sudo yum install gcc make net-snmp net-snmp-utils net-snmp-libs net-snmp-devel # RHEL-based distros

找一个地方去 clone 项目和他提供的 MIB 文件,SNMP Exporter 里面提供的 MIB 非常少,推荐使用下面这里的

# SNMP Exporter 项目和他自带的 MIB
git clone https://github.com/prometheus/snmp_exporter.git
# 下载完成之后,先构建一下
make generate
# 如果不用自带的 MIB ,可以这样构建(在 generator 目录)
go build
# 推荐使用这里的 MIB ,比较全,基本上都能覆盖,在 librenms/mibs/ ,另外如果有没有覆盖的,可以找 MIB 文件放进文件夹
git clone https://github.com/librenms/librenms

其他需要准备的:把设备 IP 对应关系记下,SNMP 推荐设置统一的只读团体,密码要有一定复杂度

generator.yml 修改开头的以下内容( auth 部分)

auths:
# public_v1:
# version: 1

public_v2:
version: 2
community: SUperSnmpPsW # SNMP 只读密码

然后使用以下命令构建配置

./generator generate -m mibs -m /root/librenms/mibs -g generator.yml -o snmp.yml

把构建出来的 snmp.yml 放到 snmp_export 同级目录,即可使用

prometheus.yml 添加以下配置

- job_name: "snmp"
scrape_interval: 2m #刷新间隔默认10s
scrape_timeout: 1m #超时时间,snmp_exporter刷数据慢修改大一点,设备比较多就调大
static_configs:
- targets:
- x.x.x.x # 设备IP,可写多个
- x.x.x.x # 设备IP,可写多个
metrics_path: /snmp
params:
module: [if_mib] #generator.yml自定义文件的模块名,if_mib 是通用模块
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: x.x.x.x:9116 # snmp_exporter 服务IP地址

Grafana 添加模板

推荐以下两个面板

SNMP Stats | Grafana Labs

SNMP Interface Throughput | Grafana Labs

效果展示

image-20240901101439261

image-20240901101549253