夜莺-Nightingale
夜莺V6
项目介绍 架构介绍
快速开始
黄埔营
安装部署
升级
采集器
使用手册
API
数据库表结构
FAQ
夜莺专业版
开源生态
Prometheus
版权声明
第1章:天降奇兵
第2章:探索PromQL
第3章:Prometheus告警处理
第4章:Exporter详解
第5章:数据与可视化
第6章:集群与高可用
第7章:Prometheus服务发现
第8章:监控Kubernetes
第9章:Prometheus Operator
参考资料

snmp插件

snmp

snmp 插件之前秦老师已经整理过很详细的文章了,这里就不再赘述了,直接访问:

新特性

categraf从v0.3.9版本开始,支持

  • 正则过滤端口号、端口类型等
  • 支持批量设置label

过滤

在table section中设置如下

[[instances.table]]
oid = "IF-MIB::ifTable"
name = "interface"
inherit_tags = ["source"]
filters = ["A:ifIndex:^2$","B:ifDescr:^eno*", "C:ifOperStatus:1"]
filters_expression = "(A && B) || C"
  • oid 定义了采集的对象 IF-MIB::ifTable
  • name 定义指标名称
  • inherit_tags 定义了要继承的标签,这里继承了source标签 就是把前面的source=xxxx 附加到指标上
  • filters 定义表达式A 是匹配ifIndex == 2, 表达式B是匹配ifDescreno开头的对象,C是匹配ifOperStatus为1的对象,
  • filters_expression 定义了过滤表达式,表示filters中表达式的逻辑关系, 这里是A和B的结果取交集,再和C取并集

假设oid对应的数据如下,

IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifIndex.3 = INTEGER: 3
IF-MIB::ifIndex.6 = INTEGER: 6
IF-MIB::ifIndex.7 = INTEGER: 7
IF-MIB::ifIndex.9 = INTEGER: 9
IF-MIB::ifIndex.10 = INTEGER: 10
IF-MIB::ifIndex.1210 = INTEGER: 1210
....
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eno1
IF-MIB::ifDescr.3 = STRING: eno2
IF-MIB::ifDescr.6 = STRING: virbr0
IF-MIB::ifDescr.7 = STRING: tun0
IF-MIB::ifDescr.9 = STRING: macvtap1
IF-MIB::ifDescr.10 = STRING: docker0
IF-MIB::ifDescr.1210 = STRING: tun1
....
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.3 = INTEGER: down(2)
IF-MIB::ifOperStatus.6 = INTEGER: down(2)
IF-MIB::ifOperStatus.7 = INTEGER: up(1)
IF-MIB::ifOperStatus.9 = INTEGER: down(2)
IF-MIB::ifOperStatus.10 = INTEGER: down(2)
IF-MIB::ifOperStatus.1210 = INTEGER: up(1)
  • A 匹配到的是ifIndex为2的对象
  • B 是匹配eno开头的对象, 也就是ifIndex 为2 或者3
  • A&&B 最终匹配的是 eno1 这块网卡
  • C 匹配的是所有UP的对象 ,对应的是ifIndex 为1、2、7、1210的对象
  • A&&B || C 最终匹配的是 lo eno1tun0 tun1 这些网卡

注意: v0.3.7 和 v0.3.8 版本中用的是include_filter这个配置,并且只支持 两段式的配置 ifIndex:2 这种,不支持正则表达式,而且默认是所有表达式做OR(||)运算。 v0.3.9 版本,使用filters 代替 include_filter。虽然依然支持include_filter并且兼容两段式配置,但是建议使用filters+三段式配置,这样可以使用更丰富的逻辑运算。

批量设置label

[mappings]
"udp://192.168.11.102:161" = { name = "switch001.bj", region = "beijing", ip = "192.168.11.102"}
"udp://192.168.11.103:161" = { name = "switch002.bj", region = "shanghai", ip = "192.168.11.103"}

[[instances]]
agents = [
"udp://192.168.11.102.161",
...
]

[[instances]]
agents = [
"udp://192.168.11.103.161",
...
]

可以通过mappings 给每个agent设置label,采集的时候,就会自动带上这些label。

开源版
Flashcat
Flashduty