关于 dt-obs-hosts
dt-obs-hosts 是用于监控和管理主机及进程基础设施的 Skill,通过 Dynatrace DQL 查询资源指标、技术清单和成本信息。它也涵盖 OneAgent 清单、容器与 Kubernetes 监控,以及面向分析工具的时序查询准备。
主要功能
- 01盘点主机、操作系统和云信息
- 02监控主机与进程资源使用情况
- 03发现技术栈、版本和监听端口
- 04分析成本归属与元数据完整性
- 05查询 OneAgent 模式和版本
适用场景
- 01定位 CPU 或内存使用率较高的主机与进程
- 02识别技术版本并规划升级
- 03按成本中心汇总基础设施资源
- 04查找监听 SSH 等端口的进程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dynatrace/ dynatrace-for-ai --skill dt-obs-hosts安装后在 Claude Code 中输入/dt-obs-hosts确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/container-monitoring.mdhost-metrics.mdinventory-discovery.mdprocess-monitoring.md详细介绍
基础设施主机技能
监控和管理主机与进程基础设施,包括 CPU、内存、磁盘、网络和技术清单。
何时使用此技能
当用户需要以下操作时,请使用此技能:
- 清单:“显示 AWS us-east-1 中的所有 Linux 主机”
- Agent 清单:“哪些主机运行 FULL_STACK、INFRASTRUCTURE 或 DISCOVERY 模式?”/“显示 OneAgent 版本分布”
- 监控:“哪些主机的 CPU 使用率较高?”
- 故障排查:“哪些进程占用的内存最多?”
- 发现:“生产环境中运行着哪些数据库?”
- 规划:“跟踪 Kubernetes 版本分布,以便规划升级”
- 成本:“按成本中心计算基础设施成本”
- 安全:“查找所有正在监听 22 端口的进程”
- 合规:“识别运行 EOL Java 版本的主机”
- 质量:“检查 AWS 主机的数据完整性”
- 优化:“根据利用率查找适合调整规格的对象”
**需要跨数据源联接:**如果查询必须将主机数据与日志或其他遥测数据源结合(例如,“显示 Linux 主机的日志及其 IP 地址”),请在编写查询前也阅读
dt-dql-essentials/references/smartscape-topology-navigation.md。
核心概念
实体
- HOST - 物理或虚拟机(云端或本地)
- PROCESS - 正在运行的进程和进程组
- CONTAINER - Kubernetes 容器
- NETWORK_INTERFACE - 主机网络接口
- DISK - 主机磁盘卷
指标类别
- 主机指标 -
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.product - 质量 - 元数据完整性、版本合规性
警报阈值
- **CPU/内存/磁盘:**80% 警告,90% 严重
- 网络:>70% 为高,>85% 为饱和
- 磁盘延迟:>20ms 表示瓶颈
- **网络错误:**丢弃率 >1%,错误率 >0.1%
- 交换空间:>30% 警告,>50% 严重
关键工作流
1. 主机发现与分类
发现主机,按操作系统/云环境分类,并盘点资源。
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 desc
操作系统类型:LINUX、WINDOWS、AIX、SOLARIS、ZOS
→ 有关云环境专属属性,请参阅 references/inventory-discovery.md
2. 资源利用率监控
监控各主机的 CPU、内存、磁盘和网络。
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) desc
**高利用率阈值:**80% 警告,90% 严重
关键 CPU 指标:
dt.host.cpu.usage— CPU 总利用率(0-100%)dt.host.cpu.idle— CPU 空闲时间(与利用率相反;适用于异常检测)dt.host.cpu.user— 用户模式下的 CPU 时间dt.host.cpu.system— 内核模式下的 CPU 时间dt.host.cpu.iowait— CPU 等待 I/O 的时间(仅限 Linux)
→ 有关详细的 CPU 分析,请参阅 references/host-metrics.md
→ 有关内存细分,请参阅 references/host-metrics.md
磁盘可用空间 — 查找可用磁盘空间最多/最少的主机
timeseries disk_used_pct = avg(dt.host.disk.used.percent), by: {dt.smartscape.host}
| fieldsAdd host_name = getNodeName(dt.smartscape.host)
| fieldsAdd avg_disk_used = arrayAvg(disk_used_pct),
free_pct = 100 - arrayAvg(disk_used_pct)
| sort free_pct desc
| limit 10
3. 进程资源分析
识别进程级别的资源消耗大户。
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
→ 有关进程 I/O 分析,请参阅 references/process-monitoring.md
→ 有关进程网络指标,请参阅 references/process-monitoring.md
4. 技术栈清单
发现并跟踪软件技术及其版本。
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 desc
**常见技术:**Java、Node.js、Python、.NET、数据库、Web 服务器、消息传递系统
→ 有关版本合规性检查,请参阅 references/inventory-discovery.md
5. 通过端口发现服务
将监听端口映射到服务,用于安全和资产清点。
smartscapeNodes "PROCESS"
| fieldsAdd process.listen_ports, dt.process_group.detected_name
| filter isNotNull(process.listen_ports) and arraySize(process.listen_ports) > 0
| expand listen_port = process.listen_ports
| summarize process_count = count(), by: {listen_port, dt.process_group.detected_name}
| sort toLong(listen_port) asc
| limit 50
常见端口: 80(HTTP)、443(HTTPS)、22(SSH)、3306(MySQL)、5432(PostgreSQL)
→ 如需全面的端口映射,请参阅 references/inventory-discovery.md
6. 容器和 Kubernetes 监控
跟踪容器分布和 K8s 工作负载类型。
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 desc
工作负载类型: deployment、daemonset、statefulset、job、cronjob
注意: smartscape 中不提供容器映像名称/版本。
→ 如需跟踪 K8s 版本,请参阅 references/container-monitoring.md
→ 如需了解容器生命周期,请参阅 references/container-monitoring.md
7. 成本归属和费用分摊
按成本中心计算基础设施成本。
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
→ 如需跟踪产品级成本,请参阅 references/inventory-discovery.md
8. 基础设施运行状况关联分析
关联主机和进程指标,以进行跨层分析。
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) desc
运行状况评分: 任何资源利用率超过 90% 即为严重,超过 80% 即为警告
→ 如需检测多资源饱和情况,请参阅 references/host-metrics.md
9. OneAgent 资产清点
按 OneAgent 监控模式、版本或云区域统计并列出主机。
ONEAGENT 实体: OneAgent 是独立的 smartscape 实体类型(smartscapeNodes "ONEAGENT")。通过从 HOST 沿 monitors 边向后遍历来访问它(该边的方向为 ONEAGENT → HOST,因此 HOST→ONEAGENT 的 direction 为 backward)。
ONEAGENT 关键字段:
dt.agent.monitoring_mode— 监控覆盖级别:FULL_STACK/INFRASTRUCTURE/DISCOVERYdt.agent.module.version— 已安装的版本字符串,例如1.347.0.20260809-172428
按监控模式统计:
smartscapeNodes "HOST"
| traverse edgeTypes: {monitors}, targetTypes: {ONEAGENT}, direction: backward
| fieldsAdd oa_mode = `dt.agent.monitoring_mode`
| summarize host_count = count(), by: {oa_mode}
| sort host_count desc
按 Agent 版本统计:
smartscapeNodes "HOST"
| traverse edgeTypes: {monitors}, targetTypes: {ONEAGENT}, direction: backward
| fieldsAdd oa_version = `dt.agent.module.version`
| summarize host_count = count(), by: {oa_version}
| sort host_count desc
组合统计:模式 + 版本(用于规划升级):
smartscapeNodes "HOST"
| traverse edgeTypes: {monitors}, targetTypes: {ONEAGENT}, direction: backward
| fieldsAdd oa_mode = `dt.agent.monitoring_mode`, oa_version = `dt.agent.module.version`
| summarize host_count = count(), by: {oa_mode, oa_version}
| sort host_count desc
监控模式: FULL_STACK(完整代码级监控 + 基础设施)、INFRASTRUCTURE(仅基础设施指标,不含代码级监控)、DISCOVERY(拓扑发现和基本主机监控)
→ 如需按模式/版本列出主机,请参阅 references/inventory-discovery.md
构建响应
当用户请求检索数据或编写 DQL 查询(例如,“显示 CPU 排名前列的主机”)时,请在响应中同时提供 DQL 查询和结果。用户希望查看并复用查询——查询本身就是交付内容,而不仅仅是获取结果的手段。
当用户请求分析(异常检测、预测、季节性分析)时,分析结果才是交付内容。请重点清晰地呈现发现:
- 优先呈现指标层面的发现,而非数据收集产物。如果分析工具同时报告了数据缺失和实际异常,应先介绍用户所关注的指标表现,并仅将数据缺失作为补充说明。
- 包含主机名称(而不只是 ID),使用
getNodeName(dt.smartscape.host)或get-entity-name工具。 - 说明分析的时间范围以及所使用的工具/参数。
分析工作流
主机指标查询通常是分析工具(异常检测、预测、季节性分析)的输入。本技能用于构建正确的 DQL 查询;实际分析由专用工具执行。
异常检测与模式分析
当用户询问主机指标中的“异常行为”“异常”“峰值”或“突然变化”时,工作流如下:
- 构造时间序列查询,使用本技能中的模式
- 将查询传递给合适的分析工具(异常检测器、新颖性检测)
如何选择检测器:
adaptive-anomaly-detector— 当用户询问幅度时使用,例如:“峰值”“突变”“高于正常值的数值”“突然跃升”。它回答“此指标是否越过了意外阈值?”,并报告告警持续时间和峰值。timeseries-novelty-detection— 当用户询问行为变化时使用,例如:“异常模式”“发生了变化”“趋势”“新行为”。它回答“信号的形态是否发生了变化?”,但不表示越过了特定阈值。
异常结果的响应格式:除了时间戳和数值,还要包含主机名称(通过 getNodeName(dt.smartscape.host) 或 get-entity-name 解析)和主机实体 ID。单独提供实体 ID 对用户来说难以理解;单独提供名称则无法支持后续查询。
新颖性类型选择规则:使用新颖性检测时,默认仅将 analysisNoveltyType 设置为 [SPIKE, CHANGE_IN_VALUES, TREND_IN_VALUES]。除非用户明确询问数据缺口或监控覆盖情况,否则排除 GAP_WITH_MISSING_VALUES 和 CHANGE_IN_MISSING_VALUES。数据缺口属于基础设施问题,并非指标行为异常——用户询问 CPU 或内存模式时报告这些问题是不正确的。
分析工具的查询应使用简单的 timeseries 格式,包含单个聚合指标和适当的时间范围:
timeseries avg(dt.host.cpu.idle), by: {dt.smartscape.host}
timeseries avg(dt.host.memory.usage), by: {dt.smartscape.host}
避免添加会减少数据量的筛选条件或字段转换——分析工具使用完整的时间序列数据时效果最佳。
预测
当用户询问主机指标的“预测”“预报”或“估算未来值”时:
- 构造时间序列查询,并提供充足的历史数据(例如,短期预测使用 7d,较长期预测使用 30d)
- 将查询传递给预测工具,并指定所需的预测范围
预测范围(向前预测多远)与历史窗口(模型使用多少过去数据进行训练)彼此独立。“预测接下来 2 小时”这样的请求将预测范围设为 2h——但并未说明回溯时长。无论预测范围多短,都始终至少使用 7 天的历史数据。训练数据点过少会导致预测模型失败,并回退到原始历史值。
timeseries avg(dt.host.cpu.usage), by: {dt.smartscape.host}
季节性检测
当用户询问“季节性”“每周模式”或“重复行为”时:
- 使用较长的时间范围(每周至少 14d,每月至少 30d)
- 传递给季节性基线异常检测器
**季节性分析的响应格式:**呈现结果时,请包含:
- 是否检测到季节性异常(是/否)
- 使用的分析时间范围和参数
- 对每台受影响的主机:主机名称(而非仅提供 ID)、违规时间戳、违规次数、基线值与实际值,以及上下限
- 如果涉及多台主机,按主机整理结果
范围边界——服务级指标与主机级指标
本技能仅涵盖主机和进程基础设施指标。如果用户询问服务级指标(请求率、响应时间、错误率、每分钟服务调用次数、吞吐量),请改用 dt-obs-services——即使问题涉及这些指标的预测或异常检测。
以下问题应转到 dt-obs-services:“每分钟服务调用次数”“请求率”“按服务划分的响应时间”“按端点划分的错误率”“服务吞吐量预测”。
常见查询模式
模式 1:Smartscape 发现
使用 smartscapeNodes 发现实体并对其分类。
smartscapeNodes "HOST"
| fieldsAdd <attributes>
| filter <conditions>
| summarize <aggregations>
模式 2:时间序列性能
使用 timeseries 分析随时间变化的指标。
timeseries metric = avg(dt.host.<metric>), by: {dt.smartscape.host}
| fieldsAdd <calculations>
| filter <thresholds>
模式 3:跨层关联
关联主机和进程指标。
timeseries {
host_cpu = avg(dt.host.cpu.usage),
process_cpu = avg(dt.process.cpu.usage)
}, by: {dt.smartscape.host, dt.smartscape.process}
模式 4:通过查找丰富实体信息
使用实体属性丰富数据。lookup 之后,使用 lookup. 前缀引用字段。
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 / 1024
标签和元数据
重要说明
- 通用
tags字段不会在 smartscape 查询中填充 - 使用特定标签字段:
tags:azure[*]、tags:environment - 使用自定义元数据:
host.custom.metadata[*]
可用标签
- Azure 标签:
tags:azure[dt_owner_team]、tags:azure[dt_cloudcost_capability] - 环境:
tags:environment - 自定义元数据:
host.custom.metadata[OperatorVersion]、host.custom.metadata[Cluster] - 成本:
dt.cost.costcenter、dt.cost.product
→ 完整的标签参考请参阅 references/inventory-discovery.md
云平台特定属性
AWS
cloud.provider == "aws"aws.region、aws.availability_zone、aws.account.idaws.resource.id、aws.resource.nameaws.state(running、stopped、terminated)
Azure
cloud.provider == "azure"azure.location、azure.subscription、azure.resource.groupazure.status、azure.provisioning_stateazure.resource.sku.name(VM 大小)
GCP
cloud.provider == "gcp"gcp.region、gcp.zone、gcp.locationgcp.project.id(注意:有两个点)gcp.resource.type(例如gce_instance)、gcp.asset.type(例如compute.googleapis.com/Instance)
Kubernetes
k8s.cluster.name、k8s.cluster.uidk8s.namespace.name、k8s.node.name、k8s.pod.namek8s.workload.name、k8s.workload.kind
→ 多云分析请参阅 references/inventory-discovery.md
最佳实践
- 延迟使用百分位数(p95、p99);限制使用
max();趋势使用avg() - 设置多级阈值(警告 80%,严重 90%)
- 在管道前段进行筛选;使用
| limit N限制结果 - 丰富数据(lookup)之前先聚合
- 使用
getNodeName(dt.smartscape.host)获取易读的主机名称;使用getNodeName(dt.smartscape.process)获取进程名称 - 将字节转换为 GB:
/ 1024 / 1024 / 1024;使用round(value, decimals: 1)进行舍入
时间窗口: 实时:5-15 分钟 | 趋势:1-7 天 | 容量规划:30-90 天
限制
dt.host.cpu.iowait仅在 Linux 上可用- 通用
tags字段不会在 smartscape 中填充(请使用特定标签命名空间) - smartscape 中没有容器映像名称
故障排除
| 问题 | 原因 | 解决方案 |
|---|---|---|
smartscapeNodes "HOST" 未返回主机 | 缺少时间范围,或未部署 OneAgent | 确认已安装 OneAgent;在查询中添加时间范围 |
tags 字段始终为空 | 通用 tags 未在 smartscape 中填充 | 使用特定标签命名空间:tags:azure[*]、tags:environment、dt.cost.costcenter |
| 以字节为单位的内存值难以读取 | 原始指标单位为字节 | 除以 1024 / 1024 / 1024,并使用 round(value, decimals: 1) |
dt.host.cpu.iowait 未返回数据 | 该指标仅适用于 Linux | 检查 os.type;Windows、AIX、Solaris 上无法使用 iowait |
| 缺少容器映像名称 | smartscape 中不可用 | 使用 k8s.object 解析映像详情;请参阅 dt-obs-kubernetes 技能 |
process.software_technologies 为空 | 未对进程进行深度代码级监控 | 确认已为进程组启用 OneAgent 深度监控 |
dt.agent.monitoring_mode 始终为 null | 字段名称使用下划线,而不是点 | 使用 dt.agent.monitoring_mode;dt.agent.monitoring.mode(点号)始终返回 null |
gcp.project.id 始终为 null | 使用了错误的字段名称 | GCP 项目字段使用两个点:gcp.project.id,而不是下划线;gcp.project_id 始终返回 null |
何时加载参考文件
此技能采用渐进式披露。80% 的使用场景可从此处开始。需要详细规范时,再加载参考文件。
以下情况请加载 host-metrics.md:
- 分析 CPU 组件细分(用户态、系统态、iowait、steal)
- 调查内存压力和交换空间使用情况
- 排查磁盘 I/O 延迟
- 诊断网络数据包丢失或错误
以下情况请加载 process-monitoring.md:
- 分析进程级 I/O 模式
- 调查 TCP 连接质量
- 检测资源耗尽(文件描述符、线程)
- 跟踪 GC 暂停时间
以下情况请加载 container-monitoring.md:
- 分析容器生命周期和变动情况
- 跟踪 Kubernetes 版本分布
- 管理 OneAgent operator 版本
- 规划 K8s 集群升级
以下情况请加载 inventory-discovery.md:
- 通过端口发现执行安全审计
- 实施成本归属和成本分摊
- 验证数据质量和元数据完整性
- 管理多云基础设施
- 按 OneAgent 模式/版本列出或筛选主机
参考文件
- host-metrics.md - 主机 CPU、内存、磁盘和网络监控详解
- process-monitoring.md - 进程级 CPU、内存、I/O 和网络分析
- container-monitoring.md - 容器清单、Kubernetes 版本和 operator 管理
- inventory-discovery.md - 主机/进程发现、技术清单、成本归属和数据质量