Cisco Digital Network Architecture (DNA) offers centralized, intuitive management that makes it fast and easy to design, provision, and apply policies across your network environment. It provides end-to-end network visibility and uses network insights to optimize network performance and deliver improved user and application experience. Integrate Cisco DNA Center with Cisco AIOps to collect the metrics and events associated with your network health and performance, and then correlate them with data collected from other monitoring tools. This correlation helps to better understand the impact of the outages, improve visibility, and expedite remediation of issues.

To collect events and metrics from the Cisco DNA Center cluster to Cisco AIOps, you need to configure a Cisco DNA Center agent and an OTel exporter on Docker containers. The Cisco DNA Center agent collects data from the Cisco DNA Center cluster, transforms and enrich the data, and forwards it to the Kafka topic. The OTel exporter collects the data from the Kafka, transform the data to OpenTelemetry data format, and forwards it to the Cisco Observability Platform. The Cisco Observability Platform leverages the OpenTelemetry protocol as its native MELT telemetry data format.

This page describes the resource requirements, compatibility with Docker®-based software, and the specifications required to configure Cisco DNA Center agent and OTel exporter for collecting DNA and assurance metrics and events, which includes devices, sites, applications, clients, and clusters.

Before You Begin

Before installing Cisco DNA Center agent for Cisco Observability Platform data ingestion, ensure that you meet the following requirements:

  1. You are connected to the Cisco DNA Center cluster for which you want to collect metrics and events.
  2. You are connected to the Cisco Observability Platform API by using the OAuth credentials. See Configure Access.
  3. You are connected to your Kafka brokers and can send messages to the Kafka topics dnac_network and raw-events.
  4. You have sudo privileges on the server to run the Docker commands.
  5. You must have access to Cisco DNA Center cluster URL and API.


Cisco DNA Center agent extension requires client_idclient_secret, and token_url. Contact your Cisco Observability Platform administrator for OAuth credentials.

Software Requirements

Cisco DNA Center agent and OTel exporter are designed to run in Linux and Windows hybrid or Linux-only clusters. It can run on both Linux and Windows nodes.

Ensure the following:

There should not be any Cisco DNA Center agent running on your cluster. If an agent is running, uninstall it. Ensure that the port 9000 is available on your cluster.

Cisco DNA Center Agent and OTel Exporter Files

The following section describes the content of the following files that you need to configure to collect events and metrics from the Cisco DNA Center cluster:

  • dnac-agent.yaml
  • otel-exporter-config-local.yaml
  • docker-compose.yaml

The content of the is dnac-agent.yaml is as follows:

environment:
  ENV: production
packages:
  - name: kafka
    environment:
      BROKERS:
       - kafka-1:9092
       - kafka-2:9092
       - kafka-3:9092
      TOPIC: dnac_network
      SSL: false
      CLIENT_ID: kafka-nodejs-starter
  - name: dnac
    environment:
      HOST: <Your hostname of DNA Center Cluster>       
	  CLUSTER: <Your Cluster ID>
      USER: ********
      PASSWORD: ***********
      GLOBAL_SITE: <Your Global Site ID>
      ROUTE: dnac_cluster
      DEFAULT_SITENAME: Global
    functions:
      - name: device
        INTERVAL: 900000
        environment:
          ROUTE: dnac_network
          TYPE: device
          LOCATION_TYPE: building
          KEYS: ['groupNameHierarchy','instanceUuid','instanceTenantId','apEthernetMacAddress','family','hostname','macAddress','reachabilityStatus','role','serialNumber','series','snmpLocation','softwareVersion','upTime','uptimeSeconds']
          SITE: SJC23
      - name: site
        INTERVAL: 900000
        siteAnalytics:
          ROUTE: site
          TYPE: site
          LOCATION_TYPE:
          KEYS: ["coverageSlaPercentage","coverageMetSlaCount","coverageTotalCount","onboardingAttemptsSlaPercentage","onboardingAttemptsMetSlaCount","onboardingAttemptsTotalCount","roamingAttemptsSlaPercentage","roamingAttemptsMetSlaCount","roamingAttemptsTotalCount","onboardingDurationSlaPercentage","onboardingDurationMetSlaCount","onboardingDurationTotalCount","roamingDurationSlaPercentage","roamingDurationMetSlaCount","roamingDurationTotalCount","connectionSpeedSlaPercentage","connectionSpeedMetSlaCount","connectionSpeedTotalCount"]
      - name: issue
        INTERVAL: 300000
        environment:
          ROUTE: dnac_issue
          TYPE: issues
          TOPIC: raw-events
      - name: event
        INTERVAL: 300000
        environment:
          ROUTE: dnac_event
          TYPE: events
          TOPIC: raw-events
YML


The content of the is otel-exporter-config-local.yaml is as follows:

