关于 dt-obs-services
使用 DQL 监控 Dynatrace 应用服务性能和运行时指标的技能,涵盖 RED 指标、基于 span 的分析、消息传递、服务网格及多种运行时指标。
主要功能
- 01跟踪响应时间、错误和流量
- 02使用 span 分析 SLA 合规性
- 03监控消息吞吐量与失败
- 04比较服务网格与直连性能
- 05检查运行时专属指标
适用场景
- 01检查服务健康状况和性能变化
- 02衡量自定义 SLA 合规性
- 03调查队列或主题的处理失败
- 04排查运行时内存、GC 或线程问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dynatrace/ dynatrace-for-ai --skill dt-obs-services安装后在 Claude Code 中输入/dt-obs-services确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/dotnet.mdgo.mdjava.mdnodejs.mdphp.mdpython.mdservice-metrics.md详细介绍
应用服务技能
使用 DQL 监控应用服务性能、健康状况和特定运行时指标。
核心功能
1. 服务性能(RED 指标)
使用基于指标的时间序列查询监控服务的速率(Rate)、错误(Errors)、耗时(Duration)。
关键指标:
dt.service.request.response_time- 响应时间(微秒)dt.service.request.count- 请求数dt.service.request.failure_count- 失败请求数
常见用例:
- 响应时间监控(avg、p50、p95、p99)
- 错误率跟踪与峰值检测
- 流量分析(吞吐量、峰值、增长)
- 性能下降检测
- 多集群对比
快速示例:
timeseries {
p95 = percentile(dt.service.request.response_time, 95),
total_requests = sum(dt.service.request.count),
failures = sum(dt.service.request.failure_count)
}, by: {dt.service.name}
| fieldsAdd p95_ms = p95[] / 1000, error_rate_pct = (failures[] * 100.0) / total_requests[]
→ **详细查询:**参见 references/service-metrics.md
2. 高级服务分析
针对需要灵活筛选和自定义聚合的复杂场景,使用基于 Span 的查询。
用例:
- 使用自定义阈值跟踪 SLA 合规情况
- 服务健康评分(多维度)
- 操作/端点级性能分析
- 自定义错误分类
- 根据错误详情检测故障模式
快速示例:
fetch spans, from: now() - 1h | filter request.is_root_span == true
| fieldsAdd meets_sla = if(request.is_failed == false AND duration < 3s, 1, else: 0)
| summarize total = count(), sla_compliant = sum(meets_sla), by: {dt.service.name}
| fieldsAdd sla_compliance_pct = (sla_compliant * 100.0) / total
→ **详细查询:**参见 references/service-metrics.md
3. 服务消息传递指标
监控基于消息的服务通信(队列、主题)。
关键指标:
dt.service.messaging.publish.count- 发送到队列或主题的消息数dt.service.messaging.receive.count- 从队列或主题接收的消息数dt.service.messaging.process.count- 成功处理的消息数dt.service.messaging.process.failure_count- 处理失败的消息数
用例:
- 消息吞吐量监控(发布/接收速率)
- 消息处理失败跟踪
- 队列/主题健康状况分析
- 消费者延迟检测(比较发布速率与接收速率)
快速示例:
timeseries {
published = sum(dt.service.messaging.publish.count),
received = sum(dt.service.messaging.receive.count),
processed = sum(dt.service.messaging.process.count),
failed = sum(dt.service.messaging.process.failure_count)
}, by: {dt.service.name}
→ **详细查询:**参见 references/service-metrics.md
4. 服务网格监控
监控服务网格入口性能和开销。
关键指标:
dt.service.request.service_mesh.response_time- 网格响应时间(微秒)dt.service.request.service_mesh.count- 网格请求数dt.service.request.service_mesh.failure_count- 网格失败数
用例:
- 网格与直连性能对比
- 网格开销计算
- 网格故障分析
- gRPC 流量监控
- 多集群网格性能
快速示例:
timeseries {
direct_p95 = percentile(dt.service.request.response_time, 95),
mesh_p95 = percentile(dt.service.request.service_mesh.response_time, 95)
}, by: {dt.service.name}
| fieldsAdd mesh_overhead_ms = (mesh_p95[] - direct_p95[]) / 1000
→ **详细查询:**参见 references/service-metrics.md
5. 特定运行时监控
针对特定技术的运行时性能和资源使用指标。
Java/JVM - references/java.md
- 内存:堆、内存池、元空间
- GC:影响、挂起、频率、暂停时间
- 线程:数量监控、泄漏检测
- 类:加载、卸载、增长
Node.js - references/nodejs.md
- 事件循环:利用率、活动句柄
- V8 堆:已用内存、总内存
- GC:回收时间、挂起
- 进程:RSS 内存
.NET CLR - references/dotnet.md
- 内存:按代统计的消耗
- GC:回收次数、挂起时间
- 线程池:线程、排队工作项
- JIT:编译时间
Python - references/python.md
- 线程:活动线程数
- 堆:已分配块
- GC:按代回收、暂停时间
- 对象:已回收、不可回收
PHP - references/php.md
- OPcache:命中率、内存、重启次数
- GC:有效性、持续时间
- JIT:缓冲区使用量
- 驻留字符串:使用量、缓冲区
Go - references/go.md
- Goroutine:数量、泄漏检测
- GC:挂起、回收时间
- 内存:按状态统计的堆内存、已提交内存
- 调度器:工作线程、队列大小
- CGo:调用频率
何时使用此技能
✅ 适用于:
- 监控服务性能(响应时间、错误、流量)
- 计算 SLA 合规性
- 分析服务网格性能
- 监控消息吞吐量和处理失败情况
- 排查特定运行时的问题(GC、内存、线程)
- 比较多集群服务
- 分析操作/端点级别的数据
❌ 不适用于:
- 基础设施指标(使用基础设施技能)
- 日志分析(使用日志技能)
- 分布式追踪工作流(使用追踪/Span 技能)
- 数据库性能(使用数据库技能)
- 产品文档或配置操作指南问题 → 使用
ask-dynatrace-docs
Agent 说明
先执行,再优化
当用户要求进行分析(阈值检查、异常检测、性能比较)时,立即使用合理的默认值开始操作。不要询问用户可以合理假设的参数值。
原因:分析工具(例如 static-threshold-analyzer)需要特定输入,例如阈值和服务范围。用户期待的是结果,而不是参数访谈。选择合理的默认值,在回复中明确说明,并让用户进一步调整。
未指定时的默认值:
| 参数 | 默认值 | 原因 |
|---|---|---|
| 响应时间阈值 | 1000 ms(= 指标的基本单位 1,000,000 µs) | 常见的 SLA 界限 |
| 服务范围 | 所有服务 | 显示最相关的违规情况 |
| 时间范围 | 根据请求确定;阈值检查默认为最近 30 min,一般分析默认为 2h | 符合典型的运维时间窗口 |
示例:阈值违规请求
- 使用
create-dql构建时间序列查询,按dt.smartscape.service分组查询avg(dt.service.request.response_time) - 将查询传递给
static-threshold-analyzer,设置 threshold = 1000000 (µs)、alertCondition = ABOVE - 使用
get-entity-name将实体 ID 解析为名称 - 列出违规情况,并提供服务名称、时间戳、数值和持续时间
理解用户措辞:“固定阈值”“某个阈值”或“限制”等说法指的是分析类型——静态阈值检查——而不是用户期望你已经知道的具体数值。“固定”用于区分静态界限与动态或季节性基线。看到这些说法时,使用上表中的 1000 ms 默认值并呈现结果——如果默认值不符合用户意图,用户可以进一步调整。
范围边界
此技能仅涵盖服务性能指标和运行时监控。如果用户询问产品文档或配置问题(例如“如何添加自定义传感器?”“如何配置服务检测?”),请改用 ask-dynatrace-docs——此技能不包含配置操作指南。
理解用户意图
将用户问题映射到相应功能:
| 用户请求 | 使用功能 | 关键文件 |
|---|---|---|
| “服务性能”“响应时间”“错误率” | 服务性能(RED) | service-metrics.md |
| “SLA 跟踪”“健康度评分” | 高级服务分析 | service-metrics.md |
| “服务网格”“Istio”“Linkerd”“网格开销” | 服务网格监控 | service-metrics.md |
| “消息传递”“队列”“主题”“发布”“消费者” | 服务消息指标 | service-metrics.md |
| “JVM GC”“Java 内存”“堆” | 特定运行时(Java) | java.md |
| “Node.js 事件循环”“V8 堆” | 特定运行时(Node.js) | nodejs.md |
| “.NET CLR”“GC 代” | 特定运行时(.NET) | dotnet.md |
| “Python GC”“线程数” | 特定运行时(Python) | python.md |
| “OPcache”“PHP GC” | 特定运行时(PHP) | php.md |
| “goroutine”“Go GC”“调度器” | 特定运行时(Go) | go.md |
查询构造模式
1. 基于指标(时间序列)
- 适用场景: 标准监控、仪表板、告警
- 模式:
timeseries <metric> = <aggregation>(<metric_name>), by: {dimensions} - 文件: service-metrics.md,以及所有特定运行时的文件
2. 基于 Span(获取 Span)
- 适用场景: 复杂筛选、自定义逻辑、详细分析
- 模式:
fetch spans | filter request.is_root_span == true | fieldsAdd ... | summarize ... - 文件: service-metrics.md(Advanced Service Analysis 部分)
3. 对比查询
- 使用
append进行基线对比 - 使用
shift: -15m设置时间偏移基线 - 示例: 检测性能下降
响应构造指南
始终包含:
- 指标名称 - 清晰的指标标识符
- 聚合方式 - 数据的聚合方式(avg、sum、percentile)
- 分组方式 - 使用的维度(
dt.service.name、k8s.workload.name等) - 单位转换 - 在适当情况下将微秒转换为毫秒
- 筛选条件 - 相关阈值或条件
引用特定运行时内容时:
- 先检查用户的技术栈
- 仅提供相关运行时的查询(不要一次列出全部 6 种运行时)
- 说明特定运行时的指标(例如,“OPcache 命中率”衡量 PHP 操作码缓存效率)
常见工作流
工作流:服务运行状况检查
1. Check response time (RED metrics)
2. Check error rate (RED metrics)
3. Check traffic patterns (RED metrics)
4. If runtime-specific issues suspected → Load runtime-specific reference
工作流:SLA 监控
1. Define SLA criteria (e.g., < 3s response time AND < 1% error rate)
2. Use span-based query for custom SLA logic
3. Calculate compliance percentage
4. Filter non-compliant services
工作流:服务网格分析
1. Check mesh response time
2. Compare mesh vs direct performance
3. Calculate mesh overhead
4. Analyze mesh failure rates
工作流:运行时故障排查
- 确定技术栈 → 加载特定运行时参考资料
- 检查内存/GC 指标 → 线程/协程 → 运行时特性
故障排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 响应时间数值看起来过大 | 指标单位为微秒 | 除以 1000,转换为毫秒 |
| 服务网格指标没有数据 | 未配置服务网格 | 确认已启用网格 Sidecar 注入 |
| 缺少运行时指标 | 技术不匹配或未安装 OneAgent | 确认运行时受支持且 OneAgent 正在运行 |
dt.smartscape.service 返回 SmartscapeId,而非名称 | 需要解析实体名称 | 使用 getNodeName(dt.smartscape.service) |
| 错误率始终为零 | 使用了错误的失败指标 | 使用 dt.service.request.failure_count,而非自定义字段 |
参考资料
核心服务监控:
- references/service-metrics.md - 完整的 RED 指标、SLA 跟踪、服务网格查询
特定运行时监控:
- references/java.md - Java/JVM 监控
- references/nodejs.md - Node.js 监控
- references/dotnet.md - .NET CLR 监控
- references/python.md - Python 监控
- references/php.md - PHP 监控
- references/go.md - Go 运行时监控