mcpField
D
dt-obs-services

dt-obs-services

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

关于 dt-obs-services

使用 DQL 监控 Dynatrace 应用服务性能和运行时指标的技能,涵盖 RED 指标、基于 span 的分析、消息传递、服务网格及多种运行时指标。

主要功能

  1. 01跟踪响应时间、错误和流量
  2. 02使用 span 分析 SLA 合规性
  3. 03监控消息吞吐量与失败
  4. 04比较服务网格与直连性能
  5. 05检查运行时专属指标

适用场景

  1. 01检查服务健康状况和性能变化
  2. 02衡量自定义 SLA 合规性
  3. 03调查队列或主题的处理失败
  4. 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.md
go.md
java.md
nodejs.md
php.md
python.md
service-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符合典型的运维时间窗口

示例:阈值违规请求

  1. 使用 create-dql 构建时间序列查询,按 dt.smartscape.service 分组查询 avg(dt.service.request.response_time)
  2. 将查询传递给 static-threshold-analyzer,设置 threshold = 1000000 (µs)、alertCondition = ABOVE
  3. 使用 get-entity-name 将实体 ID 解析为名称
  4. 列出违规情况,并提供服务名称、时间戳、数值和持续时间

理解用户措辞:“固定阈值”“某个阈值”或“限制”等说法指的是分析类型——静态阈值检查——而不是用户期望你已经知道的具体数值。“固定”用于区分静态界限与动态或季节性基线。看到这些说法时,使用上表中的 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 设置时间偏移基线
  • 示例: 检测性能下降
响应构造指南

始终包含:

  1. 指标名称 - 清晰的指标标识符
  2. 聚合方式 - 数据的聚合方式(avg、sum、percentile)
  3. 分组方式 - 使用的维度(dt.service.name、k8s.workload.name 等)
  4. 单位转换 - 在适当情况下将微秒转换为毫秒
  5. 筛选条件 - 相关阈值或条件

引用特定运行时内容时:

  • 先检查用户的技术栈
  • 仅提供相关运行时的查询(不要一次列出全部 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
工作流:运行时故障排查
  1. 确定技术栈 → 加载特定运行时参考资料
  2. 检查内存/GC 指标 → 线程/协程 → 运行时特性

故障排查

问题原因解决方案
响应时间数值看起来过大指标单位为微秒除以 1000,转换为毫秒
服务网格指标没有数据未配置服务网格确认已启用网格 Sidecar 注入
缺少运行时指标技术不匹配或未安装 OneAgent确认运行时受支持且 OneAgent 正在运行
dt.smartscape.service 返回 SmartscapeId,而非名称需要解析实体名称使用 getNodeName(dt.smartscape.service)
错误率始终为零使用了错误的失败指标使用 dt.service.request.failure_count,而非自定义字段

参考资料

核心服务监控:

特定运行时监控:

评论

支持 Markdown