【幸运抽奖源码】【雷风源码】【商城开源码】exporter源码

时间:2024-11-26 12:38:20 来源:ssc平台源码演示 分类:休闲

1.通过Exporter收集一切指标
2.2020-08-25
3.Opentelemetry和Prometheus的源码remote-write-receiver的实验
4.SNMP Exporter详细解析(1)
5.consulmanager部署和使用
6.部署Kafka监控

exporter源码

通过Exporter收集一切指标

       Exporter 是一个用于采集监控数据并按照 Prometheus 规范对外提供数据的组件。它从目标系统搜集数据,源码并将其转换为 Prometheus 可用的源码格式。Prometheus 通过调用 Exporter 提供的源码 metrics 数据接口来获取数据。使用 Exporter 的源码好处是,它提供了一个统一的源码幸运抽奖源码方式将不同系统或服务的数据格式化并暴露出来,避免了每种服务都有各自接口的源码不通用性。Exporters 实际上起到了数据翻译的源码作用,将各种数据格式翻译成 Prometheus 可以理解的源码通用格式。

       Exporter 的源码主要功能包括从监控对象中周期性地获取数据,对数据进行加工,源码然后将数据规范化后通过端点暴露给 Prometheus。源码这通常涉及以下三个步骤:数据收集、源码数据处理和数据发布。源码

       在介绍 Primetheus client 时,源码它是一个基于 Go 语言的 Prometheus 客户端,用于响应 Prometheus 的请求,按照特定格式返回监控数据。这是一个 HTTP 服务器的实现,源代码可以在 GitHub 上找到,相关的文档可以通过 GoDoc 访问。下面是一个简化流程图来表示 Primetheus client 的工作流程。

       在监控中,所有数据以时间序列形式保存,每个指标都有一个指标名称和一组标签(label)来区分。这些数据以文本格式存储,每条数据占一行,其中 #HELP 和 #TYPE 分别代表指标的注释信息和样本类型注释信息。监控样本需要遵循特定的格式,包括指标名称、标签名称、值以及时间戳。

       对于不同的数据类型,Prometheus 提供了四种数据格式:指标(Metric)、计数器(Counter)、计数器向量(CounterVec)、和度量(Gauge)。这些类型可以帮助开发者构建自定义的 Exporter,并将监控数据以 Prometheus 可理解的格式提供。

       编写一个简单的 Exporter 实际上只需要定义一个 HTTP 服务器,响应 Prometheus 的请求并返回监控数据。在 Go 语言中,可以通过声明计数器、度量和计数器向量,并在服务器上注册它们来实现这一点。雷风源码Prometheus 通过定期请求 Exporter 的端口来获取数据。

       为了创建高质量的 Exporter,开发者应遵循一些原则和方法,包括合理分配端口号、设计清晰的指标注释、以及在需要时自定义 Collector 来优化数据收集过程。此外,使用已有的开源 Exporter 代码作为参考可以加速开发进程。

       以 Redis Exporter 为例,它通过与 Redis 通信来获取性能指标并将其转换为 Prometheus 可以理解的格式。主要通过 Redis 的原生命令(如 INFO 命令)获取性能信息,并按照特定的格式生成 Prometheus 格式的监控指标。通过解析和注册这些指标,Redis Exporter 完成了数据收集和发布的过程。

       总的来说,Exporter 的设计和实现需要考虑数据规范、数据采集方式、以及如何构建高质量的客户端。通过遵循最佳实践和利用开源资源,开发人员可以轻松地创建自定义的 Exporter,从而为 Prometheus 提供所需的监控数据。

