mcpField
D
dt-obs-hosts

dt-obs-hosts

github.com/dynatrace云与 DevOps1692.6k 次安装今天更新
代码仓库

关于 dt-obs-hosts

dt-obs-hosts 是用于监控和管理主机及进程基础设施的 Skill,通过 Dynatrace DQL 查询资源指标、技术清单和成本信息。它也涵盖 OneAgent 清单、容器与 Kubernetes 监控,以及面向分析工具的时序查询准备。

主要功能

  1. 01盘点主机、操作系统和云信息
  2. 02监控主机与进程资源使用情况
  3. 03发现技术栈、版本和监听端口
  4. 04分析成本归属与元数据完整性
  5. 05查询 OneAgent 模式和版本

适用场景

  1. 01定位 CPU 或内存使用率较高的主机与进程
  2. 02识别技术版本并规划升级
  3. 03按成本中心汇总基础设施资源
  4. 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.md
host-metrics.md
inventory-discovery.md
process-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 - 主机磁盘卷
指标类别
  1. 主机指标 - dt.host.cpu.*、dt.host.memory.*、dt.host.disk.*、dt.host.net.*
  2. 进程指标 - dt.process.cpu.*、dt.process.memory.*、dt.process.io.*、dt.process.network.*
  3. 清单 - 操作系统类型、云服务提供商、技术栈、版本
  4. 成本 - dt.cost.costcenter、dt.cost.product
  5. 质量 - 元数据完整性、版本合规性
警报阈值
  • **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 / DISCOVERY
  • dt.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 查询;实际分析由专用工具执行。

异常检测与模式分析

当用户询问主机指标中的“异常行为”“异常”“峰值”或“突然变化”时,工作流如下:

  1. 构造时间序列查询,使用本技能中的模式
  2. 将查询传递给合适的分析工具(异常检测器、新颖性检测)

如何选择检测器:

  • 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}

避免添加会减少数据量的筛选条件或字段转换——分析工具使用完整的时间序列数据时效果最佳。

预测

当用户询问主机指标的“预测”“预报”或“估算未来值”时:

  1. 构造时间序列查询,并提供充足的历史数据(例如,短期预测使用 7d,较长期预测使用 30d)
  2. 将查询传递给预测工具,并指定所需的预测范围

预测范围(向前预测多远)与历史窗口(模型使用多少过去数据进行训练)彼此独立。“预测接下来 2 小时”这样的请求将预测范围设为 2h——但并未说明回溯时长。无论预测范围多短,都始终至少使用 7 天的历史数据。训练数据点过少会导致预测模型失败,并回退到原始历史值。

timeseries avg(dt.host.cpu.usage), by: {dt.smartscape.host}
季节性检测

当用户询问“季节性”“每周模式”或“重复行为”时:

  1. 使用较长的时间范围(每周至少 14d,每月至少 30d)
  2. 传递给季节性基线异常检测器

**季节性分析的响应格式:**呈现结果时,请包含:

  • 是否检测到季节性异常(是/否)
  • 使用的分析时间范围和参数
  • 对每台受影响的主机:主机名称(而非仅提供 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.id
  • aws.resource.id、aws.resource.name
  • aws.state(running、stopped、terminated)
Azure
  • cloud.provider == "azure"
  • azure.location、azure.subscription、azure.resource.group
  • azure.status、azure.provisioning_state
  • azure.resource.sku.name(VM 大小)
GCP
  • cloud.provider == "gcp"
  • gcp.region、gcp.zone、gcp.location
  • gcp.project.id(注意:有两个点)
  • gcp.resource.type(例如 gce_instance)、gcp.asset.type(例如 compute.googleapis.com/Instance)
Kubernetes
  • k8s.cluster.name、k8s.cluster.uid
  • k8s.namespace.name、k8s.node.name、k8s.pod.name
  • k8s.workload.name、k8s.workload.kind

→ 多云分析请参阅 references/inventory-discovery.md


最佳实践

  1. 延迟使用百分位数(p95、p99);限制使用 max();趋势使用 avg()
  2. 设置多级阈值(警告 80%,严重 90%)
  3. 在管道前段进行筛选;使用 | limit N 限制结果
  4. 丰富数据(lookup)之前先聚合
  5. 使用 getNodeName(dt.smartscape.host) 获取易读的主机名称;使用 getNodeName(dt.smartscape.process) 获取进程名称
  6. 将字节转换为 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 模式/版本列出或筛选主机

参考文件


评论

支持 Markdown