Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More realistic ethpmDOMCurrentStats example #57

Open
bardahlm opened this issue Apr 15, 2024 · 6 comments
Open

More realistic ethpmDOMCurrentStats example #57

bardahlm opened this issue Apr 15, 2024 · 6 comments

Comments

@bardahlm
Copy link

bardahlm commented Apr 15, 2024

Is your feature request related to a problem? Please describe.
The example used under "Parsing and metrics" is not realistic as it doesn't extract a useful metric.

Describe the solution you'd like
It would be great if the example would show how to extract all the relevant metrics.

Examples of json-result from ACI

{
	"totalCount": "1",
	"imdata": [
		{
			"ethpmDOMCurrentStats": {
				"attributes": {
					"alert": "none",
					"childAction": "",
					"dn": "topology/pod-1/node-101/sys/phys-[eth1/1]/phys/domstats/current",
					"hiAlarm": "12.000001",
					"hiAlarm2": "0.000000",
					"hiAlarm3": "0.000000",
					"hiAlarm4": "0.000000",
					"hiAlarm5": "0.000000",
					"hiAlarm6": "0.000000",
					"hiAlarm7": "0.000000",
					"hiAlarm8": "0.000000",
					"hiWarn": "10.500001",
					"hiWarn2": "0.000000",
					"hiWarn3": "0.000000",
					"hiWarn4": "0.000000",
					"hiWarn5": "0.000000",
					"hiWarn6": "0.000000",
					"hiWarn7": "0.000000",
					"hiWarn8": "0.000000",
					"lanes": "1",
					"loAlarm": "1.000000",
					"loAlarm2": "0.000000",
					"loAlarm3": "0.000000",
					"loAlarm4": "0.000000",
					"loAlarm5": "0.000000",
					"loAlarm6": "0.000000",
					"loAlarm7": "0.000000",
					"loAlarm8": "0.000000",
					"loWarn": "2.500000",
					"loWarn2": "0.000000",
					"loWarn3": "0.000000",
					"loWarn4": "0.000000",
					"loWarn5": "0.000000",
					"loWarn6": "0.000000",
					"loWarn7": "0.000000",
					"loWarn8": "0.000000",
					"modTs": "never",
					"status": "",
					"value": "5.640000",
					"value2": "0.000000",
					"value3": "0.000000",
					"value4": "0.000000",
					"value5": "0.000000",
					"value6": "0.000000",
					"value7": "0.000000",
					"value8": "0.000000"
				}
			}
		}
	]
}
{
	"totalCount": "1",
	"imdata": [
		{
			"ethpmDOMCurrentStats": {
				"attributes": {
					"alert": "none",
					"childAction": "",
					"dn": "topology/pod-1/node-101/sys/phys-[eth1/36]/phys/domstats/current",
					"hiAlarm": "14.996000",
					"hiAlarm2": "14.996000",
					"hiAlarm3": "14.996000",
					"hiAlarm4": "14.996000",
					"hiAlarm5": "14.996000",
					"hiAlarm6": "14.996000",
					"hiAlarm7": "14.996000",
					"hiAlarm8": "14.996000",
					"hiWarn": "12.998000",
					"hiWarn2": "12.998000",
					"hiWarn3": "12.998000",
					"hiWarn4": "12.998000",
					"hiWarn5": "12.998000",
					"hiWarn6": "12.998000",
					"hiWarn7": "12.998000",
					"hiWarn8": "12.998000",
					"lanes": "8",
					"loAlarm": "4.496000",
					"loAlarm2": "4.496000",
					"loAlarm3": "4.496000",
					"loAlarm4": "4.496000",
					"loAlarm5": "4.496000",
					"loAlarm6": "4.496000",
					"loAlarm7": "4.496000",
					"loAlarm8": "4.496000",
					"loWarn": "5.000000",
					"loWarn2": "5.000000",
					"loWarn3": "5.000000",
					"loWarn4": "5.000000",
					"loWarn5": "5.000000",
					"loWarn6": "5.000000",
					"loWarn7": "5.000000",
					"loWarn8": "5.000000",
					"modTs": "never",
					"status": "",
					"value": "28.256001",
					"value2": "28.256001",
					"value3": "24.744001",
					"value4": "33.856003",
					"value5": "16.448000",
					"value6": "16.448000",
					"value7": "25.702002",
					"value8": "24.676001"
				}
			}
		}
	]
}

