Host and process metrics including CPU, memory, disk, network, containers, and process-level telemetry. Monitor infrastructure health and resource utilization.
49
52%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./skills/dt-obs-hosts/SKILL.mdMonitor and manage host and process infrastructure including CPU, memory, disk, network, and technology inventory.
Use this skill when the user needs to:
dt.host.cpu.*, dt.host.memory.*, dt.host.disk.*, dt.host.net.*dt.process.cpu.*, dt.process.memory.*, dt.process.io.*, dt.process.network.*dt.cost.costcenter, dt.cost.productDiscover hosts, classify by OS/cloud, inventory resources.
smartscapeNodes "HOST"
| fieldsAdd os.type, cloud.provider, host.logical.cpu.cores, host.physical.memory
| summarize host_count = count(), by: {os.type, cloud.provider}
| sort host_count descOS Types: LINUX, WINDOWS, AIX, SOLARIS, ZOS
→ For cloud-specific attributes, see references/inventory-discovery.md
Monitor CPU, memory, disk, network across hosts.
timeseries {
cpu = avg(dt.host.cpu.usage),
memory = avg(dt.host.memory.usage),
disk = avg(dt.host.disk.used.percent)
}, by: {dt.smartscape.host}
| fieldsAdd host_name = getNodeName(dt.smartscape.host)
| filter arrayAvg(cpu) > 80 or arrayAvg(memory) > 80
| sort arrayAvg(cpu) descHigh utilization threshold: 80% warning, 90% critical
→ For detailed CPU analysis, see references/host-metrics.md
→ For memory breakdown, see references/host-metrics.md
Identify top resource consumers at process level.
timeseries {
cpu = avg(dt.process.cpu.usage),
memory = avg(dt.process.memory.usage)
}, by: {dt.smartscape.process}
| fieldsAdd process_name = getNodeName(dt.smartscape.process)
| filter arrayAvg(cpu) > 50
| sort arrayAvg(cpu) desc
| limit 20→ For process I/O analysis, see references/process-monitoring.md
→ For process network metrics, see references/process-monitoring.md
Discover and track software technologies and versions.
smartscapeNodes "PROCESS"
| fieldsAdd process.software_technologies
| expand tech = process.software_technologies
| fieldsAdd tech_type = tech[type], tech_version = tech[version]
| summarize process_count = count(), by: {tech_type, tech_version}
| sort process_count descCommon Technologies: Java, Node.js, Python, .NET, databases, web servers, messaging systems
→ For version compliance checks, see references/inventory-discovery.md
Map listening ports to services for security and inventory.
smartscapeNodes "PROCESS"
| fieldsAdd process.listen_ports, dt.process_group.detected_name
| filter isNotNull(process.listen_ports) and arraySize(process.listen_ports) > 0
| expand port = process.listen_ports
| summarize process_count = count(), by: {port, dt.process_group.detected_name}
| sort toLong(port) asc
| limit 50Well-known ports: 80 (HTTP), 443 (HTTPS), 22 (SSH), 3306 (MySQL), 5432 (PostgreSQL)
→ For comprehensive port mapping, see references/inventory-discovery.md
Track container distribution and K8s workload types.
smartscapeNodes "CONTAINER"
| fieldsAdd k8s.cluster.name, k8s.namespace.name, k8s.workload.kind
| summarize container_count = count(), by: {k8s.cluster.name, k8s.workload.kind}
| sort k8s.cluster.name, container_count descWorkload Types: deployment, daemonset, statefulset, job, cronjob
Note: Container image names/versions NOT available in smartscape.
→ For K8s version tracking, see references/container-monitoring.md
→ For container lifecycle, see references/container-monitoring.md
Calculate infrastructure costs by cost center.
smartscapeNodes "HOST"
| fieldsAdd dt.cost.costcenter, host.logical.cpu.cores, host.physical.memory
| filter isNotNull(dt.cost.costcenter)
| fieldsAdd memory_gb = toDouble(host.physical.memory) / 1024 / 1024 / 1024
| summarize
host_count = count(),
total_cores = sum(toLong(host.logical.cpu.cores)),
total_memory_gb = sum(memory_gb),
by: {dt.cost.costcenter}
| sort total_cores desc→ For product-level cost tracking, see references/inventory-discovery.md
Correlate host and process metrics for cross-layer analysis.
timeseries {
host_cpu = avg(dt.host.cpu.usage),
host_memory = avg(dt.host.memory.usage),
process_cpu = avg(dt.process.cpu.usage)
}, by: {dt.smartscape.host, dt.smartscape.process}
| fieldsAdd
host_name = getNodeName(dt.smartscape.host),
process_name = getNodeName(dt.smartscape.process)
| filter arrayAvg(host_cpu) > 70
| sort arrayAvg(host_cpu) descHealth scoring: Critical if any resource >90%, warning if >80%
→ For multi-resource saturation detection, see references/host-metrics.md
Use smartscapeNodes to discover and classify entities.
smartscapeNodes "HOST"
| fieldsAdd <attributes>
| filter <conditions>
| summarize <aggregations>Use timeseries to analyze metrics over time.
timeseries metric = avg(dt.host.<metric>), by: {dt.smartscape.host}
| fieldsAdd <calculations>
| filter <thresholds>Correlate host and process metrics.
timeseries {
host_cpu = avg(dt.host.cpu.usage),
process_cpu = avg(dt.process.cpu.usage)
}, by: {dt.smartscape.host, dt.smartscape.process}Enrich data with entity attributes. After lookup, reference fields with lookup. prefix.
timeseries cpu = avg(dt.host.cpu.usage), by: {dt.smartscape.host}
| lookup [
smartscapeNodes HOST
| fields id, cpuCores, memoryTotal
], sourceField:dt.smartscape.host, lookupField:id
| fieldsAdd cores = lookup.cpuCores, mem_gb = lookup.memoryTotal / 1024 / 1024 / 1024tags field is NOT populated in smartscape queriestags:azure[*], tags:environmenthost.custom.metadata[*]tags:azure[dt_owner_team], tags:azure[dt_cloudcost_capability]tags:environmenthost.custom.metadata[OperatorVersion], host.custom.metadata[Cluster]dt.cost.costcenter, dt.cost.product→ For complete tag reference, see references/inventory-discovery.md
cloud.provider == "aws"aws.region, aws.availability_zone, aws.account.idaws.resource.id, aws.resource.nameaws.state (running, stopped, terminated)cloud.provider == "azure"azure.location, azure.subscription, azure.resource.groupazure.status, azure.provisioning_stateazure.resource.sku.name (VM size)k8s.cluster.name, k8s.cluster.uidk8s.namespace.name, k8s.node.name, k8s.pod.namek8s.workload.name, k8s.workload.kind→ For multi-cloud analysis, see references/inventory-discovery.md
max() for resource limitsavg() for utilization trends| limit Ntags field NOT populated (use specific tag namespaces)dt.host.cpu.iowait available on Linux onlygetNodeName() to get human-readable names/ 1024 / 1024 / 1024round(value, decimals: 1)isNotNull() checks before array operationsThis skill uses progressive disclosure. Start here for 80% of use cases. Load reference files for detailed specifications when needed.
4991356
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.