events:
  source:
    kafka:
      brokers:
        - kafka-1:9092
        - kafka-2:9092
        - kafka-3:9092
      protocol_version: 2.1.1
      topic: raw-events
      encoding: otlp_json

  target:
     http:
       scheme: https
       port:
       hostName: XXXXXXXXXXXXXXXXXXXXXXX
       path: data/v1/logs
       isSecure: true
       auth:
         type: oauth
         attributes:
           tokenUrl: https://XXXXXXXXXXXXXXXXXXXXXXX/auth/XXXXXXXXXXXXXXXXXXXXXXX/default/oauth2/token
           clientId: XXXXXXXXXXXXXXXXXXXXXXX
           clientSecret: XXXXXXXXXXXXXXXXXXXXXXX
           grantType: client_credentials

  route:
  - name: raw_message
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: testName
      aiopscore.ge.severity:
        sourceName: severity
      aiopscore.ge.type:
        sourceName: type
      aiopscore.ge.message:
        sourceName: message
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: aiopscore:generic_event
      aiopscore.ge.source: webhook
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: teyes
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: testName
      aiopscore.http_server.test_id:
        sourceName: testId
      aiopscore.http_server.test_name:
        sourceName: testName
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: aiopscore:http_server_event
      aiopscore.http_server.type: http-server
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: ba
    attributes:
      snow.display_name:
        sourceName: service_name
      snow.business_application.parent_name:
        sourceName: parent_name
      snow.business_application.service_name:
        sourceName: service_name
      snow.business_application.service_owner:
        sourceName: service_owner
      snow.business_application.service_id:
        sourceName: service_id
      snow.business_application.service_description:
        sourceName: service_description
      snow.business_application.service_operational_status:
        sourceName: service_operational_status
      snow.business_application.service_criticality:
        sourceName: service_criticality
      snow.business_application.service_updated_on:
        sourceName: service_updated_on
      snow.business_application.service_profile:
        sourceName: service_profile
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype
    tagging:
      snow.business_application.service_type: business_application
      namespace: snow
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: snow:business_application_event
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: major_incident
    attributes:
      snow.display_name:
        sourceName: number
      snow.major_incident.number:
        sourceName: number
      snow.major_incident.source_number:
        sourceName: source_number
      snow.major_incident.problem_number:
        sourceName: problem_number
      snow.major_incident.priority:
        sourceName: priority
      snow.major_incident.state:
        sourceName: state
      snow.major_incident.business_impact_start:
        sourceName: business_impact_start
      snow.major_incident.business_impact_end:
        sourceName: business_impact_end
      snow.major_incident.business_impact_duration:
        sourceName: business_impact_duration
      snow.major_incident.short_description:
        sourceName: short_description
      snow.major_incident.cause_code:
        sourceName: cause_code
      snow.major_incident.opened_at:
        sourceName: opened_at
      snow.major_incident.closed_at:
        sourceName: closed_at
      snow.major_incident.resolved_at:
        sourceName: resolved_at
      snow.major_incident.identified_at:
        sourceName: identified_at
      snow.major_incident.impacting_profile:
        sourceName: impacting_profile
      snow.major_incident.causing_profile:
        sourceName: causing_profile
      snow.major_incident.causing_service_name:
        sourceName: causing_so_name
      snow.major_incident.impacting_service_name:
        sourceName: impacting_so_name
      snow.source_name:
        sourceName: source_name
      snow.source_link:
        sourceName: source_link
      snow.fiscal_quarter_name:
        sourceName: fiscal_quarter_name
      snow.major_incident.ttd:
        sourceName: ttd
      snow.major_incident.ttr:
        sourceName: ttr
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype
    tagging:
      snow.major_incident.type: major_incident
      namespace: snow
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: snow:major_incident_event
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: problem
    attributes:
      snow.display_name:
        sourceName: number
      snow.problem.number:
        sourceName: number
      snow.problem.age_group:
        sourceName: age_group
      snow.problem.root_cause:
        sourceName: root_cause
      snow.problem.status:
        sourceName: status
      snow.problem.is_cr_related:
        sourceName: is_cr_related
      snow.problem.rca_sla_status:
        sourceName: rca_sla_status
      snow.problem.priority:
        sourceName: priority
      snow.problem.stage:
        sourceName: stage
      snow.problem.opened_at:
        sourceName: opened_at
      snow.problem.closed_at:
        sourceName: closed_at
      snow.problem.timestamp:
        sourceName: timestamp
      snow.problem.service_name:
        sourceName: so_name
      snow.opened_fiscal_quarter_name:
        sourceName: opened_fiscal_quarter_name
      snow.closed_fiscal_quarter_name:
        sourceName: closed_fiscal_quarter_name
      snow.source_name:
        sourceName: source_name
      snow.source_link:
        sourceName: source_link
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype
    tagging:
      snow.problem.type: problem
      namespace: snow
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: snow:problem_event
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: change
    attributes:
      snow.display_name:
        sourceName: number
      snow.change.number:
        sourceName: number
      snow.change.ci_item:
        sourceName: ci_item
      snow.change.state:
        sourceName: state
      snow.change.short_description:
        sourceName: short_description
      snow.change.planned_start_date:
        sourceName: planned_start_date
      snow.change.planned_end_date:
        sourceName: planned_end_date
      snow.change.outage_start_time:
        sourceName: outage_start_time
      snow.change.outage_end_time:
        sourceName: outage_end_time
      snow.change.outage:
        sourceName: outage
      snow.change.ci_sys_id:
        sourceName: ci_sys_id
      snow.change.score:
        sourceName: score
      snow.change.assigned_to:
        sourceName: assigned_to
      snow.change.environment:
        sourceName: environment
      snow.change.timestamp:
        sourceName: timestamp
      snow.fiscal_quarter_name:
        sourceName: fiscal_quarter_name
      snow.source_name:
        sourceName: source_name
      snow.source_link:
        sourceName: source_link
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype
    tagging:
      snow.change.type: change
      namespace: snow
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: snow:change_event
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: so
    attributes: # add them as it is
      snow.so.service_id:
        sourceName: service_id
      snow.so.service_type:
        sourceName: service_type
      snow.so.service_name:
        sourceName: service_name
      snow.so.service_description:
        sourceName: service_description
      snow.so.parent_id:
        sourceName: parent_id
      appd.fmm.entity.relations.snow.service.service_id:
        sourceName: parent_id
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype
    tagging:
      namespace: snow
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.fmm.entity.relations.snow.service.service_type: service #relationship
      appd.isevent: true
      appd.event.type: snow:so_event
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: dnac_event
    attributes:
      dnac.display_name:
        sourceName: eventName
      dnac.device.device_family:
        sourceName: deviceFamily
      dnac.device.id:
        sourceName: eventDeviceId
      dnac.device.event_name:
        sourceName: eventName
      dnac.device.status:
        sourceName: status
      dnac.device.severity:
        sourceName: severity
      dnac.device.timestamp:
        sourceName: timestamp
      dnac.device.hostname:
        sourceName: deviceName
      dnac.device.event_type:
        sourceName: eventType
      dnac.device.message_type:
        sourceName: messageType
      dnac.device.device_ip:
        sourceName: managementIpAddress
      dnac.device.severity_text:
        sourceName: severityText
      dnac.device.message:
        sourceName: message
      dnac.device.location:
        sourceName: location
      dnac.device.category_type:
        sourceName: categoryType
      dnac.device.cluster_name:
        sourceName: cluster_name
      appd.fmm.entity.relations.dnac.device.id:
        sourceName: eventDeviceId

    tagging:
      namespace: dnac
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: dnac:dnac_event
      dnac.source.type: device
      appd.fmm.entity.relations.dnac.source.type: device

  - name: dnac_issue
    attributes:
      dnac.display_name:
        sourceName: issueName
      dnac.site.issue_id:
        sourceName: issueId
      dnac.site.id:
        sourceName: issueEntityValue
      dnac.site.name:
        sourceName: issueSource
      dnac.site.cluster_name:
        sourceName: cluster_name
      dnac.site.issue_source:
        sourceName: issueSource
      dnac.site.issue_category:
        sourceName: issueCategory
      dnac.site.issue_occurence_count:
        sourceName: issue_occurence_count
      appd.fmm.entity.relations.dnac.site.id:
        sourceName: issueEntityValue
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype

    tagging:
      namespace: dnac
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: dnac:dnac_issue
      dnac.source.type: site
      appd.fmm.entity.relations.dnac.source.type: site #relationship
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: appd
    attributes:
      aiopscore.display_name:
        sourceName: attributes_latestEvent_displayName
      aiopscore.appd.event_id:
        sourceName: attributes_latestEvent_id
      aiopscore.appd.policy_name:
        sourceName: attributes_policy_name
      aiopscore.appd.category:
        sourceName: category
      aiopscore.appd.event_time:
        sourceName: attributes_latestEvent_eventTime
      aiopscore.appd.policy_id:
        sourceName: attributes_policy_id
      aiopscore.appd.application_name:
        sourceName: attributes_latestEvent_application_name
      aiopscore.appd.tier_id:
        sourceName: attributes_latestEvent_tier_id
      aiopscore.appd.summary_message:
        sourceName: attributes_latestEvent_summaryMessage
      aiopscore.appd.deep_link:
        sourceName: attributes_latestEvent_deepLink
      aiopscore.appd.node_id:
        sourceName: attributes_latestEvent_node_id
      aiopscore.appd.node_name:
        sourceName: attributes_latestEvent_node_name
      aiopscore.appd.account_name:
        sourceName: attributes_account_name
      aiopscore.appd.event_message:
        sourceName: event_message
      aiopscore.appd.action_id:
        sourceName: attributes_action_id
      aiopscore.appd.application_id:
        sourceName: attributes_latestEvent_application_id
      aiopscore.appd.tier_name:
        sourceName: attributes_latestEvent_tier_name
      severity:
        sourceName: attributes_latestEvent_severity
      reason:
        sourceName: reason
      description:
        sourceName: description
      subtype:
        sourceName: subtype

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: aiopscore:appd_event
      aiopscore.source.type: appd
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

  - name: vm
    attributes:
      aiopscore.display_name:
        sourceName: alarm_name
      aiopscore.vmware_event.alarm_name:
        sourceName: alarm_name
      aiopscore.vmware_event.object:
        sourceName: object
      aiopscore.vmware_event.object_type:
        sourceName: object_type
      aiopscore.vmware_event.severity:
        sourceName: severity
      aiopscore.vmware_event.triggered_time:
        sourceName: triggered_time
      aiopscore.vmware_event.acknowledged_time:
        sourceName: acknowledged_time
      aiopscore.vmware_event.acknowledged_by:
        sourceName: acknowledged_by
      aiopscore.vm.hostname:
        sourceName: object
      reason:
        sourceName: reason
      severity:
        sourceName: severity
      description:
        sourceName: description
      subtype:
        sourceName: subtype

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      appd.isevent: true
      appd.event.type: aiopscore:vmware_event
      aiopscore.vm.type: vm
      severity: INFO
      reason: raw text
      description: raw message
      subtype: text

metrics:
  source:
    kafka:
      brokers:
        - kafka-1:9092
        - kafka-2:9092
        - kafka-3:9092
      protocol_version: 2.1.1
      topic: dnac_network
      encoding: otlp_json

  target:
     http:
       scheme: https
       port:
       hostName: XXXXXXXXXXXXXXXXXXXXXXX
       path: data/v1/metrics
       isSecure: true
       auth:
         type: oauth
         attributes:
           tokenUrl: https://XXXXXXXXXXXXXXXXXXXXXXX/auth/XXXXXXXXXXXXXXXXXXXXXXX/default/oauth2/token
           clientId: XXXXXXXXXXXXXXXXXXXXXXX
           clientSecret: XXXXXXXXXXXXXXXXXXXXXXX
           grantType: client_credentials
#    http:
#      scheme: http
#      port: 6666
#      hostName: localhost
#      path: v1/metrics
#      isSecure: false

  route:
  - name: test
    attributes: # add them as it is
      aiopscore.test.id:
        sourceName: id
      aiopscore.test.name:
        sourceName: name
      aiopscore.test.type:
        sourceName: type
    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: teyes
    attributes: # add them as it is
      aiopscore.http_server.test_id:
        sourceName: testId
      aiopscore.http_server.test_name:
        sourceName: testName
      aiopscore.http_server.type:
        sourceName: type
    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:connect_time:
        sourceName: connectTime
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:dns_time:
        sourceName: dnsTime
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:response_time:
        sourceName: responseTime
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:total_time:
        sourceName: totalTime
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:wait_time:
        sourceName: waitTime
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:avg_latency:
        sourceName: avgLatency
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:number_of_hops:
        sourceName: numberOfHops
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:loss:
        sourceName: loss
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:jitter:
        sourceName: jitter
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:max_latency:
        sourceName: maxLatency
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:min_latency:
        sourceName: minLatency
        otelType: gauge
        unit: seconds
        isDouble: true
      aiopscore:updates:
        sourceName: updates
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:path_changes:
        sourceName: pathChanges
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:reachability:
        sourceName: reachability
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: vm
    attributes: # add them as it is
      aiopscore.vm.hostname:
        sourceName: hostname
      aiopscore.vm.type:
        sourceName: type
      aiopscore.vm.esxname:
        sourceName: esxname
      appd.fmm.entity.relations.aiopscore.host.esxname:
        sourceName: esxname
      appd.fmm.entity.relations.aiopscore.datastore.hostname:
        sourceName: hostname
    metrics:
      aiopscore:system.cpu.used.utilization:
        sourceName: agg_cpu_util
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.cpu.user.utilization:
        sourceName: cpu_usr
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.cpu.system.utilization:
        sourceName: cpu_sys
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.cpu.iowait.utilization:
        sourceName: cpu_wait
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.memory.used.utilization:
        sourceName: mempct
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.network.transmit.io_sec:
        sourceName: net_send_MBps
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.network.receive.io_sec:
        sourceName: net_recv_MBps
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      appd.fmm.entity.relations.aiopscore.host.type: host
      appd.fmm.entity.relations.aiopscore.datastore.type: datastore
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: host
    attributes: # add them as it is
      aiopscore.host.esxname:
        sourceName: esxname
      aiopscore.host.type:
        sourceName: type
      aiopscore.host.ucs:
        sourceName: ucs
      aiopscore.host.ucs_model:
        sourceName: ucs_model
      appd.fmm.entity.relations.aiopscore.switch.ucs:
        sourceName: ucs
    metrics:
      aiopscore:system.cpu.used.utilization:
        sourceName: esx_cpu_workload_pct
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.memory.used.utilization:
        sourceName: esx_mem_workload_pct
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.memory.available.usage:
        sourceName: esx_mem_active_avg_kb
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.memory.used.consumed:
        sourceName: esx_mem_consumed_avg_kb
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:system.memory.used.usage:
        sourceName: esx_mem_host_usage_pct
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      appd.fmm.entity.relations.aiopscore.switch.type: switch
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: switch
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: device_name
      aiopscore.switch.device_name:
        sourceName: device_name
      aiopscore.switch.ucs:
        sourceName: device_name
      aiopscore.switch.nw_metric_collection_name:
        sourceName: nw_metric_collection_name
    metrics:
      aiopscore:network.device.cpu.5min_avg:
        sourceName: cpu_percent
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      aiopscore.switch.type: switch
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: network
    attributes: # add them as it is
      aiopscore.switch.device_name:
        sourceName: device_name
      aiopscore.switch.type:
        sourceName: type
      aiopscore.switch.nw_metric_collection_name:
        sourceName: nw_metric_collection_name
      aiopscore.switch.ucs:
        sourceName: ucs
    metrics:
      aiopscore:network.device.cpu.5min_avg:
        sourceName: nw_data_cpu_5_minute_average_percent_n
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:network.device.memory.io.used:
        sourceName: nw_data_io_memory_used_perc_n
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:network.device.memory.used:
        sourceName: nw_data_processor_memory_used_perc_n
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:network.device.memory.total.used:
        sourceName: nw_data_total_memory_used_perc_n
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:network.device.errors:
        sourceName: nw_if_data_errors_in_perc_n
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: datastore
    attributes: # add them as it is
      aiopscore.datastore.hostname:
        sourceName: hostname
      aiopscore.datastore.datastore:
        sourceName: datastore
      aiopscore.datastore.type:
        sourceName: type
      aiopscore.datastore.cluster:
        sourceName: cluster
      aiopscore.datastore.volume:
        sourceName: volume
      aiopscore.datastore.svm:
        sourceName: svm
    metrics:
      aiopscore:storage.device.read.data:
        sourceName: read_data
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:storage.device.read.latency:
        sourceName: read_latency
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:storage.device.read.io_sec:
        sourceName: read_ops
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:storage.device.write.data:
        sourceName: write_data
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:storage.device.write.latency:
        sourceName: write_latency
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:storage.device.write.io_sec:
        sourceName: write_ops
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: mongodb
    attributes: # add them as it is
      aiopscore.mongodb.service.instance.id:
        sourceName: mongodb.service.name
      aiopscore.source.type:
        sourceName: source.type
    metrics:
      aiopscore:mongodb.storage.size:
        sourceName: mongodb.storage.size
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:mongodb.session.count:
        sourceName: mongodb.session.count
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: redis
    attributes: # add them as it is
      aiopscore.redis.service.instance.id:
        sourceName: redis.service.name
      aiopscore.source.type:
        sourceName: source.type
      aiopscore.redis.version:
        sourceName: redis.version
    metrics:
      aiopscore:redis.uptime:
        sourceName: redis.uptime
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:redis.slaves.connected:
        sourceName: redis.slaves.connected
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: elasticsearch_cluster
    attributes: # add them as it is
      aiopscore.elasticsearch_cluster.cluster.name:
        sourceName: elasticsearch_cluster.name
      aiopscore.source.type:
        sourceName: source.type
    metrics:
      aiopscore:elasticsearch.os.memory:
        sourceName: elasticsearch.os.memory
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:elasticsearch.os.cpu.usage:
        sourceName: elasticsearch.os.cpu.usage
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: kafka_cluster
    attributes: # add them as it is
      aiopscore.kafka_cluster.cluster.name:
        sourceName: kafka_cluster.name
      aiopscore.source.type:
        sourceName: source.type
    metrics:
      aiopscore:kafka.partition.replicas_in_sync:
        sourceName: kafka.partition.replicas_in_sync
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:kafka.partition.replicas:
        sourceName: kafka.partition.replicas
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: asg
    attributes: # add them as it is
      aiopscore.asg.service_id:
        sourceName: service_id
      aiopscore.asg.service_type:
        sourceName: service_type
      aiopscore.asg.service_name:
        sourceName: service_name
      aiopscore.asg.service_description:
        sourceName: service_description
    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: service
    attributes: # add them as it is
      aiopscore.service.service_id:
        sourceName: service_id
      aiopscore.service.service_type:
        sourceName: service_type
      aiopscore.service.service_name:
        sourceName: service_name
      aiopscore.service.service_description:
        sourceName: service_description
      aiopscore.service.parent_id:
        sourceName: parent_id
    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
  - name: so
    attributes: # add them as it is
      aiopscore.so.service_id:
        sourceName: service_id
      aiopscore.so.service_type:
        sourceName: service_type
      aiopscore.so.service_name:
        sourceName: service_name
      aiopscore.so.service_description:
        sourceName: service_description
      aiopscore.so.parent_id:
        sourceName: parent_id
    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
  - name: ba
    attributes: # add them as it is
      aiopscore.ba.service_id:
        sourceName: service_id
      aiopscore.ba.service_type:
        sourceName: service_type
      aiopscore.ba.service_name:
        sourceName: service_name
      aiopscore.ba.service_description:
        sourceName: service_description
      aiopscore.ba.parent_id:
        sourceName: parent_id
    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: dnac-device
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: hostname
      aiopscore.device.ap_manager_interface_ip:
        sourceName: apManagerInterfaceIp
      aiopscore.device.associated_wlc_ip:
        sourceName: associatedWlcIp
      aiopscore.device.boot_date_time:
        sourceName: bootDateTime
      aiopscore.device.collection_interval:
        sourceName: collectionInterval
      aiopscore.device.collection_status:
        sourceName: collectionStatus
      aiopscore.device.error_code:
        sourceName: errorCode
      aiopscore.device.error_description:
        sourceName: errorDescription
      aiopscore.device.family:
        sourceName: family
      aiopscore.device.hostname:
        sourceName: hostname
      aiopscore.device.id:
        sourceName: id
      aiopscore.device.instance_tenant_id:
        sourceName: instanceTenantId
      aiopscore.device.instance_uuid:
        sourceName: instanceUuid
      aiopscore.device.interface_count:
        sourceName: interfaceCount
      aiopscore.device.inventory_status_detail:
        sourceName: inventoryStatusDetail
      aiopscore.device.last_update_time:
        sourceName: lastUpdateTime
      aiopscore.device.last_updated:
        sourceName: lastUpdated
      aiopscore.device.line_card_count:
        sourceName: lineCardCount
      aiopscore.device.line_card_id:
        sourceName: lineCardId
      aiopscore.device.location:
        sourceName: location
      aiopscore.device.location_name:
        sourceName: locationName
      aiopscore.device.mac_address:
        sourceName: macAddress
      aiopscore.device.management_ip_address:
        sourceName: managementIpAddress
      aiopscore.device.memory_size:
        sourceName: memorySize
      aiopscore.device.platform_id:
        sourceName: platformId
      aiopscore.device.reachability_failure_reason:
        sourceName: reachabilityFailureReason
      aiopscore.device.reachability_status:
        sourceName: reachabilityStatus
      aiopscore.device.role:
        sourceName: role
      aiopscore.device.role_source:
        sourceName: roleSource
      aiopscore.device.serial_number:
        sourceName: serialNumber
      aiopscore.device.series:
        sourceName: series
      aiopscore.device.snmp_contact:
        sourceName: snmpContact
      aiopscore.device.snmp_location:
        sourceName: snmpLocation
      aiopscore.device.software_type:
        sourceName: softwareType
      aiopscore.device.software_version:
        sourceName: softwareVersion
      aiopscore.device.tag_count:
        sourceName: tagCount
      aiopscore.device.tunnel_udp_port:
        sourceName: tunnelUdpPort
      aiopscore.device.device_type:
        sourceName: type
      aiopscore.device.up_time:
        sourceName: upTime
      aiopscore.device.waas_device_mode:
        sourceName: waasDeviceMode

    metrics:
      aiopscore:overall_health:
        sourceName: overallHealth
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:memory_score:
        sourceName: memoryScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cpu_score:
        sourceName: cpuScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:noise_score:
        sourceName: noiseScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:utilization_score:
        sourceName: utilizationScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:air_quality_score:
        sourceName: airQualityScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:interference_score:
        sourceName: interferenceScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:wqe_score:
        sourceName: wqeScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:free_mbuf_score:
        sourceName: freeMbufScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:packet_pool_score:
        sourceName: packetPoolScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:free_timer_score:
        sourceName: freeTimerScore
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      aiopscore.device.type: device

  - name: appd
    attributes: # add them as it is
      aiopscore.appd.event_id:
        sourceName: attributes_latestEvent_id
      aiopscore.display_name:
        sourceName: application

    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      namespace: aiopscore
      aiopscore.source.type: appd
      telemetry.sdk.name: aiops-fsoc-exporter

  - name: appd-metrics
    attributes: # add them as it is
      service.instance.id:
        sourceName: tier
      service.name:
        sourceName: application

    metrics:
      apm:response_time:
        sourceName: AverageResponseTime(ms)
        otelType: distribution
        unit: double
        isDouble: true
      apm:calls_min:
        sourceName: CallsperMinute
        otelType: distribution
        unit: double
        isDouble: true
      apm:errors_min:
        sourceName: ErrorsperMinute
        otelType: distribution
        unit: double
        isDouble: true
      apm:process.runtime.jvm.system.cpu.utilization:
        sourceName: system_cpu_utilization
        otelType: gauge
        unit: double
        isDouble: true
      apm:process.runtime.jvm.cpu.utilization:
        sourceName: cpu_utilization
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      service.namespace: apm
      process.pid: 1232
      telemetry.sdk.name: infra-agent

  - name: dnac_network
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: hostname
      aiopscore.device.cluster_name:
        sourceName: cluster_name
      aiopscore.device.site_name:
        sourceName: siteName
      aiopscore.device.dnac_cluster:
        sourceName: cluster_name
      aiopscore.device.ap_manager_interface_ip:
        sourceName: apManagerInterfaceIp
      aiopscore.device.associated_wlc_ip:
        sourceName: associatedWlcIp
      aiopscore.device.boot_date_time:
        sourceName: bootDateTime
      aiopscore.device.collection_interval:
        sourceName: collectionInterval
      aiopscore.device.collection_status:
        sourceName: collectionStatus
      aiopscore.device.error_code:
        sourceName: errorCode
      aiopscore.device.error_description:
        sourceName: errorDescription
      aiopscore.device.family:
        sourceName: family
      aiopscore.device.hostname:
        sourceName: hostname
      aiopscore.device.id:
        sourceName: id
      aiopscore.device.instance_tenant_id:
        sourceName: instanceTenantId
      aiopscore.device.instance_uuid:
        sourceName: instanceUuid
      aiopscore.device.interface_count:
        sourceName: interfaceCount
      aiopscore.device.inventory_status_detail:
        sourceName: inventoryStatusDetail
      aiopscore.device.last_update_time:
        sourceName: lastUpdateTime
      aiopscore.device.last_updated:
        sourceName: lastUpdated
      aiopscore.device.line_card_count:
        sourceName: lineCardCount
      aiopscore.device.line_card_id:
        sourceName: lineCardId
      aiopscore.device.location:
        sourceName: location
      aiopscore.device.location_name:
        sourceName: locationName
      aiopscore.device.mac_address:
        sourceName: macAddress
      aiopscore.device.management_ip_address:
        sourceName: managementIpAddress
      aiopscore.device.memory_size:
        sourceName: memorySize
      aiopscore.device.platform_id:
        sourceName: platformId
      aiopscore.device.reachability_failure_reason:
        sourceName: reachabilityFailureReason
      aiopscore.device.reachability_status:
        sourceName: reachabilityStatus
      aiopscore.device.role:
        sourceName: role
      aiopscore.device.role_source:
        sourceName: roleSource
      aiopscore.device.serial_number:
        sourceName: serialNumber
      aiopscore.device.series:
        sourceName: series
      aiopscore.device.snmp_contact:
        sourceName: snmpContact
      aiopscore.device.snmp_location:
        sourceName: snmpLocation
      aiopscore.device.software_type:
        sourceName: softwareType
      aiopscore.device.software_version:
        sourceName: softwareVersion
      aiopscore.device.tag_count:
        sourceName: tagCount
      aiopscore.device.tunnel_udp_port:
        sourceName: tunnelUdpPort
      aiopscore.device.device_type:
        sourceName: type
      aiopscore.device.up_time:
        sourceName: upTime
      aiopscore.device.waas_device_mode:
        sourceName: waasDeviceMode

    metrics:
      aiopscore:overall_health:
        sourceName: overallHealth
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:memory_score:
        sourceName: memoryScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cpu_score:
        sourceName: cpuScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:noise_score:
        sourceName: noiseScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:utilization_score:
        sourceName: utilizationScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:air_quality_score:
        sourceName: airQualityScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:interference_score:
        sourceName: interferenceScore
        otelType: gauge
      aiopscore:wqe_score:
        sourceName: wqeScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:free_mbuf_score:
        sourceName: freeMbufScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:packet_pool_score:
        sourceName: packetPoolScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:free_timer_score:
        sourceName: freeTimerScore
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      aiopscore.source.type: device

  - name: dnac_device
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: hostname
      aiopscore.dnac_device.cluster_name:
        sourceName: cluster_name
      aiopscore.dnac_device.dnac_cluster:
        sourceName: cluster_name
      aiopscore.dnac_device.ap_manager_interface_ip:
        sourceName: apManagerInterfaceIp
      aiopscore.dnac_device.associated_wlc_ip:
        sourceName: associatedWlcIp
      aiopscore.dnac_device.boot_date_time:
        sourceName: bootDateTime
      aiopscore.dnac_device.collection_interval:
        sourceName: collectionInterval
      aiopscore.dnac_device.collection_status:
        sourceName: collectionStatus
      aiopscore.dnac_device.error_code:
        sourceName: errorCode
      aiopscore.dnac_device.error_description:
        sourceName: errorDescription
      aiopscore.dnac_device.family:
        sourceName: family
      aiopscore.dnac_device.hostname:
        sourceName: hostname
      aiopscore.dnac_device.id:
        sourceName: id
      aiopscore.dnac_device.instance_tenant_id:
        sourceName: instanceTenantId
      aiopscore.dnac_device.instance_uuid:
        sourceName: instanceUuid
      aiopscore.dnac_device.interface_count:
        sourceName: interfaceCount
      aiopscore.dnac_device.inventory_status_detail:
        sourceName: inventoryStatusDetail
      aiopscore.dnac_device.last_update_time:
        sourceName: lastUpdateTime
      aiopscore.dnac_device.last_updated:
        sourceName: lastUpdated
      aiopscore.dnac_device.line_card_count:
        sourceName: lineCardCount
      aiopscore.dnac_device.line_card_id:
        sourceName: lineCardId
      aiopscore.dnac_device.location:
        sourceName: location
      aiopscore.dnac_device.location_name:
        sourceName: locationName
      aiopscore.dnac_device.mac_address:
        sourceName: macAddress
      aiopscore.dnac_device.management_ip_address:
        sourceName: managementIpAddress
      aiopscore.dnac_device.memory_size:
        sourceName: memorySize
      aiopscore.dnac_device.platform_id:
        sourceName: platformId
      aiopscore.dnac_device.reachability_failure_reason:
        sourceName: reachabilityFailureReason
      aiopscore.dnac_device.reachability_status:
        sourceName: reachabilityStatus
      aiopscore.dnac_device.role:
        sourceName: role
      aiopscore.dnac_device.role_source:
        sourceName: roleSource
      aiopscore.dnac_device.serial_number:
        sourceName: serialNumber
      aiopscore.dnac_device.series:
        sourceName: series
      aiopscore.dnac_device.snmp_contact:
        sourceName: snmpContact
      aiopscore.dnac_device.snmp_location:
        sourceName: snmpLocation
      aiopscore.dnac_device.software_type:
        sourceName: softwareType
      aiopscore.dnac_device.software_version:
        sourceName: softwareVersion
      aiopscore.dnac_device.tag_count:
        sourceName: tagCount
      aiopscore.dnac_device.tunnel_udp_port:
        sourceName: tunnelUdpPort
      aiopscore.dnac_device.device_type:
        sourceName: type
      aiopscore.dnac_device.up_time:
        sourceName: upTime
      aiopscore.dnac_device.waas_device_mode:
        sourceName: waasDeviceMode

    metrics:
      aiopscore:overall_health:
        sourceName: overallHealth
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:memory_score:
        sourceName: memoryScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cpu_score:
        sourceName: cpuScore
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      aiopscore.source.type: dnac_device

  - name: app
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: cluster_name
      aiopscore.app.name:
        sourceName: applicationName
      aiopscore.app.cluster_name:
        sourceName: cluster_name
      aiopscore.app.business_relevance:
        sourceName: businessRelevance
      aiopscore.app.traffic_class:
        sourceName: trafficClass
      aiopscore.app.exporter_ip_address:
        sourceName: exporterIpAddress
      aiopscore.app.exporter_ame:
        sourceName: exporterName
      aiopscore.app.exporter_uuid:
        sourceName: exporterUUID
      aiopscore.app.exporter_family:
        sourceName: exporterFamily
      aiopscore.app.client_name:
        sourceName: clientName
      aiopscore.app.client_ip:
        sourceName: clientIp
      aiopscore.app.location:
        sourceName: location
      aiopscore.app.operating_system:
        sourceName: operatingSystem
      aiopscore.app.device_type:
        sourceName: deviceType
      aiopscore.app.client_mac_address:
        sourceName: clientMacAddress
      aiopscore.app.issue_id:
        sourceName: issueId
      aiopscore.app.issue_name:
        sourceName: issueName
      aiopscore.app.application:
        sourceName: application
      aiopscore.app.severity:
        sourceName: severity
      aiopscore.app.summary:
        sourceName: summary
      aiopscore.app.root_cause:
        sourceName: rootCause
      aiopscore.app.timestamp:
        sourceName: timestamp
      aiopscore.app.priority:
        sourceName: priority

    metrics:
      aiopscore:health:
        sourceName: healthScore
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:usage_bytes:
        sourceName: usage
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:average_throughput:
        sourceName: averageThroughput
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:occurrences:
        sourceName: occurrences
        otelType: gauge
        unit: double
        isDouble: true

      aiopscore:business_relevant_applications_count:
        sourceName: totalBusinessRelevantCount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_app_usage:
        sourceName: businessRelevantAppUsageSize
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_average_latency:
        sourceName: businessRelevantAverageLatency
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:active_exporters_count:
        sourceName: activeExporters
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:netflow_byte_count:
        sourceName: netflowByteCount
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      aiopscore.source.type: app

  - name: dnac_cluster
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: cluster_name
      aiopscore.dnac_cluster.cluster_name:
        sourceName: cluster_name
      aiopscore.dnac_cluster.name:
        sourceName: cluster_name
      aiopscore.dnac_cluster.url:
        sourceName: url

    metrics:
      aiopscore:availability:
        sourceName: availability
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:coverage:
        sourceName: coverage
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:onboarding_attempts:
        sourceName: onboarding_attempts
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:onboarding_duration:
        sourceName: onboarding_duration
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:roaming_attempts:
        sourceName: roaming_attempts
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:roaming_duration:
        sourceName: roaming_duration
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:connection_speed:
        sourceName: connection_speed
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicetotalcount:
        sourceName: devicetotalcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicegoodcount:
        sourceName: devicegoodcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicefaircount:
        sourceName: devicefaircount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicepoorcount:
        sourceName: devicepoorcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicenohealthcount:
        sourceName: devicenohealthcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcupcount:
        sourceName: ap_dvcupcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcdowncount:
        sourceName: ap_dvcdowncount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcnodatacount:
        sourceName: ap_dvcnodatacount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcdownandnodatacount:
        sourceName: ap_dvcdownandnodatacount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaaservercount:
        sourceName: aaaservercount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaasuccessfulcount:
        sourceName: aaasuccessfulcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaasuccessfulpercent:
        sourceName: aaasuccessfulpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaafailedcount:
        sourceName: aaafailedcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaafailedpercent:
        sourceName: aaafailedpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnsservercount:
        sourceName: dnsservercount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnssuccessfulcount:
        sourceName: dnssuccessfulcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnssuccessfulpercent:
        sourceName: dnssuccessfulpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnsfailedcount:
        sourceName: dnsfailedcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnsfailedpercent:
        sourceName: dnsfailedpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpservercount:
        sourceName: dhcpservercount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpsuccessfulcount:
        sourceName: dhcpsuccessfulcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpsuccessfulpercent:
        sourceName: dhcpsuccessfulpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpfailedcount:
        sourceName: dhcpfailedcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpfailedpercent:
        sourceName: dhcpfailedpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cl_healthwired:
        sourceName: cl_healthwired
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cl_healthwireless:
        sourceName: cl_healthwireless
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_applications_count:
        sourceName: business_relevant_applications_count
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_app_usage:
        sourceName: business_relevant_app_usage
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_average_latency:
        sourceName: business_relevant_average_latency
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:active_exporters_count:
        sourceName: active_exporters_count
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:netflow_byte_count:
        sourceName: netflow_byte_count
        otelType: gauge
        unit: double
        isDouble: true

    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      aiopscore.source.type: dnac_cluster

  - name: site
    attributes: # add them as it is
      aiopscore.display_name:
        sourceName: siteName
      aiopscore.site.cluster_name:
        sourceName: cluster_name
      aiopscore.site.id:
        sourceName: siteId
      aiopscore.site.name:
        sourceName: siteName
      aiopscore.site.parent_id:
        sourceName: parentSiteId
      aiopscore.site.parent_site_name:
        sourceName: parentSiteName
      aiopscore.site.site_type:
        sourceName: siteType

    metrics:
      aiopscore:coverage:
        sourceName: coverage
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:onboarding_attempts:
        sourceName: onboarding_attempts
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:onboarding_duration:
        sourceName: onboarding_duration
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:roaming_attempts:
        sourceName: roaming_attempts
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:roaming_duration:
        sourceName: roaming_duration
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:connection_speed:
        sourceName: connection_speed
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicetotalcount:
        sourceName: devicetotalcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicegoodcount:
        sourceName: devicegoodcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicefaircount:
        sourceName: devicefaircount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicepoorcount:
        sourceName: devicepoorcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:devicenohealthcount:
        sourceName: devicenohealthcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcupcount:
        sourceName: ap_dvcupcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcdowncount:
        sourceName: ap_dvcdowncount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcnodatacount:
        sourceName: ap_dvcnodatacount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:ap_dvcdownandnodatacount:
        sourceName: ap_dvcdownandnodatacount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaaservercount:
        sourceName: aaaservercount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaasuccessfulcount:
        sourceName: aaasuccessfulcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaasuccessfulpercent:
        sourceName: aaasuccessfulpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaafailedcount:
        sourceName: aaafailedcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:aaafailedpercent:
        sourceName: aaafailedpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnsservercount:
        sourceName: dnsservercount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnssuccessfulcount:
        sourceName: dnssuccessfulcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnssuccessfulpercent:
        sourceName: dnssuccessfulpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnsfailedcount:
        sourceName: dnsfailedcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dnsfailedpercent:
        sourceName: dnsfailedpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpservercount:
        sourceName: dhcpservercount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpsuccessfulcount:
        sourceName: dhcpsuccessfulcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpsuccessfulpercent:
        sourceName: dhcpsuccessfulpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpfailedcount:
        sourceName: dhcpfailedcount
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:dhcpfailedpercent:
        sourceName: dhcpfailedpercent
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cl_healthwired:
        sourceName: cl_healthwired
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:cl_healthwireless:
        sourceName: cl_healthwireless
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_applications_count:
        sourceName: business_relevant_applications_count
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_app_usage:
        sourceName: business_relevant_app_usage
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:business_relevant_average_latency:
        sourceName: business_relevant_average_latency
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:active_exporters_count:
        sourceName: active_exporters_count
        otelType: gauge
        unit: double
        isDouble: true
      aiopscore:netflow_byte_count:
        sourceName: netflow_byte_count
        otelType: gauge
        unit: double
        isDouble: true


    tagging:
      namespace: aiopscore
      telemetry.sdk.name: aiops-fsoc-exporter
      aiopscore.source.type: site

  - name: spacedev300
    attributes: # add them as it is
      spacedev300.starship.name:
        sourceName: spacedev300.starship.name
      spacedev300.starship.registry:
        sourceName: spacedev300.starship.registry
      spacedev300.type:
        sourceName: spacedev300.type
    metrics:
      spacedev300:speed:
        sourceName: spacedev300:speed
        otelType: gauge
        unit: double
        isDouble: true
      spacedev300:earth_day:
        sourceName: spacedev300:earth_day
        otelType: gauge
        unit: long
        isDouble: false

    tagging:
      name_space: spacedev300
      telemetry.sdk.name: aiops-fsoc-exporter

YML


The content of the is docker-compose.yaml is as follows: 

version: '3'
services:
  aiops-event-exporter:
    image: appdynamics/aiops-webhook:latest
    hostname: aiops-event-exporter
    container_name: aiops-event-exporter
    volumes:
      - ./otel-exporter-config-local.yaml:/app/src/main/resources/otel-exporter-config-local.yaml
    ports:
      - "8083:8083"
    environment:
      - ZODIAC_FUNCTION_NAME=event-export
    entrypoint: "java --add-opens=java.base/java.lang=ALL-UNNAMED     --add-opens=java.base/java.lang.invoke=ALL-UNNAMED     --add-opens=java.base/java.lang.reflect=ALL-UNNAMED     --add-opens=java.base/java.io=ALL-UNNAMED     --add-opens=java.base/java.net=ALL-UNNAMED     --add-opens=java.base/java.nio=ALL-UNNAMED     --add-opens=java.base/java.util=ALL-UNNAMED     --add-opens=java.base/java.util.concurrent=ALL-UNNAMED     --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED     --add-opens=java.base/sun.nio.ch=ALL-UNNAMED     --add-opens=java.base/sun.nio.cs=ALL-UNNAMED     --add-opens=java.base/sun.security.action=ALL-UNNAMED     --add-opens=java.base/sun.util.calendar=ALL-UNNAMED     --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -jar -Dspring.profiles.active=prod /app/app.jar"
  aiops-metric-exporter:
    image: appdynamics/aiops-webhook:latest
    hostname: aiops-metric-exporter
    container_name: aiops-metric-exporter
    volumes:
      - ./otel-exporter-config-local.yaml:/app/src/main/resources/otel-exporter-config-local.yaml
    ports:
      - "8085:8085"
    environment:
      - ZODIAC_FUNCTION_NAME=metric-export
    entrypoint: "java --add-opens=java.base/java.lang=ALL-UNNAMED     --add-opens=java.base/java.lang.invoke=ALL-UNNAMED     --add-opens=java.base/java.lang.reflect=ALL-UNNAMED     --add-opens=java.base/java.io=ALL-UNNAMED     --add-opens=java.base/java.net=ALL-UNNAMED     --add-opens=java.base/java.nio=ALL-UNNAMED     --add-opens=java.base/java.util=ALL-UNNAMED     --add-opens=java.base/java.util.concurrent=ALL-UNNAMED     --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED     --add-opens=java.base/sun.nio.ch=ALL-UNNAMED     --add-opens=java.base/sun.nio.cs=ALL-UNNAMED     --add-opens=java.base/sun.security.action=ALL-UNNAMED     --add-opens=java.base/sun.util.calendar=ALL-UNNAMED     --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -jar -Dspring.profiles.active=prod /app/app.jar"
  aiops-dnac-collector:
    image: appdynamics/aiops-agt-dnacexporter:latest
    hostname: aiops-dnac-collector
    container_name: aiops-dnac-collector
    volumes:
      - ./dnac-agent.yml:/usr/src/app/config/agent.yml
    depends_on:
      - aiops-event-exporter
      - aiops-metric-exporter
    ports:
      - "9001:9001"
    environment:
      - NODE_TLS_REJECT_UNAUTHORIZED=1 #change the value to 0 for self-signed certificates for DNA Controller
networks:
  default:
    name: aiops-collector
YML

Configure Cisco DNA Center Agent and OTEL Exporter

Perform the following steps to configure DNA Center agent and OTel exporter on Docker containers:

  1. Login to the server where you want to install the agent.
  2. Install Docker Engine and Docker Compose on the server.
  3. Validate the Docker Engine version by running the following command:

    $sudo docker -v
    CODE
  4. Validate the Docker Compose version by running the following command:

    $sudo docker compose version
    CODE
  5. Create a directory with an appropriate name. For example, aiops-dnac.
  6. Create an YAML file and name it as docker-compose.yaml. Copy the content of the file from the section Cisco DNA Center Agent and OTel Exporter Files
  7. In the docker-compose.yaml file, verify that the Docker images are pointing to the latest builds.
  8. Create a sub-directory under the directory aiops-dnac and name it as config.
  9. In the sub-directory config, create two YAML files: dnac-agent.yaml and otel-exporter-config-local.yaml.
  10. Copy the content of the files from the section Cisco DNA Center Agent and OTel Exporter Files.
  11. Go to the dnac-agent.yaml file in the config folder. In the file, update the following properties to connect to your Cisco DNA Center and Kafka clusters:
    1. Environment (ENV) attribute. This is a mandatory attribute. The available values of this attribute are development and production. Specify the attribute value as production to collect events and metrics for all sites and devices in your network. If you specify development, the yaml file performs the basic Cisco DNA Center and Kafka connectivity and the agent collects events and metrics for one site with single device. The development attribute value can be used for testing.

      environment:
         ENV: production
      CODE


    2. Kafka connection attributes with brokers and topic details. The following attributes are required for ingestion site and device level events and metrics into Kafka.

      • BROKERS: Enter the Kafka brokers and their ports.

      • TOPIC: The topic for publishing messages is dnac_network.

        - name: kafka
          environment:
           BROKERS:
            - kafka-1:9092
            - kafka-2:9092
            - kafka-3:9092
           TOPIC: dnac_network
           SSL: false
           CLIENT_ID: kafka-nodejs-starter
        CODE


    3. Cisco DNA Center connection attributes with cluster and API access credentials. The following attributes are mandatory for making API calls to Cisco DNA Center cluster and fetch site and device level metrics and events:

      • DNAC_HOST: Enter hostname for your Cisco DNA Center cluster.
      • CLUSTER_NAME: Enter the name of the Cisco DNA Center Cluster. 
      • GLOBAL_SITE: Enter the Global Site ID for generating cluster level analytics using the Cisco DNA Center assurance API.

      • ROUTE: The route value is dnac_cluster

        - name: dnac
          environment:
           HOST: <Your hostname of DNA Center Cluster>
           CLUSTER: <Your cluster name of DNA Center>
           USER: <Your username for DNA Center Cluster>
           PASSWORD: ***********
           GLOBAL_SITE: <You global site ID>
           ROUTE: dnac_cluster
           DEFAULT_SITENAME: Global
        CODE


    4. Function level properties. The following attributes are mandatory to ingest site and device level metrics and events into Kafka:

      • LOCATION_TYPE: This attribute collects all the devices by building within a site and metrics.

      • KEYS: Comma separated attribute list. This list can be updated to add more fields for metrics.
      • INTERVAL: This value is the data collection schedule. The unit is milliseconds. You can update this value as per your requirement.

        - name: device
          INTERVAL: 900000
          environment:
           ROUTE: dnac_network
           TYPE: device
           LOCATION_TYPE: building
           KEYS: ['groupNameHierarchy','instanceUuid','instanceTenantId','apEthernetMacAddress','family','hostname','macAddress','reachabilityStatus','role','serialNumber','series','snmpLocation','softwareVersion','upTime','uptimeSeconds']
           SITE: SJC23
         - name: site
           INTERVAL: 900000
           siteAnalytics:
            ROUTE: site
            TYPE: site
            LOCATION_TYPE:
            KEYS:  ["coverageSlaPercentage","coverageMetSlaCount","coverageTotalCount","onboardingAttemptsSlaPercentage","onboardingAttemptsMetSlaCount","onboardingAttemptsTotalCount","roamingAttemptsSlaPercentage","roamingAttemptsMetSlaCount","roamingAttemptsTotalCount","onboardingDurationSlaPercentage","onboardingDurationMetSlaCount","onboardingDurationTotalCount","roamingDurationSlaPercentage","roamingDurationMetSlaCount","roamingDurationTotalCount","connectionSpeedSlaPercentage","connectionSpeedMetSlaCount","connectionSpeedTotalCount"]
         - name: issue
           INTERVAL: 300000
           environment:
            ROUTE: dnac_issue
            TYPE: issues
            TOPIC: raw-events
         - name: event
           INTERVAL: 300000
           environment:
            ROUTE: dnac_event
            TYPE: events
            TOPIC: raw-events
        CODE


  12. Go to the otel-exporter-config-local.yaml file in the config folder. In the file, update the following properties in the events and metrics sections to connect to your Kafka clusters and the Cisco Observability Platform:
    • source: Enter your Kafka Brokers and their ports from where the OTEL exporter will collect the data.

      For events:

      source:
          kafka:
            brokers:
            - "kafka-1:9092"
            - "kafka-1:9092"
            - "kafka-1:9092"
            protocol_version: 2.1.1
            topic: raw-events
            encoding: otlp_json
      CODE

      For metrics:

      source:
          kafka:
            brokers:
            - "kafka-1:9092"
            - "kafka-1:9092"
            - "kafka-1:9092"
            protocol_version: 2.1.1
            topic: raw-metrics
            encoding: otlp_json
      CODE


    • target: Enter the token URL, client ID, and client secret of your Cisco Observability Platform tenant. See Create Service Principals.

      For events:

      target:
           http:
             scheme: https
             port:
             hostName: XXXXXXXXXXXXXXXXXXXXXXX
             path: data/v1/logs
             isSecure: true
             auth:
               type: oauth
               attributes:
                 tokenUrl: https://XXXXXXXXXXXXXXXXXXXXXXX/auth/XXXXXXXXXXXXXXXXXXXXXXX/default/oauth2/token
                 clientId: XXXXXXXXXXXXXXXXXXXXXXX
                 clientSecret: XXXXXXXXXXXXXXXXXXXXXXX
                 grantType: client_credentials
      CODE


      For metrics:

      target:
           http:
             scheme: https
             port:
             hostName: XXXXXXXXXXXXXXXXXXXXXXX
             path: data/v1/metrics
             isSecure: true
             auth:
               type: oauth
               attributes:
                 tokenUrl: https://XXXXXXXXXXXXXXXXXXXXXXX/auth/XXXXXXXXXXXXXXXXXXXXXXX/default/oauth2/token
                 clientId: XXXXXXXXXXXXXXXXXXXXXXX
                 clientSecret: XXXXXXXXXXXXXXXXXXXXXXX
                 grantType: client_credentials
      CODE



  13. Execute the following Docker Compose command to create and start the container services. It creates three container services: aiops-event-exporter, aiops-metric-exporter, and aiops-dnac-collector.

    $sudo docker compose up -d
    CODE
  14. Run the following Docker command to list the running Docker container services.

    $sudo docker ps
    
    CODE