The relevant parts of the data:

value: actual value for lane 1
value2: actual value for lane 2 and so on

hiAlarm: high threshold value for alarm for lane 1, alarm will be triggered above this value
hiAlarm2: high threshold value for alarm for lane 2, alarm will be triggered above this value

loAlarm: low threshold value for alarm for lane 1, alarm will be triggered below this value

Similiar for hiWarn and loWarn.

The most important metrics are "value" for all the lanes as this indicates the optical quality of the link.

@bardahlm bardahlm changed the title More realistrc ethpmDOMCurrentStats example More realistic ethpmDOMCurrentStats example Apr 15, 2024
@bardahlm
Copy link
Author

I've set up this class query to get all the metrics, it's not very elegant:

class_queries:
  ethpmdomstats:
    class_name: ethpmDOMStats
    query_parameter: '?rsp-subtree=children'
    metrics:
      - name: ethpmDOMStats_hiAlarm1
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm
        type: "gauge"
        help: "Returns hiAlarm"
      - name: ethpmDOMStats_loAlarm1
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm
        type: "gauge"
        help: "Returns loAlarm"
      - name: ethpmDOMStats_hiWarn1
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn
        type: "gauge"
        help: "Returns hiWarn"
      - name: ethpmDOMStats_loWarn1
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn
        type: "gauge"
        help: "Returns loWarn"
      - name: ethpmDOMStats_value1
        value_name: ethpmDOMStats.children.[.*].attributes.value
        type: "gauge"
        help: "Returns value"

      - name: ethpmDOMStats_hiAlarm2
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm2
        type: "gauge"
        help: "Returns hiAlarm2"
      - name: ethpmDOMStats_loAlarm2
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm2
        type: "gauge"
        help: "Returns loAlarm2"
      - name: ethpmDOMStats_hiWarn2
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn2
        type: "gauge"
        help: "Returns hiWarn2"
      - name: ethpmDOMStats_loWarn2
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn2
        type: "gauge"
        help: "Returns loWarn2"
      - name: ethpmDOMStats_value2
        value_name: ethpmDOMStats.children.[.*].attributes.value2
        type: "gauge"
        help: "Returns value2"

      - name: ethpmDOMStats_hiAlarm3
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm3
        type: "gauge"
        help: "Returns hiAlarm3"
      - name: ethpmDOMStats_loAlarm3
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm3
        type: "gauge"
        help: "Returns loAlarm3"
      - name: ethpmDOMStats_hiWarn3
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn3
        type: "gauge"
        help: "Returns hiWarn3"
      - name: ethpmDOMStats_loWarn3
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn3
        type: "gauge"
        help: "Returns loWarn3"
      - name: ethpmDOMStats_value3
        value_name: ethpmDOMStats.children.[.*].attributes.value3
        type: "gauge"
        help: "Returns value3"

      - name: ethpmDOMStats_hiAlarm4
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm4
        type: "gauge"
        help: "Returns hiAlarm4"
      - name: ethpmDOMStats_loAlarm4
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm4
        type: "gauge"
        help: "Returns loAlarm4"
      - name: ethpmDOMStats_hiWarn4
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn4
        type: "gauge"
        help: "Returns hiWarn4"
      - name: ethpmDOMStats_loWarn4
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn4
        type: "gauge"
        help: "Returns loWarn4"
      - name: ethpmDOMStats_value4
        value_name: ethpmDOMStats.children.[.*].attributes.value4
        type: "gauge"
        help: "Returns value4"

      - name: ethpmDOMStats_hiAlarm5
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm5
        type: "gauge"
        help: "Returns hiAlarm5"
      - name: ethpmDOMStats_loAlarm5
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm5
        type: "gauge"
        help: "Returns loAlarm5"
      - name: ethpmDOMStats_hiWarn5
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn5
        type: "gauge"
        help: "Returns hiWarn5"
      - name: ethpmDOMStats_loWarn5
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn5
        type: "gauge"
        help: "Returns loWarn5"
      - name: ethpmDOMStats_value5
        value_name: ethpmDOMStats.children.[.*].attributes.value5
        type: "gauge"
        help: "Returns value5"

      - name: ethpmDOMStats_hiAlarm6
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm6
        type: "gauge"
        help: "Returns hiAlarm6"
      - name: ethpmDOMStats_loAlarm6
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm6
        type: "gauge"
        help: "Returns loAlarm6"
      - name: ethpmDOMStats_hiWarn6
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn6
        type: "gauge"
        help: "Returns hiWarn6"
      - name: ethpmDOMStats_loWarn6
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn6
        type: "gauge"
        help: "Returns loWarn6"
      - name: ethpmDOMStats_value6
        value_name: ethpmDOMStats.children.[.*].attributes.value6
        type: "gauge"
        help: "Returns value6"

      - name: ethpmDOMStats_hiAlarm7
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm7
        type: "gauge"
        help: "Returns hiAlarm7"
      - name: ethpmDOMStats_loAlarm7
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm7
        type: "gauge"
        help: "Returns loAlarm7"
      - name: ethpmDOMStats_hiWarn7
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn7
        type: "gauge"
        help: "Returns hiWarn7"
      - name: ethpmDOMStats_loWarn7
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn7
        type: "gauge"
        help: "Returns loWarn7"
      - name: ethpmDOMStats_value7
        value_name: ethpmDOMStats.children.[.*].attributes.value7
        type: "gauge"
        help: "Returns value7"

      - name: ethpmDOMStats_hiAlarm8
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm8
        type: "gauge"
        help: "Returns hiAlarm8"
      - name: ethpmDOMStats_loAlarm8
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm8
        type: "gauge"
        help: "Returns loAlarm8"
      - name: ethpmDOMStats_hiWarn8
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn8
        type: "gauge"
        help: "Returns hiWarn8"
      - name: ethpmDOMStats_loWarn8
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn8
        type: "gauge"
        help: "Returns loWarn8"
      - name: ethpmDOMStats_value8
        value_name: ethpmDOMStats.children.[.*].attributes.value8
        type: "gauge"
        help: "Returns value8"

    labels:
      - property_name: ethpmDOMStats.attributes.dn
        regex: "^topology/pod-(?P<podid>[1-9][0-9]*)/node-(?P<nodeid>[1-9][0-9]*)/sys/phys-\\[(?P<interface>[^\\]]+)\\]/"
      - property_name: ethpmDOMStats.children.[.*]
        regex: "^(?P<class>.*)"
      - property_name: ethpmDOMStats.children.[.*].attributes.lanes
        regex: "^(?P<lanes>.*)"