--

       Prometheus 实现邮件告警(Prometheus+Alertmanager+QQ邮箱或者网易邮箱,目前测试过这两种邮箱都可以发送告警邮件)

        Prometheus实现邮件告警原理如下:

        Prometheus官方有一个附带的中间件:alertmanager,通过设置rules规则和路由转发可以实现邮件告警,前提是你需要有一个可以发送邮件的邮件服务端(可以自建或者使用互联网公司提供的免费邮箱)

        告警原理图

       Prometheus完整架构图

        我之前得出的错误结论如下:

        推荐直接在虚拟机操作系统上直接安装Prometheus和Alertmanager,不推荐其中任何一方在容器中运行,因为测试过在容器中运行Prometheus和alertmanager,结果出现如下错误情况

        第一种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus却提示节点依然在线?有时候却能够正常显示节点掉线跌机,生成告警发送邮件

        第二种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus提示节点掉线,告警生成,但是没有发送邮件,我手动恢复node-exporter后,告警解除,邮件能正常发送邮件提示告警已经解除。。。。

        第三种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus提示节点掉线,告警生成,正常成功发送邮件,我手动恢复node-exporter后,告警解除,邮件没有发送出来。。。。

        以上三种情况之前经常出现,当时第一步以为是自己设置的scrape_interval不合理导致的,结果调试几次,问题没有解决,第二步以为是自己的服务器时间没有做到精确同步,然后我去设置和阿里云的ntp服务器同步,结果问题依然没有解决,第三步,换个方向,把alertmanager迁移到虚拟机操作系统上安装运行,问题解决!

       åŒ—京时间是GMT+8小时,有些同志的时间可能是UTC的,但是如果是在要求不太十分精确的情况下,UTC时间是刚刚好等于GMT时间

        为了避免时区的混乱,prometheus所有的组件内部都强制使用Unix时间,对外展示使用GMT时间。

        要改时区有两个办法

        1 .修改源码,重新编译。

       2. 使用 docker 运行 Prometheus,挂载本地时区文件

        docker run --restart always -e TZ=Asia/Shanghai --hostname prometheus --name prometheus-server -d -p : -v /data/prometheus/server/data:/prometheus -v /data/prometheus/server/conf/prometheus.yml:/etc/prometheus/prometheus.yml -u root prom/prometheus:v2.5.0

        正文开始

        安装alertmanager

        容器安装方式:

        docker run -d --name alertmanager -p : -v /usr/local/Prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest

        先在宿主机/usr/local/Prometheus下创建一个文件夹alertmanager,然后在文件夹里创建alertmanager.yml配置文件,待会才能映射到alertmanager容器里的/etc/alertmanager目录下

       global:全局配置

           resolve_timeout: 问题解决的超时时间

           smtp_from: 发送告警邮件的邮箱账号

           smtp_smarthost: é‚®ç®± SMTP 服务地址,这里是以QQ邮箱为例,也可以用网易邮箱,这个和我之前设置zabbix邮件告警时的配置一样

           smtp_auth_username: 如果没有设置邮箱别名,那就是账户名

           smtp_auth_password:  邮箱的授权码,不是 账户密码,你可以在QQ邮箱或者网易邮箱网页端设置,开启 POP3/SMTP æœåŠ¡æ—¶ä¼šæç¤ºï¼Œå’Œé…ç½®zabbix邮件告警的时候几乎一样

           smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。

       templates: 告警模板目录,可以不编写模板,有默认模板

            Subject: '{ { template "email.default.subject" . }}'

            html: '{ { template "email.default.html" . }}'

       route:报警的分发设置

            group_by:分组

            group_wait: 分组等待时间

            group_interval: 5m 每组时间间隔

            repeat_interval: m 重复间隔

            receiver: 接收方式,请注意!这里的名字要对应下面receivers中的任何一个名字,不然会报错,这里其实就是选择方式,有邮箱,企业微信,wehook,victorops等等

       receivers:接受方式汇总,即告警方式汇总

        例子:

        receivers:

        - name:'default-receiver' 

        email_configs:

        - to:'whiiip@.com'    

          html: '{ { template "alert.html" . }}'    

          headers: { Subject: "[WARN] 报警邮件test"}

       inhibit_rules:   æŠ‘制规则

        当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

        包括源匹配和目标匹配

        alertmanager官方是这样说的

        Inhibition

        Inhibition is a concept of suppressing notifications for certain alerts if certain other alerts are already firing.

        Example:  An alert is firing that informs that an entire cluster is not reachable. Alertmanager can be configured to mute all other alerts concerning this cluster if that particular alert is firing. This prevents notifications for hundreds or thousands of firing alerts that are unrelated to the actual issue.

        Inhibitions are configured through the Alertmanager's configuration file.

        当存在与另一组匹配器匹配的警报(源)时,禁止规则会使与一组匹配器匹配的警报(目标)静音。目标警报和源警报的equal列表中的标签名称都必须具有相同的标签值。

        在语义上,缺少标签和带有空值的标签是同一件事。因此,如果equal源警报和目标警报都缺少列出的所有标签名称,则将应用禁止规则。

        为了防止警报禁止自身,与规则的目标和源端 都 匹配的警报不能被警报(包括其本身)为真来禁止。但是,我们建议选择目标匹配器和源匹配器,以使警报永远不会同时匹配双方。这很容易进行推理,并且不会触发此特殊情况。

        接着是规则rules

       ä¸è§£é‡Šäº†ï¼Œè‡ªå·±ç ”究官方文档

       alertmanager的非容器安装方式是

         wget .com/rfc.html

       SNMP的组织结构

       SNMP由三部分组成:SNMP内核、管理信息结构SMI和管理信息库MIB。

       SNMP内核负责协议结构分析,根据分析结果执行网管动作;SMI是一种通用规则,用于命名对象、定义对象类型,以及编码对象和对象值;MIB在被管理实体中创建命名对象,即一个实例。SMI规定游戏规则,在规则基础上由MIB实现实例化,而SNMP则是实例化的终极执行BOSS。

       常见术语:

       企业码:组成OID对象的厂商遵守的标识

       iana.org/assignments/en...

       比如华为的企业码:

       SMI编号结构

       iana.org/assignments/sm...

       如果需要深入研究SNMP协议,建议阅读TCP/IP详解卷1:协议

       MIB介绍

       MIB全称Management Information Base,其主要负责为所有的被管理网络节点建立一个接口,本质上类似于IP地址的一串数字。例如,在使用SNMP时,我们经常看到这样一组数字串:

       在这串数字中,每个数字都代表一个节点,其含义可参考下表:

       显然,这个数字串可以直接理解为系统的名字。在实际使用中,我们将其作为参数读取该节点的商城开源码值,如果有写权限的话还可以更改该节点的值,因此,SNMP为系统管理员提供了一套极为便利的工具。但在一般使用中,我们一般不使用这种节点的表达方式,而是使用更为容易理解的方式,对于上面的例子,其往往可以使用SNMPv2-MIB::sysName.0所替代。你可能会想,系统能理解它的含义吗?那你就多虑了,一般在下载SNMP工具包的时候还会下载一个MIB文件包,其提供了所有节点的树形结构。在该结构中可以方便地查找对应的替换表达。

       NetSNMP介绍

       NetSNMP是一个简单的SNMP协议library库,提供支持SNMP的一套应用程序和开发库,包括代理端软件和管理端查询工具。通俗地理解,SNMP可以看作是一个C/S结构。在客户机中,一般会部署一个snmpd的守护进程,而在服务端(管理端)会下载一个SNMP工具包,这个包中包含了许多用于管理客户端网络节点的工具,例如get、set、translate等等。下图可能会帮助你更清晰地理解这个概念:

       上图中,表示的是双方进行通信时所用的默认端口号,被管理端会打开一个守护进程,负责监听端口发来的请求;管理端会提供一个SNMP工具包,利用工具包中的命令可以向被管理端的端口发送请求包,以获取响应。除此之外,管理端还会开启一个SNMPTrapd守护进程,用于接受被管理端向自己的端口发送来的snmptrap请求,这一机制主要用于被管理端的自动报警中,一旦被管理端的某个节点出现故障,系统会自动发送snmptrap包,从而远端的系统管理员可以及时得知问题。

       我们在Linux中,针对SNMP协议的操作(解析MIB文件)主要依赖这个NetSNMP库,相当于中间代理人的角色,下面我简单画出关于NetSNMP和SNMP Exporter以及配置生成器之间的关系。Telegraf默认支持NetSNMP和gosmi,默认使用gosmi,共识社区源码而SNMP Exporter默认使用NetSNMP的库,暂不支持gosmi。

       SNMP Exporter读取snmp.yml配置文件信息,snmp.yml配置文件中定义了需要采集指标的OID信息和数据类型以及结构,但是有一点需要明确,手写snmp.yml是一个吃力不讨好的事情,对工程师非常不友好,那工具开发者其实也是想到了这一点,故提供了一套SNMP Exporter配置文件生成器工具,可以通过配置文件生成器生成自己需要的自定义的snmp.yml配置文件,通过自己自定义指标可以得到相关指标数据,然后在通过数据做可视化和监控告警。

       SNMP Exporter默认使用GET BULK遍历数据,NetSNMP有实现对给定管理树进行遍历的工具,如snmpbulkwalk、snmpbulkget等等。

       snmpbulkwalk和snmpwalk的区别:

       snmpwalk是一个逐步遍历的工具,它会从指定的根OID(对象标识符)开始,按照字典序逐步获取下一个OID的值,直到遍历完整个MIB树或者达到指定的终止条件。这意味着snmpwalk逐步获取每个OID的值,一个接一个。

       snmpbulkwalk是一种更为高效的遍历工具,它使用了SNMP的BulkWalk操作,允许一次性获取多个OID的值,减少了往返的SNMP请求次数。这使得snmpbulkwalk在获取大量数据时更为高效。

       SNMP Exporter如果使用SNMP v1版本,默认使用的是snmpwalk,如果使用的是SNMP v2c版本或v3,默认使用snmpbulkwalk。

       SNMP Exporter部署

       SNMP Exporter采集器目前只支持snmpd 端口,暂不支持snmptrapd即端口,端口可自行修改哦,建议使用默认端口。

       SNMP Exporter推荐使用源码包编译安装使用,在这里我主要介绍两种部署安装方式,源码编译安装和Docker Compose部署。

       Docker Compose部署

       新建初始化挂载目录:

       创建compose.yml,并启动SNMP Exporter,Docker引擎安装可前往改篇文章查看具体步骤:

       启动

       源码编译安装

       主要介绍CentOS 7.9系统和Ubuntu ..2 LTS中部署SNMP Exporter

       到此就完成了SNMP Exporter源码编译安装。

       添加systemd服务管理

       如果为了安全,需要使用普通用户执行,可以新建普通用户snmp_exporter

       SNMP Exporter配置生成器部署

       上面已经完成SNMP Exporter的军棋源码java部署,前面说了,手写snmp.yml是非常不友好的。

       故我们需要一款配置生成工具进行配置生成,只需要我们填写一些关键的信息即可得到我们想要的配置文件,比如想要采集交换机的指标,采集无线网络AC和AP的指标,其他SNMP协议设备指标。

       SNMP Exporter提供了一套这样的配置生成器工具,接下来就来看下如何部署,其实SNMP Exporter主要难点就是在处理配置生成工具和协调mib库上。

       部署SNMP Exporter配置生成器

       CentOS 7.9系统会出现curl版本太低导致make generator mibs错误的问题

       运行过程说明:

       配置生成器从generator.yml中读取简化的收集指令并把相应的配置写入snmp.yml。snmp_exporter可二进制执行文件仅使用snmp.yml文件从开启了snmp的设备收集数据。

       示例:

       args参数解析

       示例:

       flags参数解析

       --snmp.mibopts的作用:

       这个参数具体什么作用呢?主要解决的是有些mib库文件中,某些厂商并没有按照默认标准来,而是在MIB文件中使用了特殊符号,我们应该指定MIB解析的参数,比如某些MIB文件描述中有下划线_,那么如果使用某个指标去解析这个库应该是失败的,需要添加--snmp.mibopts=u,允许使用下划线。

       目录规划

       建议不同类型的设备都有一个目录,其中包含不同设备类型的mibs目录、生成器可执行文件和generator.yml配置文件。这是为了避免MIB定义中的名称空间冲突。仅在设备的mibs目录中保留所需的MIB文件。

       下一篇以实际案例讲解具体场景,包括如何规划目录,如何生成配置,上述参数如何具体使用。

