And you can't create an SNMP context on the device that exposes all the 
parts of the MIB tree that you're interested in?

On Tuesday 23 July 2024 at 14:19:14 UTC+1 Matthew Koch wrote:

>
> *Correct, the SNMP context I am using is specific to the VLAN that I am 
> trying to get data from. *
> *Non-Cisco Switch: *
>
> dot1dTpFdbStatus_info{dot1dTpFdbAddress="0x000000D51541",dot1dTpFdbPort="5",dot1dTpFdbStatus="learned",ifAlias="Switch5",ifDescr="Module:
>  
> 1 Port: 5 - 10/100 Mbit TX",ifIndex="5",ifName="1/5"} 1 
> *Cisco Switch  - No SNMP Context:*
>
> # HELP dot1dBasePortCircuit For a port which (potentially) has the same 
> value of dot1dBasePortIfIndex as another port on the same bridge, this 
> object contains the name of an object instance unique to this port - 
> 1.3.6.1.2.1.17.1.4.1.3 # TYPE dot1dBasePortCircuit gauge 
> dot1dBasePortCircuit{dot1dBasePort="25",dot1dBasePortCircuit="0.0"} 1 # 
> HELP dot1dBasePortDelayExceededDiscards The number of frames discarded by 
> this port due to excessive transit delay through the bridge - 
> 1.3.6.1.2.1.17.1.4.1.4 # TYPE dot1dBasePortDelayExceededDiscards counter 
> dot1dBasePortDelayExceededDiscards{dot1dBasePort="25"} 0 # HELP 
> dot1dBasePortIfIndex The value of the instance of the ifIndex object, 
> defined in MIB-II, for the interface corresponding to this port. - 
> 1.3.6.1.2.1.17.1.4.1.2 # TYPE dot1dBasePortIfIndex gauge 
> dot1dBasePortIfIndex{dot1dBasePort="25"} 25 # HELP 
> dot1dBasePortMtuExceededDiscards The number of frames discarded by this 
> port due to an excessive size - 1.3.6.1.2.1.17.1.4.1.5 # TYPE 
> dot1dBasePortMtuExceededDiscards counter 
> dot1dBasePortMtuExceededDiscards{dot1dBasePort="25"} 0 # HELP ifIndex 
> interface index reported by the SNMP agent - 1.3.6.1.2.1.2.2.1.1 # TYPE 
> ifIndex gauge ifIndex{ifIndex="1"} 1 ifIndex{ifIndex="10"} 1 
> ifIndex{ifIndex="11"} 1 ifIndex{ifIndex="12"} 1 ifIndex{ifIndex="13"} 1 
> ifIndex{ifIndex="14"} 1 *Cisco Switch with VLAN-100 context*
> dot1dTpFdbStatus_info{dot1dTpFdbAddress="0x000000BD4526",dot1dTpFdbPort="1",dot1dTpFdbStatus="learned",ifAlias="",ifDescr="",ifIndex="",ifName=""}
>  
> 1 
> dot1dTpFdbStatus_info{dot1dTpFdbAddress="0x000000013B93",dot1dTpFdbPort="11",dot1dTpFdbStatus="learned",ifAlias="",ifDescr="",ifIndex="",ifName=""}
>  
> 1 
> dot1dTpFdbStatus_info{dot1dTpFdbAddress="0x0000006664FA",dot1dTpFdbPort="4",dot1dTpFdbStatus="learned",ifAlias="",ifDescr="",ifIndex="",ifName=""}
>  
> 1 
> On Tuesday, July 23, 2024 at 6:21:05 AM UTC-4 Brian Candler wrote:
>
>> Ah right - so we're talking about SNMP v3 context then, not "VLAN 
>> context"?
>>
>> As I understand it, the SNMP context gives you a selected subset of the 
>> OID tree. From RFC 5343:
>>
>>
>> * An SNMP context is a collection of management information accessible by 
>> an SNMP entity. An item of management information may exist in more than 
>> one context and an SNMP entity potentially has access to many contexts 
>> [RFC3411 <https://datatracker.ietf.org/doc/html/rfc3411>]. A context is 
>> identified by the snmpEngineID value of the entity hosting the management 
>> information (also called a contextEngineID) and a context name that 
>> identifies the specific context (also called a contextName).*
>> On Tuesday 23 July 2024 at 10:53:11 UTC+1 Ben Kochie wrote:
>>
>>> SNMP has the concept of a "Context Name" that is part of the walk, in 
>>> addition to the community and other security parameters.
>>>
>>> This can be included in the auth section of the config[0], or as a URL 
>>> parameter in the latest release[1].
>>>
>>> [0]: 
>>> https://github.com/prometheus/snmp_exporter/tree/main/generator#file-format
>>> [1]: https://github.com/prometheus/snmp_exporter/pull/1163
>>>
>>> On Tue, Jul 23, 2024 at 11:40 AM 'Brian Candler' via Prometheus Users <
>>> [email protected]> wrote:
>>>
>>>> > The Cisco switches I am using require you to specify the VLAN context 
>>>> to retrieve the data
>>>>
>>>> I'm not sure I follow. Clearly, you "retrieve" the data simply by 
>>>> walking the relevant SNMP MIB, for which you need to specify nothing more 
>>>> than the OID to walk. Are you saying that Cisco have a proprietary MIB for 
>>>> this data, and/or that the VLAN is part of the table key?  Does it not 
>>>> have 
>>>> an equivalent to dot1dTpFdbPort, or does dot1dBasePortIfIndex not match 
>>>> with ifIndex?
>>>>
>>>> If you show some examples of snmpwalk output it may be clearer. 
>>>> Although I don't have anything to test with here (except perhaps IOSv)
>>>>
>>>> > In a perfect world I'm able to get ifIndex, ifDescr, ifAlias, ifName, 
>>>> mac address and IP address in one call.
>>>>
>>>> One call to what - Prometheus? If the IP--to-MAC mapping and 
>>>> MAC-to-port mapping are in different SNMP tables then it would not be 
>>>> straightforward to combine them in snmp_exporter (it might be possible 
>>>> with 
>>>> chained lookups).  You could also have a recording rule 
>>>> <https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/>
>>>>  
>>>> in prometheus which performs the join and stores the result.
>>>>
>>>> On Monday 22 July 2024 at 19:42:56 UTC+1 Matthew Koch wrote:
>>>>
>>>>> Unfortunately adding the ifIndex only works on some switches. The 
>>>>> Cisco switches I am using require you to specify the VLAN context to 
>>>>> retrieve the data which doesn't pull the ifIndex information. This 
>>>>> definitely helps though,  I was hoping there was a way trick it into 
>>>>> using dot1dBasePortIfIndex instead of ifIndex because they are 
>>>>> equivalents 
>>>>> to pull ifAlias, ifDescr, ifName etc. This would also be useful to get 
>>>>> the 
>>>>> IP address in the same poll. In a perfect world I'm able to get ifIndex, 
>>>>> ifDescr, ifAlias, ifName, mac address and IP address in one call. 
>>>>>
>>>>> On Saturday, July 20, 2024 at 7:56:10 AM UTC-4 Brian Candler wrote:
>>>>>
>>>>>> I had a play with this and I think I got most of the way there. 
>>>>>> Here's generator.yml:
>>>>>>
>>>>>> modules:
>>>>>>   bridge_mib:
>>>>>>     walk:
>>>>>>       - dot1dBasePortTable
>>>>>>       - dot1dTpFdbTable
>>>>>>     lookups:
>>>>>>       - source_indexes: [dot1dTpFdbAddress]
>>>>>>         lookup: dot1dTpFdbPort
>>>>>>       - source_indexes: [dot1dTpFdbPort]
>>>>>>         lookup: dot1dBasePortIfIndex
>>>>>>     overrides:
>>>>>>       dot1dBasePort:
>>>>>>         ignore: true
>>>>>>       dot1dTpFdbStatus:
>>>>>>         type: EnumAsInfo
>>>>>>       dot1dTpFdbPort:
>>>>>>         ignore: true
>>>>>>
>>>>>> Here's the snmp.yml that it creates:
>>>>>>
>>>>>> # WARNING: This file was auto-generated using snmp_exporter 
>>>>>> generator, manual changes will be lost.
>>>>>> modules:
>>>>>>   bridge_mib:
>>>>>>     walk:
>>>>>>     - 1.3.6.1.2.1.17.1.4
>>>>>>     - 1.3.6.1.2.1.17.4.3
>>>>>>
>>>>>>     metrics:
>>>>>>     - name: dot1dBasePortIfIndex
>>>>>>       oid: 1.3.6.1.2.1.17.1.4.1.2
>>>>>>       type: gauge
>>>>>>       help: The value of the instance of the ifIndex object, defined 
>>>>>> in IF-MIB, for
>>>>>>
>>>>>>         the interface corresponding to this port. - 
>>>>>> 1.3.6.1.2.1.17.1.4.1.2
>>>>>>       indexes:
>>>>>>       - labelname: dot1dBasePort
>>>>>>         type: gauge
>>>>>>     - name: dot1dBasePortCircuit
>>>>>>       oid: 1.3.6.1.2.1.17.1.4.1.3
>>>>>>       type: OctetString
>>>>>>       help: For a port that (potentially) has the same value of 
>>>>>> dot1dBasePortIfIndex
>>>>>>         as another port on the same bridge - 1.3.6.1.2.1.17.1.4.1.3
>>>>>>
>>>>>>       indexes:
>>>>>>       - labelname: dot1dBasePort
>>>>>>         type: gauge
>>>>>>     - name: dot1dBasePortDelayExceededDiscards
>>>>>>       oid: 1.3.6.1.2.1.17.1.4.1.4
>>>>>>       type: counter
>>>>>>       help: The number of frames discarded by this port due to 
>>>>>> excessive transit delay
>>>>>>         through the bridge - 1.3.6.1.2.1.17.1.4.1.4
>>>>>>
>>>>>>       indexes:
>>>>>>       - labelname: dot1dBasePort
>>>>>>         type: gauge
>>>>>>     - name: dot1dBasePortMtuExceededDiscards
>>>>>>       oid: 1.3.6.1.2.1.17.1.4.1.5
>>>>>>       type: counter
>>>>>>       help: The number of frames discarded by this port due to an 
>>>>>> excessive size -
>>>>>>         1.3.6.1.2.1.17.1.4.1.5
>>>>>>
>>>>>>       indexes:
>>>>>>       - labelname: dot1dBasePort
>>>>>>         type: gauge
>>>>>>     - name: dot1dTpFdbAddress
>>>>>>       oid: 1.3.6.1.2.1.17.4.3.1.1
>>>>>>       type: PhysAddress48
>>>>>>       help: A unicast MAC address for which the bridge has forwarding 
>>>>>> and/or filtering
>>>>>>         information. - 1.3.6.1.2.1.17.4.3.1.1
>>>>>>
>>>>>>       indexes:
>>>>>>       - labelname: dot1dTpFdbAddress
>>>>>>         type: PhysAddress48
>>>>>>         fixed_size: 6
>>>>>>       - labelname: dot1dTpFdbPort
>>>>>>         type: gauge
>>>>>>       lookups:
>>>>>>       - labels:
>>>>>>         - dot1dTpFdbAddress
>>>>>>         labelname: dot1dTpFdbPort
>>>>>>         oid: 1.3.6.1.2.1.17.4.3.1.2
>>>>>>         type: gauge
>>>>>>       - labels:
>>>>>>         - dot1dTpFdbPort
>>>>>>         labelname: dot1dBasePortIfIndex
>>>>>>         oid: 1.3.6.1.2.1.17.1.4.1.2
>>>>>>         type: gauge
>>>>>>
>>>>>>     - name: dot1dTpFdbStatus
>>>>>>       oid: 1.3.6.1.2.1.17.4.3.1.3
>>>>>>       type: EnumAsInfo
>>>>>>       help: The status of this entry - 1.3.6.1.2.1.17.4.3.1.3
>>>>>>       indexes:
>>>>>>       - labelname: dot1dTpFdbAddress
>>>>>>         type: PhysAddress48
>>>>>>         fixed_size: 6
>>>>>>       - labelname: dot1dTpFdbPort
>>>>>>         type: gauge
>>>>>>       lookups:
>>>>>>       - labels:
>>>>>>         - dot1dTpFdbAddress
>>>>>>         labelname: dot1dTpFdbPort
>>>>>>         oid: 1.3.6.1.2.1.17.4.3.1.2
>>>>>>         type: gauge
>>>>>>       - labels:
>>>>>>         - dot1dTpFdbPort
>>>>>>         labelname: dot1dBasePortIfIndex
>>>>>>         oid: 1.3.6.1.2.1.17.1.4.1.2
>>>>>>         type: gauge
>>>>>>
>>>>>>       enum_values:
>>>>>>         1: other
>>>>>>         2: invalid
>>>>>>         3: learned
>>>>>>         4: self
>>>>>>         5: mgmt
>>>>>>
>>>>>>
>>>>>> Output:
>>>>>>
>>>>>> # HELP dot1dBasePortCircuit For a port that (potentially) has the 
>>>>>> same value of dot1dBasePortIfIndex as another port on the same bridge - 
>>>>>> 1.3.6.1.2.1.17.1.4.1.3
>>>>>> # TYPE dot1dBasePortCircuit gauge
>>>>>> dot1dBasePortCircuit{dot1dBasePort="15",dot1dBasePortCircuit="0.0"} 1
>>>>>> dot1dBasePortCircuit{dot1dBasePort="16",dot1dBasePortCircuit="0.0"} 1
>>>>>> dot1dBasePortCircuit{dot1dBasePort="17",dot1dBasePortCircuit="0.0"} 1
>>>>>> ...
>>>>>> # HELP dot1dBasePortIfIndex The value of the instance of the ifIndex 
>>>>>> object, defined in IF-MIB, for the interface corresponding to this port. 
>>>>>> - 
>>>>>> 1.3.6.1.2.1.17.1.4.1.2
>>>>>> # TYPE dot1dBasePortIfIndex gauge
>>>>>> dot1dBasePortIfIndex{dot1dBasePort="15"} 6
>>>>>> dot1dBasePortIfIndex{dot1dBasePort="16"} 7
>>>>>> dot1dBasePortIfIndex{dot1dBasePort="17"} 8
>>>>>> ...
>>>>>> # HELP dot1dTpFdbAddress A unicast MAC address for which the bridge 
>>>>>> has forwarding and/or filtering information. - 1.3.6.1.2.1.17.4.3.1.1
>>>>>> # TYPE dot1dTpFdbAddress gauge
>>>>>>
>>>>>>
>>>>>> *dot1dTpFdbAddress{dot1dBasePortIfIndex="",dot1dTpFdbAddress="XX:XX:XX:9C:3A:06",dot1dTpFdbPort="0"}
>>>>>>  
>>>>>> 1dot1dTpFdbAddress{dot1dBasePortIfIndex="10",dot1dTpFdbAddress="XX:XX:XX:5F:6C:B2",dot1dTpFdbPort="23"}
>>>>>>  
>>>>>> 1dot1dTpFdbAddress{dot1dBasePortIfIndex="10",dot1dTpFdbAddress="XX:XX:XX:81:98:C4",dot1dTpFdbPort="23"}
>>>>>>  
>>>>>> 1*
>>>>>> ...
>>>>>> # HELP dot1dTpFdbStatus_info The status of this entry - 
>>>>>> 1.3.6.1.2.1.17.4.3.1.3 (EnumAsInfo)
>>>>>> # TYPE dot1dTpFdbStatus_info gauge
>>>>>> dot1dTpFdbStatus_info{dot1dBasePortIfIndex="",dot1dTpFdbAddress="XX:XX:XX:9C:3A:06",dot1dTpFdbPort="0",dot1dTpFdbStatus="self"}
>>>>>>  
>>>>>> 1
>>>>>> dot1dTpFdbStatus_info{dot1dBasePortIfIndex="10",dot1dTpFdbAddress="XX:XX:XX:5F:6C:B2",dot1dTpFdbPort="23",dot1dTpFdbStatus="learned"}
>>>>>>  
>>>>>> 1
>>>>>> dot1dTpFdbStatus_info{dot1dBasePortIfIndex="10",dot1dTpFdbAddress="XX:XX:XX:81:98:C4",dot1dTpFdbPort="23",dot1dTpFdbStatus="learned"}
>>>>>>  
>>>>>> 1
>>>>>> ...
>>>>>>
>>>>>> I think dot1dTpFdbAddress now gives more or less what you want. A few 
>>>>>> niggles:
>>>>>>
>>>>>> (1) I would like to change "dot1dBasePortIfIndex" to "ifIndex" to 
>>>>>> make joins easier, without having to use label_replace(). I couldn't see 
>>>>>> a 
>>>>>> way to rename a metric in snmp_exporter.
>>>>>>
>>>>>> (2) I would like to merge the enumerated dot1dTpFdbStatus strings 
>>>>>> into dot1dTpFdbAddress. However if I add this:
>>>>>>
>>>>>>     lookups:
>>>>>>       - source_indexes: [dot1dTpFdbAddress]
>>>>>>         lookup: dot1dTpFdbPort
>>>>>>
>>>>>>
>>>>>> *      - source_indexes: [dot1dTpFdbAddress]        lookup: 
>>>>>> dot1dTpFdbStatus*      - source_indexes: [dot1dTpFdbPort]
>>>>>>         lookup: dot1dBasePortIfIndex
>>>>>>
>>>>>> then I get scraping errors, e.g.
>>>>>>
>>>>>> * error collecting metric Desc{fqName: "snmp_error", help: "Error 
>>>>>> calling NewConstMetric for EnumAsInfo", constLabels: {}, variableLabels: 
>>>>>> {}}: error for metric dot1dTpFdbStatus with labels [9 3 5 
>>>>>> XX:XX:XX:27:29:BA 
>>>>>> learned]: duplicate label names in constant and variable labels for 
>>>>>> metric 
>>>>>> "dot1dTpFdbStatus_info"
>>>>>>
>>>>>> If I remove the override
>>>>>>
>>>>>>       dot1dTpFdbStatus:
>>>>>>         type: EnumAsInfo
>>>>>>
>>>>>> then scraping works, but I only get the numeric status code 
>>>>>> e.g. dot1dTpFdbStatus="3"
>>>>>>
>>>>>> -------
>>>>>>
>>>>>> Note that if you want to avoid the join in PromQL, you *can* walk 
>>>>>> if[X]Table as well:
>>>>>>
>>>>>> modules:
>>>>>>   bridge_mib:
>>>>>>     walk:
>>>>>>       - dot1dBasePortTable
>>>>>>       - dot1dTpFdbTable
>>>>>>       - ifIndex
>>>>>>       - ifAlias
>>>>>>       - 1.3.6.1.2.1.2.2.1.2
>>>>>>       - 1.3.6.1.2.1.31.1.1.1.1
>>>>>>     lookups:
>>>>>>       - source_indexes: [dot1dTpFdbAddress]
>>>>>>         lookup: dot1dTpFdbPort
>>>>>>       - source_indexes: [dot1dTpFdbPort]
>>>>>>         lookup: dot1dBasePortIfIndex
>>>>>>       - source_indexes: [dot1dBasePortIfIndex]
>>>>>>         lookup: ifIndex
>>>>>>         drop_source_indexes: true
>>>>>>       - source_indexes: [ifIndex]
>>>>>>         lookup: ifAlias
>>>>>>       - source_indexes: [ifIndex]
>>>>>>         # Uis OID to avoid conflict with PaloAlto PAN-COMMON-MIB.
>>>>>>         lookup: 1.3.6.1.2.1.2.2.1.2 # ifDescr
>>>>>>       - source_indexes: [ifIndex]
>>>>>>         # Use OID to avoid conflict with Netscaler NS-ROOT-MIB.
>>>>>>         lookup: 1.3.6.1.2.1.31.1.1.1.1 # ifName
>>>>>>     overrides:
>>>>>>       dot1dBasePort:
>>>>>>         ignore: true
>>>>>>       dot1dTpFdbStatus:
>>>>>>         type: EnumAsInfo
>>>>>>       dot1dTpFdbPort:
>>>>>>         ignore: true
>>>>>>       ifAlias:
>>>>>>         ignore: true
>>>>>>       ifDescr:
>>>>>>         ignore: true
>>>>>>       ifName:
>>>>>>         ignore: true
>>>>>>
>>>>>> In this case, dot1dTpFdbAddress includes ifIndex *and* the other 
>>>>>> interface info, which makes the metric rather convenient to use:
>>>>>>
>>>>>> # HELP dot1dTpFdbAddress A unicast MAC address for which the bridge 
>>>>>> has forwarding and/or filtering information. - 1.3.6.1.2.1.17.4.3.1.1
>>>>>> # TYPE dot1dTpFdbAddress gauge
>>>>>> dot1dTpFdbAddress{dot1dTpFdbAddress="XX:XX:XX:C5:A2:F2",dot1dTpFdbPort="9",ifAlias="",ifDescr="ether5",ifIndex="5",ifName="ether5"}
>>>>>>  
>>>>>> 1
>>>>>> dot1dTpFdbAddress{dot1dTpFdbAddress="XX:XX:XX:12:91:4B",dot1dTpFdbPort="6",ifAlias="",ifDescr="ether2",ifIndex="2",ifName="ether2"}
>>>>>>  
>>>>>> 1
>>>>>> dot1dTpFdbAddress{dot1dTpFdbAddress="XX:XX:XX:27:FE:A9",dot1dTpFdbPort="6",ifAlias="",ifDescr="ether2",ifIndex="2",ifName="ether2"}
>>>>>>  
>>>>>> 1
>>>>>> ...
>>>>>>
>>>>>> But I suspect that if you're scraping if_mib as well, then 
>>>>>> snmp_exporter will end up walking bits of ifTable/ifXTable twice, making 
>>>>>> it 
>>>>>> less efficient network-wise.
>>>>>>
>>>>>> On Saturday 20 July 2024 at 10:20:53 UTC+1 Brian Candler wrote:
>>>>>>
>>>>>>> I found a relevant issue: 
>>>>>>> https://github.com/prometheus/snmp_exporter/issues/405
>>>>>>>
>>>>>>> Firstly, the PromQL count_values 
>>>>>>> <https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators>
>>>>>>>  
>>>>>>> operator can be used to convert a metric value to a label (very neat 
>>>>>>> trick).
>>>>>>>
>>>>>>> And secondly, the ability to do "chainable lookups" was added:
>>>>>>> https://github.com/prometheus/snmp_exporter/pull/527/files
>>>>>>> This might be a way to solve this in the exporter - but I haven't 
>>>>>>> got my head around this. I'm not sure if you'd need to walk ifTable in 
>>>>>>> your 
>>>>>>> generator, even if you're not actually interested in any additional 
>>>>>>> values 
>>>>>>> from ifTable.
>>>>>>>
>>>>>>> On Saturday 20 July 2024 at 09:48:26 UTC+1 Brian Candler wrote:
>>>>>>>
>>>>>>>> > dot1dBasePortIfIndex{dot1dBasePort="12"} 12  - *This won't 
>>>>>>>> always be the same number*
>>>>>>>>
>>>>>>>> The MIB help text says "The value of the instance of the ifIndex 
>>>>>>>> object". So I'm guessing that what you currently get as
>>>>>>>>
>>>>>>>>     dot1dBasePortIfIndex{dot1dBasePort="12"} 42
>>>>>>>>
>>>>>>>> would be more usefully returned as
>>>>>>>>
>>>>>>>>     dot1dBasePortIfIndex{dot1dBasePort="12",ifIndex="42"} 1
>>>>>>>>
>>>>>>>> But I'm afraid I don't have enough generator.yml foo to know how to 
>>>>>>>> do that :-(
>>>>>>>>
>>>>>>>> On Thursday 18 July 2024 at 20:04:35 UTC+1 Matthew Koch wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>> *This is a physical port ifIndex example*
>>>>>>>>>
>>>>>>>>> ifAdminStatus{ifAlias="Device; Device 
>>>>>>>>> (DEVICE)",ifDescr="GigabitEthernet1/12",ifIndex="12",ifName="Gi1/12"} 
>>>>>>>>> 1
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *1. dot1dBasePortIfIndex is an equivalent of ifIndex but 
>>>>>>>>> dot1dBasePort is not. dot1dBasePort is used to get the MAC address. *
>>>>>>>>>
>>>>>>>>> dot1dBasePortIfIndex{dot1dBasePort="12"} 12  - *This won't always 
>>>>>>>>> be the same number*
>>>>>>>>>
>>>>>>>>> *2. I get the MAC address and port pair from this*
>>>>>>>>>
>>>>>>>>> dot1dTpFdbPort{dot1dTpFdbAddress="11:E0:E4:66:5E:11"} 12
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> *3.  I get the MAC address and IP pair from this. But 
>>>>>>>>> the ipNetToMediaIfIndex is a VLAN not a physical port. *
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ipNetToMediaPhysAddress{ipNetToMediaIfIndex="28",ipNetToMediaNetAddress="
>>>>>>>>> 10.10.1.33",ipNetToMediaPhysAddress="11:E0:E4:66:5E:11"} 1
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thursday, July 18, 2024 at 2:42:10 PM UTC-4 Brian Candler wrote:
>>>>>>>>>
>>>>>>>>>> > The challenge I am having is using promql to join the data so I 
>>>>>>>>>> can show the IP associated with the MAC address on the physical 
>>>>>>>>>> port. 
>>>>>>>>>>
>>>>>>>>>> Can you show some examples of the metrics you're trying to join?
>>>>>>>>>>
>>>>>>>>>> On Thursday 18 July 2024 at 18:48:35 UTC+1 Matthew Koch wrote:
>>>>>>>>>>
>>>>>>>>>>> I am working on a project to gather the MAC address and IP which 
>>>>>>>>>>> is on a specific port on a network switch. I've been able to gather 
>>>>>>>>>>> this 
>>>>>>>>>>> information with the below SNMP config but the challenge is the MAC 
>>>>>>>>>>> address 
>>>>>>>>>>> comes back against the physical port index and the IPs come back 
>>>>>>>>>>> against 
>>>>>>>>>>> the VLANs index which is expected. The challenge I am having is 
>>>>>>>>>>> using 
>>>>>>>>>>> promql to join the data so I can show the IP associated with the 
>>>>>>>>>>> MAC 
>>>>>>>>>>> address on the physical port. 
>>>>>>>>>>>
>>>>>>>>>>>  walk:
>>>>>>>>>>>     - 1.3.6.1.2.1.17.1.4.1
>>>>>>>>>>>     - 1.3.6.1.2.1.17.4.3.1
>>>>>>>>>>>     - 1.3.6.1.2.1.4.22.1
>>>>>>>>>>>     - 1.3.6.1.2.1.4.35.1
>>>>>>>>>>>     metrics:
>>>>>>>>>>>     - name: dot1dBasePortIfIndex
>>>>>>>>>>>       oid: 1.3.6.1.2.1.17.1.4.1.2
>>>>>>>>>>>       type: gauge
>>>>>>>>>>>       help: The value of the instance of the ifIndex object, 
>>>>>>>>>>> defined in MIB-II, for
>>>>>>>>>>>         the interface corresponding to this port. - 
>>>>>>>>>>> 1.3.6.1.2.1.17.1.4.1.2
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: dot1dBasePort
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>     - name: dot1dTpFdbPort
>>>>>>>>>>>       oid: 1.3.6.1.2.1.17.4.3.1.2
>>>>>>>>>>>       type: gauge
>>>>>>>>>>>       help: Either the value '0', or the port number of the port 
>>>>>>>>>>> on which a frame
>>>>>>>>>>>         having a source address equal to the value of the 
>>>>>>>>>>> corresponding instance of
>>>>>>>>>>>         dot1dTpFdbAddress has been seen - 1.3.6.1.2.1.17.4.3.1.2
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: dot1dTpFdbAddress
>>>>>>>>>>>         type: PhysAddress48
>>>>>>>>>>>         fixed_size: 6
>>>>>>>>>>>     - name: dot1dTpFdbStatus
>>>>>>>>>>>       oid: 1.3.6.1.2.1.17.4.3.1.3
>>>>>>>>>>>       type: EnumAsInfo
>>>>>>>>>>>       help: The status of this entry - 1.3.6.1.2.1.17.4.3.1.3
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: dot1dTpFdbAddress
>>>>>>>>>>>         type: PhysAddress48
>>>>>>>>>>>         fixed_size: 6
>>>>>>>>>>>       enum_values:
>>>>>>>>>>>         1: other
>>>>>>>>>>>         2: invalid
>>>>>>>>>>>         3: learned
>>>>>>>>>>>         4: self
>>>>>>>>>>>         5: mgmt
>>>>>>>>>>>     - name: ipNetToMediaPhysAddress
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.22.1.2
>>>>>>>>>>>       type: PhysAddress48
>>>>>>>>>>>       help: ' - 1.3.6.1.2.1.4.22.1.2'
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToMediaIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToMediaNetAddress
>>>>>>>>>>>         type: InetAddressIPv4
>>>>>>>>>>>     - name: ipNetToMediaType
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.22.1.4
>>>>>>>>>>>       type: EnumAsInfo
>>>>>>>>>>>       help: ' - 1.3.6.1.2.1.4.22.1.4'
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToMediaIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToMediaNetAddress
>>>>>>>>>>>         type: InetAddressIPv4
>>>>>>>>>>>       enum_values:
>>>>>>>>>>>         1: other
>>>>>>>>>>>         2: invalid
>>>>>>>>>>>         3: dynamic
>>>>>>>>>>>         4: static
>>>>>>>>>>>     - name: ipNetToPhysicalIfIndex
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.1
>>>>>>>>>>>       type: gauge
>>>>>>>>>>>       help: The index value that uniquely identifies the 
>>>>>>>>>>> interface to which this entry
>>>>>>>>>>>         is applicable - 1.3.6.1.2.1.4.35.1.1
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>     - name: ipNetToPhysicalNetAddressType
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.2
>>>>>>>>>>>       type: EnumAsInfo
>>>>>>>>>>>       help: The type of ipNetToPhysicalNetAddress. - 
>>>>>>>>>>> 1.3.6.1.2.1.4.35.1.2
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>       enum_values:
>>>>>>>>>>>         0: unknown
>>>>>>>>>>>         1: ipv4
>>>>>>>>>>>         2: ipv6
>>>>>>>>>>>         3: ipv4z
>>>>>>>>>>>         4: ipv6z
>>>>>>>>>>>         16: dns
>>>>>>>>>>>     - name: ipNetToPhysicalNetAddress
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.3
>>>>>>>>>>>       type: InetAddress
>>>>>>>>>>>       help: The IP Address corresponding to the media-dependent 
>>>>>>>>>>> `physical' address
>>>>>>>>>>>         - 1.3.6.1.2.1.4.35.1.3
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>     - name: ipNetToPhysicalPhysAddress
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.4
>>>>>>>>>>>       type: PhysAddress48
>>>>>>>>>>>       help: The media-dependent `physical' address - 
>>>>>>>>>>> 1.3.6.1.2.1.4.35.1.4
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>     - name: ipNetToPhysicalLastUpdated
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.5
>>>>>>>>>>>       type: gauge
>>>>>>>>>>>       help: The value of sysUpTime at the time this entry was 
>>>>>>>>>>> last updated - 1.3.6.1.2.1.4.35.1.5
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>     - name: ipNetToPhysicalType
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.6
>>>>>>>>>>>       type: EnumAsInfo
>>>>>>>>>>>       help: The type of mapping - 1.3.6.1.2.1.4.35.1.6
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>       enum_values:
>>>>>>>>>>>         1: other
>>>>>>>>>>>         2: invalid
>>>>>>>>>>>         3: dynamic
>>>>>>>>>>>         4: static
>>>>>>>>>>>         5: local
>>>>>>>>>>>     - name: ipNetToPhysicalState
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.7
>>>>>>>>>>>       type: EnumAsInfo
>>>>>>>>>>>       help: The Neighbor Unreachability Detection state for the 
>>>>>>>>>>> interface when the
>>>>>>>>>>>         address mapping in this entry is used - 
>>>>>>>>>>> 1.3.6.1.2.1.4.35.1.7
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>       enum_values:
>>>>>>>>>>>         1: reachable
>>>>>>>>>>>         2: stale
>>>>>>>>>>>         3: delay
>>>>>>>>>>>         4: probe
>>>>>>>>>>>         5: invalid
>>>>>>>>>>>         6: unknown
>>>>>>>>>>>         7: incomplete
>>>>>>>>>>>     - name: ipNetToPhysicalRowStatus
>>>>>>>>>>>       oid: 1.3.6.1.2.1.4.35.1.8
>>>>>>>>>>>       type: EnumAsInfo
>>>>>>>>>>>       help: The status of this conceptual row - 
>>>>>>>>>>> 1.3.6.1.2.1.4.35.1.8
>>>>>>>>>>>       indexes:
>>>>>>>>>>>       - labelname: ipNetToPhysicalIfIndex
>>>>>>>>>>>         type: gauge
>>>>>>>>>>>       - labelname: ipNetToPhysicalNetAddress
>>>>>>>>>>>         type: InetAddress
>>>>>>>>>>>       enum_values:
>>>>>>>>>>>         1: active
>>>>>>>>>>>         2: notInService
>>>>>>>>>>>         3: notReady
>>>>>>>>>>>         4: createAndGo
>>>>>>>>>>>         5: createAndWait
>>>>>>>>>>>         6: destroy
>>>>>>>>>>>
>>>>>>>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Prometheus Users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/prometheus-users/becefc77-874c-4ccf-a222-5a2c6e09c5aen%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/prometheus-users/becefc77-874c-4ccf-a222-5a2c6e09c5aen%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/c88e965d-ee25-4fe8-9d8b-cd1c4d87953bn%40googlegroups.com.

Reply via email to