I'm unsure if "lanes" is a label or a metric.

@thenodon
Copy link
Member

thenodon commented May 6, 2024

Hi @bardahlm. Sorry I missed your issue post. Im not sure if I understand the issue. aci-exporter just provide the capability to query the apic and retrieve metrics and labels from the response. But Im not an expert on the networking domain related to aci. @camrossi may be you have some insights to share?

@bardahlm
Copy link
Author

bardahlm commented May 7, 2024

Getting data from ethpmDOMStats is used as an example in the readme-file. The example is not very relevant, as it gives no real value to only collect hiAlarm.

DOM is "Digital Optical Monitoring", a way to describe the optical quality of a link,
The following metrics are often made available:

  • current (in milliampere, ethpmDOMCurrentStats)
  • rx power (in dbm, ethpmDOMRxPwrStats)
  • tx power (in dbm, ethpmDOMTxPwrStats)
  • temperature (in celcius, ethpmDOMTempStats)
  • voltage (in volts, ethpmDOMVoltStats)

Each of these metrics must be within certain thresholds (hi/low warn/alarm, specific for the optical module) for the link to come up and be stable.

Some high bandwidth optical modules use multiple frequencies or parallell fiber strands to increase bandwidth, aka lanes, and report some or all of the above metrics for each lane.