consulmanager部署和使用

       书接上回 渐行渐远:prometheus的安装以及监控指标的配置

       这次主要介绍如何使用consulmanager 去监控各个监控项

       一 consulmanager安装

       github.com/starsliao/Te... #consulmanager项目地址

       consulmanager 是一个开源的项目,现在已经更名为tensuns,有兴趣的可以自行研究

       要想安装consulmanager,必须先安装下面三个 docker ,docker-compase, consul

       1.1 安装consul

       1.1.1 安装consul-基于centos7

       1.1.2 生成uuid

       1.1.3 配置文件设置

       1.1.4 启动consul

       访问方式 ip:

       1.2 安装docker和docker-compase

       1.2.1 安装docker

       1.2.2 安装docker-compase

       二 安装 ConsulManager

       2.1 下载源码

       下载地址 github.com/starsliao/Co...

       目录结构如下:

       2.2 docker-compose.yml 内容

       2.3 启动并访问

       三 配置consulmanager

       3.1 云主机管理

       3.1.1 同步云主机

       云主机管理就是可以自动同步云服务器到consulmanager这个上面

       前提是需要你在云账号里面创建access key 和secret key,这个账号还需要有访问主机的权限

       新增云资源

       创建完成之后,你可以手动同步,也可以自动同步,然后去云主机列表查看,是否同步过来了

       3.1.2 批量云主机监控

       前提是每天主机需要安装好node-exporter

       选定好指定的组,选择好系统,点击生成配置,然后把这个配置,粘贴到prometheus的配置文件中

       进行重启prometheus

       然后进去到prometheus-target里进行查看

       当然如果你的node-exporter的端口不是,怎么办,打开cousul的web页面,可以自定义设置

       3.1.3 导入对应的模版

       导入ID:

       详细URL: grafana.com/grafana/das...

       3.1.4 设置告警规则

       3.2 blackbox站点监控设置

       3.2.1. 配置Blackbox_Exporter

       在Web页面点击

       Blackbox 站点监控/Blackbox 配置,点击

       复制配置,如下所示:

       复制配置到 blackbox.yml,清空已有的配置,把复制的内容粘贴进去,重启blackbox_exporter

       3.2.2 配置Prometheus

       在Web页面点击 Blackbox 站点监控/Prometheus 配置,点击复制配置。编辑Prometheus的

       prometheus.yml,把复制的内容追加到最后,reload或重启Prometheus

       3.2.3. 配置Prometheus告警规则

       在Web页面点击

       Blackbox 站点监控/告警规则,点击复制配置。

       编辑Prometheus的配置文件,添加 rules.yml,然后把复制的内容粘贴到rules.yml里面,reload或重启Prometheus。

       然后去prometheus查看告警规则是否生成

       3.2.4. 查看Prometheus

       在Prometheus的Web页面中,点击Status-Targets,能看到新增的Job即表示数据同步到Prometheus。

       3.2.5 新增tcp或者/grafana/das...

       最终在grafana访问的效果如下:

       四 总结

       到这里基本的监控项和报警规则都已经设定好了,接下来会介绍告警的方式和具体实现

部署Kafka监控

       在Kafka部署过程中,监控系统的设置至关重要。本文将简述搭建Kafka监控的实践经验,包括所选工具和环境配置步骤。

       首先,确保Kafka实例在本地部署了三个实例,未使用Docker。监控方案选择了kafka_exporter、Prometheus和Grafana组合,详细选择理由可自行查阅网络资源。kafka_exporter在本地编译部署,因遇到go环境不匹配问题,最终选择源码编译,通过git克隆v1.7.0版本,设置goproxy以获取依赖库。编译过程中,对`go mod vendor`指令进行了修改,成功编译出kafka_exporter可执行文件,并针对多个Kafka实例制定了启动命令。

       同时,为了监控系统负载,部署了node-exporter在Docker中,确保其固定IP以方便Prometheus的配置。node-exporter的IP设为..0.2,端口为。

       接下来是Prometheus的部署。首先通过Docker拉取prom/prometheus镜像,配置文件中包含了Prometheus自身、node-exporter(.网段)和kafka_exporter(..0.1)的采集项。使用命令`docker run`启动Prometheus,监听端口,与node-exporter和kafka_exporter通信。

       Grafana的安装则在另一个目录B中进行,设置了读写权限后通过Docker拉取grafana/grafana镜像。部署时,Grafana容器的IP设为..0.4,监听端口。登录Grafana后,首先添加DataSource,指向Prometheus实例,然后导入官网提供的Linux系统模板(如、),Kafka监控模板(如),以及Prometheus模板()以设置Dashboard。

       总结,通过这些步骤,成功搭建了Kafka的监控系统,包括本地部署的kafka_exporter、Docker中的node-exporter和Prometheus,以及Grafana用于可视化监控数据。

