在中国人以母语说:使用Prometheus对NW设备进行SNMP监控

首先

我想考虑一下如何从现有的度量收集工具过渡到一个好的解决方案,并总结了一些试验结果。

SNMP_Exporter的配置

根据NW设备的制造商和用途的不同,需要收集的度量指标也会有所不同。因此,在设置SNMP_Exporter时,会为各种设备创建相应的设置。

Juniper:
   ...
   ...
Cisco:
   ...
   ...
Arista:
   ...
   ...
allied-telesis:
   ...
   ...

这里实际收集什么内容会有所不同,所以具体细节省略不谈。

Prometheus的配置设置

作为作业,注册SNMP_Exporter。
为了简化加减,使用服务发现。
在这里,使用file_sd_configs。

scrape_configs:
  - job_name: 'snmp'
    file_sd_configs:
      - files:
        - 'files/*_*.yml'
    metrics_path: /snmp
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9116
      - source_labels: [__meta_filepath]
        target_label: __param_module
        regex: '.*_(.*)\.yml'
        action: replace

這樣應該可以吧。
替換為:127.0.0.1:9116
請在此部分填寫執行SNMP_Exporter的地址。
接下來,在files文件夾下創建設備清單。
按照file_sd_configs中所述,命名規則應該是XXX_YYY.yml。
另外,YYY部分應使用在SNMP_Exporter中定義的名稱(例如Juniper、Cisco、Arista、allied-telesis)。
這樣一來,該文件就會被視為YYY類型,並且可以從SNMP_Exporter中收集信息。
在XXX部分,您可以根據地點或其他方便分組的單位進行命名,這樣會更方便。
如果不需要的話,可以省略。

file_sd_configs:
  - files/*.yml

可以将其更改为YYY.yml并只使用一种类型名称。
至于关键部分内容,
将数据输入到target_groups中。

- targets:
   - hostA
   - hostB
   - XXX.YYY.ZZZ.XYZ

使用服务发现功能的话,Prometheus会在文件被更改时自动重新加载,非常方便。
如果是网络设备,我觉得不会像服务器那样频繁地增加或减少,所以手动操作应该也可以。
即使有增加或减少的情况,只需要定期运行适当的脚本来生成yml文件就可以了。

除此之外
例如

        - source_labels: [__meta_filepath]
          target_label: type
          regex: '.*_(.*)\.yml'
          action: replace

在添加后,收集的数据会有一个名为”type”的标签,因此可以进行按类型统计的操作。

        - source_labels: [__meta_filepath]
          target_label: type2
          regex: '(.*)_.*\.yml'
          action: replace

并且,添加后,收集的数据将被标记为type2,从而可以针对每个文件名的XXX进行统计。

SNMP_exporter的类型可以通过标签而非文件名来决定。

        - source_labels: [__meta_filepath]
          target_label: __param_module
          regex: '.*_(.*)\.yml'
          action: replace

这个部分

        - source_labels: [type]
          target_label: __param_module
          action: replace

通过在yml文件中添加一个名为”type”的标签可以实现这一变更。

- labels:
    type: Juniper
  targets:
    - HostA
    - HostB
- labels:
    type: Cisco
  targets:
    - HostC
    - HostD

这样做也可以。

对于这个地方而言,我认为根据什么方式来创建设备清单以及管理起来更方便取决于情况。

另外一种方式是将所有信息,包括位置信息,都写入到动态载入的文件中。

以下是中文的翻译:

虽然在参考的URL中也有记载,文件服务发现似乎是以自定义服务发现的方式提供的,实际上是预期通过某种脚本动态生成要加载的设备列表的使用方法。有一个示例是从MySQL表中提取数据并生成可用作file_sd_configs的方法。

可以对特定的网络段发送ping请求,将有响应的设备注册到系统中,
或者使用dig命令对NW设备专用的域名进行AXFR查询,将结果格式化并保存到文件中,
有很多种方法可以考虑哦。

请注意

重新标记配置
我们会很好地进行标记更替,但在这里,不能使用数组。
可以指定多个要传递给SNMP_Exporter的模块(例如,module=default&module=typeA),但是在relabel_configs中无法指定多个。
如果在所有设备上都有一定要收集的内容,那么

    metrics_path: /snmp
    params:
      module:
        -
        - default
    relabel_configs:
     ...

例如,通过这样的方式,将第一个空白位置填入某个值,并将第二个位置设为共同值,那么通过relabel_config进行更改的只有第一个空白部分,因此可以指定两个模块。

请参考

普罗米修斯配置
高级服务发现

广告
将在 10 秒后关闭
bannerAds