See https://community.cisco.com/t5/networking-knowledge-base/digital-optical-monitoring-dom/ta-p/3120342 for info about DOM.

My current configuration is like this:

class_queries:
  ethpmdomstats:
    class_name: ethpmDOMStats
    query_parameter: '?rsp-subtree=children'
    metrics:
      - name: ethpmDOMStats_hiAlarm1
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm
        type: "gauge"
        help: "Returns hiAlarm"
      - name: ethpmDOMStats_loAlarm1
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm
        type: "gauge"
        help: "Returns loAlarm"
      - name: ethpmDOMStats_hiWarn1
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn
        type: "gauge"
        help: "Returns hiWarn"
      - name: ethpmDOMStats_loWarn1
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn
        type: "gauge"
        help: "Returns loWarn"
      - name: ethpmDOMStats_value1
        value_name: ethpmDOMStats.children.[.*].attributes.value
        type: "gauge"
        help: "Returns value"

      - name: ethpmDOMStats_hiAlarm2
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm2
        type: "gauge"
        help: "Returns hiAlarm2"
      - name: ethpmDOMStats_loAlarm2
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm2
        type: "gauge"
        help: "Returns loAlarm2"
      - name: ethpmDOMStats_hiWarn2
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn2
        type: "gauge"
        help: "Returns hiWarn2"
      - name: ethpmDOMStats_loWarn2
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn2
        type: "gauge"
        help: "Returns loWarn2"
      - name: ethpmDOMStats_value2
        value_name: ethpmDOMStats.children.[.*].attributes.value2
        type: "gauge"
        help: "Returns value2"

      - name: ethpmDOMStats_hiAlarm3
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm3
        type: "gauge"
        help: "Returns hiAlarm3"
      - name: ethpmDOMStats_loAlarm3
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm3
        type: "gauge"
        help: "Returns loAlarm3"
      - name: ethpmDOMStats_hiWarn3
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn3
        type: "gauge"
        help: "Returns hiWarn3"
      - name: ethpmDOMStats_loWarn3
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn3
        type: "gauge"
        help: "Returns loWarn3"
      - name: ethpmDOMStats_value3
        value_name: ethpmDOMStats.children.[.*].attributes.value3
        type: "gauge"
        help: "Returns value3"

      - name: ethpmDOMStats_hiAlarm4
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm4
        type: "gauge"
        help: "Returns hiAlarm4"
      - name: ethpmDOMStats_loAlarm4
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm4
        type: "gauge"
        help: "Returns loAlarm4"
      - name: ethpmDOMStats_hiWarn4
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn4
        type: "gauge"
        help: "Returns hiWarn4"
      - name: ethpmDOMStats_loWarn4
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn4
        type: "gauge"
        help: "Returns loWarn4"
      - name: ethpmDOMStats_value4
        value_name: ethpmDOMStats.children.[.*].attributes.value4
        type: "gauge"
        help: "Returns value4"

      - name: ethpmDOMStats_hiAlarm5
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm5
        type: "gauge"
        help: "Returns hiAlarm5"
      - name: ethpmDOMStats_loAlarm5
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm5
        type: "gauge"
        help: "Returns loAlarm5"
      - name: ethpmDOMStats_hiWarn5
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn5
        type: "gauge"
        help: "Returns hiWarn5"
      - name: ethpmDOMStats_loWarn5
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn5
        type: "gauge"
        help: "Returns loWarn5"
      - name: ethpmDOMStats_value5
        value_name: ethpmDOMStats.children.[.*].attributes.value5
        type: "gauge"
        help: "Returns value5"

      - name: ethpmDOMStats_hiAlarm6
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm6
        type: "gauge"
        help: "Returns hiAlarm6"
      - name: ethpmDOMStats_loAlarm6
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm6
        type: "gauge"
        help: "Returns loAlarm6"
      - name: ethpmDOMStats_hiWarn6
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn6
        type: "gauge"
        help: "Returns hiWarn6"
      - name: ethpmDOMStats_loWarn6
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn6
        type: "gauge"
        help: "Returns loWarn6"
      - name: ethpmDOMStats_value6
        value_name: ethpmDOMStats.children.[.*].attributes.value6
        type: "gauge"
        help: "Returns value6"

      - name: ethpmDOMStats_hiAlarm7
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm7
        type: "gauge"
        help: "Returns hiAlarm7"
      - name: ethpmDOMStats_loAlarm7
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm7
        type: "gauge"
        help: "Returns loAlarm7"
      - name: ethpmDOMStats_hiWarn7
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn7
        type: "gauge"
        help: "Returns hiWarn7"
      - name: ethpmDOMStats_loWarn7
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn7
        type: "gauge"
        help: "Returns loWarn7"
      - name: ethpmDOMStats_value7
        value_name: ethpmDOMStats.children.[.*].attributes.value7
        type: "gauge"
        help: "Returns value7"

      - name: ethpmDOMStats_hiAlarm8
        value_name: ethpmDOMStats.children.[.*].attributes.hiAlarm8
        type: "gauge"
        help: "Returns hiAlarm8"
      - name: ethpmDOMStats_loAlarm8
        value_name: ethpmDOMStats.children.[.*].attributes.loAlarm8
        type: "gauge"
        help: "Returns loAlarm8"
      - name: ethpmDOMStats_hiWarn8
        value_name: ethpmDOMStats.children.[.*].attributes.hiWarn8
        type: "gauge"
        help: "Returns hiWarn8"
      - name: ethpmDOMStats_loWarn8
        value_name: ethpmDOMStats.children.[.*].attributes.loWarn8
        type: "gauge"
        help: "Returns loWarn8"
      - name: ethpmDOMStats_value8
        value_name: ethpmDOMStats.children.[.*].attributes.value8
        type: "gauge"
        help: "Returns value8"

      - name: ethpmDOMStats_rxLos
        value_name: ethpmDOMStats.attributes.rxLos
        type: "gauge"
        help: "Returns status of rxLos"

      - name: ethpmDOMStats_lanes
        value_name: ethpmDOMStats.children.[.*].attributes.lanes
        type: "gauge"
        help: "Returns number of lanes"

    labels:
      - property_name: ethpmDOMStats.attributes.dn
        regex: "^topology/pod-(?P<podid>[1-9][0-9]*)/node-(?P<nodeid>[1-9][0-9]*)/sys/phys-\\[(?P<interface>[^\\]]+)\\]/"
      - property_name: ethpmDOMStats.children.[.*]
        regex: "^(?P<class>.*)"

I now get all the relevant metrics for DOM, but it's not a very elegant way to get info about all the lanes.

@thenodon
Copy link
Member

thenodon commented May 7, 2024

@bardahlm so you think its a bad example, is that the issue?

@bardahlm
Copy link
Author

bardahlm commented May 7, 2024

Yes, the example as it is is bad.

@camrossi
Copy link
Contributor

camrossi commented May 8, 2024

I agree is not a very good example. @bardahlm @thenodon I will try to make a PR in the future with a better one perhaps around something simple, I think I will make this part of the work I am about to start doing around #58

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants