Homeโ€บ๐Ÿ“ก SNMP Extensionsโ€บModule 52 min read ยท 6/16

Topology: Entities & Relationships

Hands-on

What is Topology?

Topology turns your metrics into entities โ€” things you can click on in Dynatrace. A device entity, interface entities, sensor entities โ€” each with their own page.

๐Ÿ’ก Without topology, your metrics are just numbers. With topology, they become clickable entities in Smartscape with relationships, screens, and alerting.

Real-World Topology Scale

Extension                Entity Types  Relationships  Pattern
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
SNMP Generic Device      2             6              network:device + network:interface
Checkpoint Firewall      2             4              checkpoint:firewall + interface
F5 BIG-IP                15            20+            f5:instance, f5:pool, f5:pool:member, f5:virtualserver...
FortiGate (Python)       5             8              fortinet:fortigate, fortigate_vdom, interface, tunnel...
Juniper Networks         10            12+            juniper device, disk, FRU, routing engine, VLAN...

Naming convention: vendor:entity_type โ€” e.g. f5:pool, fortinet:fortigate_vdom, network:device.

Defining Entity Types (from snmp-generic-device)

topology:
  types:
    - name: network:device                    # vendor:entity_type convention
      displayName: Network device
      enabled: true
      rules:
        - idPattern: network_device_{device.address}  # Must be globally unique
          instanceNamePattern: "{sys.name}"            # Display name in UI
          iconPattern: host                            # host, network-interfaces, switch, cisco
          sources:
            - sourceType: Metrics
              condition: $prefix(com.dynatrace.extension.snmp-generic-device)
          requiredDimensions:                  # Entity only created when ALL present
            - key: sys.name
            - key: device.address
          attributes:                          # Entity properties visible in UI
            - key: dt.ip_addresses             # SPECIAL: enables IP lookup in Dynatrace
              pattern: "{device.address}"
              displayName: Device Address
            - key: dt.dns_names                # SPECIAL: enables DNS lookup
              pattern: "{device.name}"
            - key: dt.listen_ports             # SPECIAL: enables port display
              pattern: "{device.port}"
            - key: dt.security_context         # SPECIAL: enables ABAC filtering
              pattern: "{dt.security_context}"
            - key: devDescription              # Custom attribute
              pattern: "{sys.description}"
              displayName: Description

๐Ÿ’ก Special attributes: dt.ip_addresses, dt.dns_names, dt.listen_ports, and dt.security_context are magic keys that Dynatrace uses for IP resolution, DNS lookup, port display, and ABAC access control.

Topology: Device โ†’ Interfaces ๐Ÿ”ฒ my-ext:device ๐Ÿ”Œ GigabitEth0/1 ๐Ÿ”Œ GigabitEth0/2 ๐Ÿ”Œ TenGigEth1/1

Relationships

topology:
  relationships:
    - typeOfRelation: CHILD_OF
      fromType: my-ext:interface
      toType: my-ext:device
      sources:
        - sourceType: Metrics
          condition: $prefix(com.dynatrace.extension.my-ext.if)

โš ๏ธ The idPattern must be unique per entity instance. Use dimensions like {device.address} and {if.name} to guarantee uniqueness.

๐Ÿ›  Try it: Open the Smartscape app โ†’ look for custom entity types created by extensions (they appear as new node types in the graph). Try: fetch dt.entity.custom_device | fields entity.name, entity.type | limit 10 in a Notebook.