Cisco DNA Center Data Validation

After installing the Cisco DNA Center agent, you need to validate the metrics and events that are ingested into the Cisco Observability Platform.  You can validate the data by using either Query Builder or fsoc.

Data Validation using Query Builder 

You can validate the data by using Query Builder. Open Query Builder and enter the following query:

fetch id, attributes(dnac), attributes(dnac.device.family), metrics(dnac:overall_health) from entities(dnac:device) since -1h
CODE

Data Validation using FSO CLI (FSOC) 

 This section describes the specifications required to install Cisco Observability Platform CLI for executing the fsoc queries to validate the metrics and events.

Pre-requisites

Ensure that you meet the following requirements:

  1. You have installed fsoc on your device. See Install and Configure FSOC.
  2. You have configured a profile in fsoc.


To learn about UQL queries, see the Unified Query Language User Guide.

Data Validation

Do the following:

  1. Run the following command to setup the fsoc profile by using the service principals provided by your Company administrator:

    $sudo fsoc config set --profile <name-of-your-profile> --secret-file <name-of-secret-file>
    CODE

    Example:


    $sudo fsoc config set --profile demo --secret-file dnac-access.json
    CODE
  2. Run the following command to use the profile:

    $sudo fsoc config use --profile <name-of-your-profile>
    CODE

    Example:


    $sudo fsoc config use --profile demo
    CODE
  3. Run the following command to check the subscription status of your dnac solution:

    $sudo fsoc solution status dnac
    CODE


    Sample response:

    Platform API call (GET /objstore/v1beta/objects/extensibility:solutionRelease?order=desc&filter=data.solutionName+eq+%22dnac%22&max=1)
    ✓ Platform API call (GET /objstore/v1beta/objects/extensibility:solutionInstall?order=desc&filter=data.solutionName+eq+%22dnac%22&max=1)
                   Solution Name: dnac
         Solution Upload Version: 0.0.11
                Upload Timestamp: 2023-08-24T21:04:42.591Z
        Solution Install Version: 0.0.1
    Solution Install Successful?: true
           Solution Install Time: 2023-08-24T21:04:44.868Z
        Solution Install Message:
    CODE



  4. Run the UQL queries to validate the Cisco DNA Center data. For example:

    $sudo fsoc uql "fetch id, attributes(dnac), attributes(dnac.device.family), metrics(dnac:overall_health) from entities(dnac:device) since -1h"
    CODE


    Sample response:

    id                                       | dnac      | dnac_device_family      | metrics                                                    
                                             |           |                         | source              | metrics                              
                                             |           |                         |                     | timestamp                     | value
    =============================================================================================================================================
     dnac:device:EnkkZ3ofOuaimBlxYZoLgw      |           | Routers                 | dnac-fsoc-exporter  | 2023-09-01 12:50:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 12:57:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:04:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:10:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:17:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:24:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:31:00 +0000 UTC | 12   
    -----------------------------------------+-----------+-------------------------+---------------------+-------------------------------+-------
     dnac:device:w6m3CsB6PA+KLhppoUTx+g      |           | Switches and Hubs       | dnac-fsoc-exporter  | 2023-09-01 12:50:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 12:57:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:04:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:11:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:17:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:25:00 +0000 UTC | 12   
                                             |           |                         |                     | 2023-09-01 13:31:00 +0000 UTC | 12   
    -----------------------------------------+-----------+-------------------------+---------------------+-------------------------------+-------
    CODE

Next Steps