WMI tutorial - unified analysis
Unified analysis pages are windows into performance analysis and troubleshooting for this newly monitored technology.
They offer the possibility to eliminate further dashboarding or ad-hoc chart building. The screens
section will define the details to be displayed on each entity's page as well as charts and lists of other related entities for quick drilldowns.
Unified analysis detailed page
The details page is organized into staticContent
and a layout
for dynamic content that comprises cards
(charts and lists).
staticContent
showProblems
- Show a panel for any Problems about this entityshowProperties
- Show the Properties and tags sectionshowTags
- Show the tags applied to this entityshowGlobalFilter
- Show the global filtering barshowAddTag
- Show the Add tag button
The layout
consists of different cards defined in the chartsCards
and entitiesListCards
subsections.
Charts card
A chart card is a section of the screen that displays charts. All possible charts are defined in the card, and a number of them can be displayed at the same time on the screen. The others are available from the dropdown list above the chart.
Charts cards rely on metric selectors to correctly display metrics.
Simple chart card example:
1chartsCards:2 - key: "host-cpu-metrics"3 displayName: "Host CPU"4 numberOfVisibleCharts: 25 charts:6 - displayName: "Idle CPU"7 metrics:8 - metricSelector: "custom.demo.host-observability.host.cpu.time.idle:SplitBy()"9 - displayName: "User CPU"10 metrics:11 - metricSelector: "custom.demo.host-observability.host.cpu.time.user:SplitBy()"
Entity list
An entity list is a list of entities that are somehow related to the currently viewed entity. Additional metrics can be charted in the details of each returned entity and will show as a single value in the list view.
Entity lists rely on entity selectors to correctly list related entities.
Simple entity list example:
1entitiesListCards:2 - key: "nic-list"3 displayName: "Network Interfaces"4 entitySelectorTemplate: "type(wmi:generic_network_device),fromRelationships.runsOn($(entityConditions)),wmi_network_type(Interface)"5 displayCharts: false6 displayIcons: true7 enableDetailsExpandability: true
$(entityConditions)
is a function that automatically maps to the currently viewed entity. This is mandatory for entity selectors used in the extension.
The properties card
The propertiesCard
of an entity can also be modified to include additional properties or hide unnecessary ones. Properties are extracted from entity attributes (when type is ATTRIBUTE
) or through an entity selector (when type is RELATION
).
Define unified pages for your extension
- Add the
screens
section to yourextension.yaml
using the template below. Customize the details page settings for both the Generic Host and the Generic Network Device entity types.
Use charts cards to display all the metrics of each entity.
Add entity list cards so that a Generic Host can list out all Network Adapters and Interfaces running on it.
Add a relation based property so that a Generic Network Device displays what Generic Host it runs on.
Package and upload a new version of your extension.
Validate your screens are showing up as expected.
1screens:2 - entityType: wmi:generic_host3 detailsSettings:4 staticContent:5 showProblems: true6 showProperties: true7 showTags: true8 showGlobalFilter: true9 showAddTag: true10 layout:11 autoGenerate: false12 cards:13 - type: "CHART_GROUP"14 key: "wmi_host-chart-metrics"15 - type: "ENTITIES_LIST"16 key: "wmi_host-list-network_interfaces"17 - type: "ENTITIES_LIST"18 key: "wmi_host-list-network_adapters"19 chartsCards:20 - key: "wmi_host-chart-metrics"21 displayName: "Generic Host Metrics"22 numberOfVisibleCharts: 223 charts:24 - displayName: "CPU Usage Breakdown"25 visualization:26 themeColor: BLUE27 seriesType: AREA28 metrics:29 - metricSelector: "custom.demo.host-observability.host.cpu.time.idle:SplitBy()"30 - metricSelector: "custom.demo.host-observability.host.cpu.time.user:SplitBy()"31 - metricSelector: "custom.demo.host-observability.host.cpu.time.processor:SplitBy()"32 - displayName: "CPU User"33 visualization:34 themeColor: BLUE35 seriesType: LINE36 metrics:37 - metricSelector: "custom.demo.host-observability.host.cpu.time.user:SplitBy()"38 - displayName: "CPU Idle"39 visualization:40 themeColor: BLUE41 seriesType: LINE42 metrics:43 - metricSelector: "custom.demo.host-observability.host.cpu.time.idle:SplitBy()"44 - displayName: "CPU Used"45 visualization:46 themeColor: BLUE47 seriesType: LINE48 metrics:49 - metricSelector: "custom.demo.host-observability.host.cpu.time.processor:SplitBy()"50 entitiesListCards:51 - key: "wmi_host-list-network_interfaces"52 displayName: "Network Interfaces"53 entitySelectorTemplate: "type(wmi:generic_network_device),fromRelationships.runsOn($(entityConditions)),wmi_network_type(Interface)"54 pageSize: 555 displayCharts: false56 displayIcons: true57 enableDetailsExpandability: true58 numberOfVisibleCharts: 159 charts:60 - displayName: "Traffic"61 visualization:62 themeColor: BLUE63 seriesType: AREA64 metrics:65 - metricSelector: "custom.demo.host-observability.network.bytes.sent.persec:SplitBy()"66 - metricSelector: "custom.demo.host-observability.network.bytes.received.persec:SplitBy()"67 - key: "wmi_host-list-network_adapters"68 displayName: "Network Adapters"69 entitySelectorTemplate: "type(wmi:generic_network_device),fromRelationships.runsOn($(entityConditions)),wmi_network_type(Adapter)"70 pageSize: 571 displayCharts: false72 displayIcons: true73 enableDetailsExpandability: true74 numberOfVisibleCharts: 175 charts:76 - displayName: "Traffic"77 visualization:78 themeColor: BLUE79 seriesType: AREA80 metrics:81 - metricSelector: "custom.demo.host-observability.network.bytes.sent.persec:SplitBy()"82 - metricSelector: "custom.demo.host-observability.network.bytes.received.persec:SplitBy()"83 - entityType: wmi:generic_network_device84 propertiesCard:85 properties:86 - type: ATTRIBUTE87 attribute:88 key: wmi_network_name89 displayName: Name90 - type: ATTRIBUTE91 attribute:92 key: wmi_network_type93 displayName: Type94 - type: RELATION95 relation:96 entitySelectorTemplate: type(wmi:generic_host),toRelationships.runsOn($(entityConditions))97 displayName: Host98 detailsSettings:99 staticContent:100 showProblems: true101 showProperties: true102 showTags: true103 showGlobalFilter: true104 showAddTag: true105 layout:106 autoGenerate: false107 cards:108 - type: "CHART_GROUP"109 key: "wmi_network_device-chart-traffic"110 chartsCards:111 - key: "wmi_network_device-chart-traffic"112 displayName: "Traffic"113 numberOfVisibleCharts: 2114 charts:115 - displayName: "Traffic breakdown"116 visualization:117 themeColor: BLUE118 seriesType: AREA119 metrics:120 - metricSelector: "custom.demo.host-observability.network.bytes.persec:SplitBy()"121 - metricSelector: "custom.demo.host-observability.network.bytes.sent.persec:SplitBy()"122 - metricSelector: "custom.demo.host-observability.network.bytes.received.persec:SplitBy()"123 - displayName: "Bytes sent"124 visualization:125 themeColor: BLUE126 seriesType: LINE127 metrics:128 - metricSelector: "custom.demo.host-observability.network.bytes.sent.persec:SplitBy()"129 - displayName: "Bytes received"130 visualization:131 themeColor: BLUE132 seriesType: LINE133 metrics:134 - metricSelector: "custom.demo.host-observability.network.bytes.sent.persec:SplitBy()"135 - displayName: "Bytes"136 visualization:137 themeColor: BLUE138 seriesType: LINE139 metrics:140 - metricSelector: "custom.demo.host-observability.network.bytes.sent.persec:SplitBy()"
Results
Your customized unified analysis pages are displayed and populated as expected.