基于Prometheus + Grafana搭建IT监控报警最佳实践(2)

       见字如面,大家好,我是小斐。延续前文,本文将深入探讨Prometheus和Grafana的监控体系。

       首先,我们需要打开Prometheus和Grafana进行操作,访问地址分别为:...:/ 和 ...:/。

       以node_exporter数据采集器为例,先确保其已安装于需要监控的主机。若要获取...主机的状态数据,需在该主机安装node_exporter采集器。

       在prometheus.yml中添加需要抓取的目标源信息,具体操作为:在scrape_configs下添加job_name,指定静态目标,添加...:目标。

       配置文件配置完成后,由于是静态的,需要重新加载配置文件,重启Prometheus以生效。

       在targets中查看是否已抓取到目标,根据上图可见,...的主机节点数据已抓取到。在Prometheus中验证数据正确性,点击http://...:/metrics 可查看抓取的所有数据。

       查看数据信息,输入node_memory_MemTotal_bytes查询该主机内存数据是否正确,可以看到G总内存,与我本机内存相符,说明数据正确。

       至此,我们可以确定数据抓取是成功的。

       数据生成大屏数据UI,展示放在Grafana中,打开Grafana:http://...:/,点击数据源:关联Prometheus数据源。

       输入Prometheus的地址:http://...:,下载Grafana的面板,json模版可在Grafana官网模版库中找到。在此,我选择了一个模版,具体链接为:Linux主机详情 | Grafana Labs。

       添加模版:点击import,导入下载下来的json文件。

       或者根据ID来加载。如果对面板数据和展示的风格不适用,可单独编辑变量和数据查询语句,关于Grafana的变量和数据查询语句后续单独开篇说明,在此只采用通用的模版展示数据。

       关于SNMP数据采集,我们可以通过SNMP协议来监控交换机、路由器等网络硬件设备。在一台Linux主机上,我们可以使用snmpwalk命令来访问设备通过SNMP协议暴露的数据。

       简单查看后,我们需要长期监控,这个时候就要借助SNMP Exporter这个工具了。SNMP Exporter是Prometheus开源的一个支持SNMP协议的采集器。

       下载docker image使用如下命令,使用中请切换对应的版本。如果使用二进制文件部署,下载地址如下。

       对于SNMP Exporter的使用来说,配置文件比较重要,配置文件中根据硬件的MIB文件生成了OID的映射关系。以Cisco交换机为例,在官方GitHub上下载最新的snmp.yml文件。

       关于采集的监控项是在walk字段下,如果要新增监控项,写在walk项下。我新增了交换机的CPU和内存信息。

       在Linux系统中使用Docker来运行SNMP Exporter可以使用如下脚本。

       在Linux系统部署二进制文件,使用系统的Systemd来控制服务启停,系统服务文件可以这么写。该脚本源自官方提供的脚本,相比于官方脚本增加了SNMP Exporter运行端口的指定。

       运行好以后,我们可以访问http://localhost:来查看启动的SNMP Exporter,页面上会显示Target、Module、Submit、Config这几个选项和按钮。

       在Target中填写交换机的地址,Module里选择对应的模块,然后点击Submit,这样可以查到对应的监控指标,来验证采集是否成功。

       target可以填写需要采集的交换机IP,模块就是snmp.yml文件中命名的模块。

       点击Config会显示当前snmp.yml的配置内容。

       如果上面验证没有问题,那么我们就可以配置Prometheus进行采集了。

       配置好Prometheus以后启动Prometheus服务,就可以查到Cisco交换机的监控信息了。

       接下来就Prometheus配置告警规则,Grafana进行画图了。这些操作和其他组件并无区别,就不再赘述。

       关于手动生成snmp.yml配置文件,当官方配置里没有支持某些设备时,我们需要通过MIB文件来自己生成配置文件。

       以华为交换机为例,在单独的CentOS7.9的一台虚拟机中部署snmp_exporter,在这里我以源码编译部署。

       在此我贴出generator.yml文件的模版:模块中,if_mib是指思科模块提供公共模块,HZHUAWEI是我自定义的模块名,根据walk下的OID和变量下的mib库文件路径生成snmp.yml配置文件,然后根据snmp.yml配置文件采集交换机信息。

       generator.yml文件格式说明:参考官网。

       这次我贴一份比较完整的snmpv3版本的模版:参考网络上,后续我内部的完整模版贴出来,形成最佳实践。

       主要的消耗时间就是想清楚需要采集的交换机监控指标信息,并到官网找到OID,贴到generator.yml文件中,最后执行./generator generate命令遍历OID形成snmp.yml配置文件,启动snmp_exporter时指定新形成的snmp.yml文件路径。

       启动后在浏览器中,打开http://...5:/。

       在此需要说明下,交换机需要开启snmp使能。如内部交换机比较多,可采用python或者ansible批量部署snmp使能,python这块可学习下@弈心 @朱嘉盛老哥的教程,上手快并通俗易懂,ansible后续我会单独出一套针对华为设备的教程,可关注下。

       一般情况下,交换机都是有多台,甚至几百上千台,在如此多的设备需要监控采集数据,需要指定不同模块和不同配置文件进行加载采集的,下面简单介绍下多机器部署采集。

       编辑prometheus.yml文件,snmp_device.yml的内容参照如下格式即可。我在下面的示例中添加了architecture与model等变量,这些变量Prometheus获取目标信息时,会作为目标的标签与目标绑定。

       重启服务器或重加载配置文件即可,后续贴出我的实际配置文件。

       此篇到此结束,下篇重点说明配置文件细节和我目前实践的配置文件讲解。