Application Services Skill
Monitor application service performance, health, and runtime-specific metrics using DQL.
Core Capabilities
1. Service Performance (RED Metrics)
Monitor service Rate, Errors, Duration using metrics-based timeseries queries.
Key Metrics:
dt.service.request.response_time - Response time (microseconds)
dt.service.request.count - Request count
dt.service.request.failure_count - Failed request count
Common Use Cases:
- Response time monitoring (avg, p50, p95, p99)
- Error rate tracking and spike detection
- Traffic analysis (throughput, peaks, growth)
- Performance degradation detection
- Multi-cluster comparison
Quick Example:
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[]
→ For detailed queries: See references/service-metrics.md
2. Advanced Service Analysis
Span-based queries for complex scenarios requiring flexible filtering and custom aggregations.
Use Cases:
- SLA compliance tracking with custom thresholds
- Service health scoring (multi-dimensional)
- Operation/endpoint-level performance analysis
- Custom error classification
- Failure pattern detection with error details
Quick Example:
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
→ For detailed queries: See references/service-metrics.md
3. Service Messaging Metrics
Monitor message-based service communication (queues, topics).
Key Metrics:
dt.service.messaging.publish.count - Messages sent to queues or topics
dt.service.messaging.receive.count - Messages received from queues or topics
dt.service.messaging.process.count - Messages successfully processed
dt.service.messaging.process.failure_count - Messages that failed processing
Use Cases:
- Message throughput monitoring (publish/receive rates)
- Message processing failure tracking
- Queue/topic health analysis
- Consumer lag detection (publish vs receive rate comparison)
Quick Example:
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}
→ For detailed queries: See references/service-metrics.md
4. Service Mesh Monitoring
Monitor service mesh ingress performance and overhead.
Key Metrics:
dt.service.request.service_mesh.response_time - Mesh response time (microseconds)
dt.service.request.service_mesh.count - Mesh request count
dt.service.request.service_mesh.failure_count - Mesh failure count
Use Cases:
- Mesh vs direct performance comparison
- Mesh overhead calculation
- Mesh failure analysis
- gRPC traffic monitoring
- Multi-cluster mesh performance
Quick Example:
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
→ For detailed queries: See references/service-metrics.md
5. Runtime-Specific Monitoring
Technology-specific runtime performance and resource usage metrics.
Java/JVM - references/java.md
- Memory: heap, pools, metaspace
- GC: impact, suspension, frequency, pause time
- Threads: count monitoring, leak detection
- Classes: loading, unloading, growth
Node.js - references/nodejs.md
- Event loop: utilization, active handles
- V8 heap: memory used, total
- GC: collection time, suspension
- Process: RSS memory
.NET CLR - references/dotnet.md
- Memory: consumption by generation
- GC: collection count, suspension time
- Thread pool: threads, queued work
- JIT: compilation time
Python - references/python.md
- Threads: active thread count
- Heap: allocated blocks
- GC: collection by generation, pause time
- Objects: collected, uncollectable
PHP - references/php.md
- OPcache: hit ratio, memory, restarts
- GC: effectiveness, duration
- JIT: buffer usage
- Interned strings: usage, buffer
Go - references/go.md
- Goroutines: count, leak detection
- GC: suspension, collection time
- Memory: heap by state, committed
- Scheduler: worker threads, queue size
- CGo: call frequency
When to Use This Skill
✅ Use for:
- Monitoring service performance (response time, errors, traffic)
- Calculating SLA compliance
- Analyzing service mesh performance
- Monitoring messaging throughput and processing failures
- Troubleshooting runtime-specific issues (GC, memory, threads)
- Multi-cluster service comparison
- Operation/endpoint-level analysis
❌ Don't use for:
- Infrastructure metrics (use infrastructure skills)
- Log analysis (use logs skills)
- Distributed tracing workflows (use traces/spans skills)
- Database performance (use database skills)
- Product documentation or how-to configuration questions → use
ask-dynatrace-docs
Agent Instructions
Act First, Refine Later
When a user asks for analysis — threshold checks, anomaly detection, performance
comparisons — proceed immediately with sensible defaults. Do not ask the user
for parameter values you can reasonably assume.
Why this matters: analysis tools (e.g., static-threshold-analyzer) require specific
inputs like threshold values and service scope. The user expects results, not a
parameter interview. Pick reasonable defaults, state them clearly in the response,
and let the user refine.
Default values when not specified:
| Parameter |
Default |
Rationale |
| Response time threshold |
1000 ms (= 1,000,000 µs in the metric's base unit) |
Common SLA boundary |
| Service scope |
All services |
Show the most relevant violations |
| Timeframe |
From the request, or last 30 min for threshold checks, 2h for general analysis |
Matches typical operational windows |
Example: threshold violation request
- Use
create-dql to build a timeseries query for avg(dt.service.request.response_time) grouped by dt.smartscape.service
- Pass the query to
static-threshold-analyzer with threshold = 1000000 (µs), alertCondition = ABOVE
- Resolve entity IDs to names using
get-entity-name
- Present violations with service names, timestamps, values, and duration
Reading user phrasing: Phrases like "the fixed threshold", "a threshold", or "the limit"
name the type of analysis — static threshold check — not a specific number the user expects
you to already know. "Fixed" distinguishes a static cutoff from a dynamic or seasonal baseline.
When you see these phrases, apply the 1000 ms default from the table above and present
results — the user can then refine if the default doesn't match their intent.
Scope Boundary
This skill covers service performance metrics and runtime monitoring only. If the
user asks a product documentation or configuration question (e.g., "How do I add custom
sensors?", "How do I configure service detection?"), use ask-dynatrace-docs instead —
this skill does not contain configuration how-tos.
Understanding User Intent
Map user questions to capabilities:
| User Request |
Use Capability |
Key Files |
| "service performance", "response time", "error rate" |
Service Performance (RED) |
service-metrics.md |
| "SLA tracking", "health scoring" |
Advanced Service Analysis |
service-metrics.md |
| "service mesh", "Istio", "Linkerd", "mesh overhead" |
Service Mesh Monitoring |
service-metrics.md |
| "messaging", "queue", "topic", "publish", "consumer" |
Service Messaging Metrics |
service-metrics.md |
| "JVM GC", "Java memory", "heap" |
Runtime-Specific (Java) |
java.md |
| "Node.js event loop", "V8 heap" |
Runtime-Specific (Node.js) |
nodejs.md |
| ".NET CLR", "GC generation" |
Runtime-Specific (.NET) |
dotnet.md |
| "Python GC", "thread count" |
Runtime-Specific (Python) |
python.md |
| "OPcache", "PHP GC" |
Runtime-Specific (PHP) |
php.md |
| "goroutines", "Go GC", "scheduler" |
Runtime-Specific (Go) |
go.md |
Query Construction Patterns
1. Metrics-based (timeseries)
- Use for: Standard monitoring, dashboards, alerting
- Pattern:
timeseries <metric> = <aggregation>(<metric_name>), by: {dimensions}
- Files: service-metrics.md, all runtime-specific files
2. Span-based (fetch spans)
- Use for: Complex filtering, custom logic, detailed analysis
- Pattern:
fetch spans | filter request.is_root_span == true | fieldsAdd ... | summarize ...
- Files: service-metrics.md (Advanced Service Analysis section)
3. Comparison queries
- Use
append for baseline comparison
- Use
shift: -15m for time-shifted baselines
- Example: Performance degradation detection
Response Construction Guidelines
Always include:
- Metric name(s) - Clear metric identifiers
- Aggregation - How data is aggregated (avg, sum, percentile)
- Grouping - Dimensions used (
dt.service.name, k8s.workload.name, etc.)
- Unit conversion - Convert microseconds to milliseconds where appropriate
- Filtering - Relevant thresholds or conditions
When referencing runtime-specific content:
- Check user's technology stack first
- Provide only relevant runtime queries (don't overwhelm with all 6 runtimes)
- Explain runtime-specific metrics (e.g., "OPcache hit ratio" measures PHP opcode cache efficiency)
Common Workflows
Workflow: Service Health Check
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
Workflow: SLA Monitoring
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
Workflow: Service Mesh Analysis
1. Check mesh response time
2. Compare mesh vs direct performance
3. Calculate mesh overhead
4. Analyze mesh failure rates
Workflow: Runtime Troubleshooting
- Identify technology stack → Load runtime-specific reference
- Check memory/GC metrics → threads/goroutines → runtime features
Troubleshooting
| Problem |
Cause |
Solution |
| Response time values look too large |
Metric is in microseconds |
Divide by 1000 to convert to milliseconds |
| No data for service mesh metrics |
Service mesh not configured |
Verify mesh sidecar injection is enabled |
| Runtime metrics missing |
Wrong technology or no OneAgent |
Confirm the runtime is supported and OneAgent is active |
dt.smartscape.service returns SmartscapeId, not name |
Need entity name resolution |
Use getNodeName(dt.smartscape.service) |
| Error rate always zero |
Using wrong failure metric |
Use dt.service.request.failure_count, not custom fields |
References
Core Service Monitoring:
- references/service-metrics.md - Complete RED metrics, SLA tracking, service mesh queries
Runtime-Specific Monitoring:
- references/java.md - Java/JVM monitoring
- references/nodejs.md - Node.js monitoring
- references/dotnet.md - .NET CLR monitoring
- references/python.md - Python monitoring
- references/php.md - PHP monitoring
- references/go.md - Go runtime monitoring
1---2name: dt-obs-services3description: Service performance monitoring with RED metrics (Rate, Errors, Duration) and runtime-specific telemetry for Java, .NET, Node.js, Python, PHP, and Go. Use when analyzing service health, SLA compliance, or runtime issues. Trigger: "service response time", "error rate", "throughput", "SLA compliance", "service mesh overhead", "JVM GC", "Java heap", "Node.js event loop", ".NET CLR", "Python threads", "PHP OPcache", "Go goroutines", "service performance", "p95 latency", "request failures", "database response time by name". Do NOT use for explaining existing queries, product documentation questions, infrastructure metrics (use dt-obs-hosts), log analysis (use dt-obs-logs), or distributed tracing workflows (use dt-obs-tracing).4license: Apache-2.05---67# Application Services Skill89Monitor application service performance, health, and runtime-specific metrics using DQL.1011---1213## Core Capabilities1415### 1. Service Performance (RED Metrics)1617Monitor service **Rate, Errors, Duration** using metrics-based timeseries queries.1819**Key Metrics:**20- `dt.service.request.response_time` - Response time (microseconds)21- `dt.service.request.count` - Request count22- `dt.service.request.failure_count` - Failed request count2324**Common Use Cases:**25- Response time monitoring (avg, p50, p95, p99)26- Error rate tracking and spike detection27- Traffic analysis (throughput, peaks, growth)28- Performance degradation detection29- Multi-cluster comparison3031**Quick Example:**32```dql33timeseries {34 p95 = percentile(dt.service.request.response_time, 95),35 total_requests = sum(dt.service.request.count),36 failures = sum(dt.service.request.failure_count)37}, by: {dt.service.name}38| fieldsAdd p95_ms = p95[] / 1000, error_rate_pct = (failures[] * 100.0) / total_requests[]39```4041→ **For detailed queries:** See [references/service-metrics.md](references/service-metrics.md)4243### 2. Advanced Service Analysis4445Span-based queries for complex scenarios requiring flexible filtering and custom aggregations.4647**Use Cases:**48- SLA compliance tracking with custom thresholds49- Service health scoring (multi-dimensional)50- Operation/endpoint-level performance analysis51- Custom error classification52- Failure pattern detection with error details5354**Quick Example:**55```dql56fetch spans, from: now() - 1h | filter request.is_root_span == true57| fieldsAdd meets_sla = if(request.is_failed == false AND duration < 3s, 1, else: 0)58| summarize total = count(), sla_compliant = sum(meets_sla), by: {dt.service.name}59| fieldsAdd sla_compliance_pct = (sla_compliant * 100.0) / total60```6162→ **For detailed queries:** See [references/service-metrics.md](references/service-metrics.md)6364### 3. Service Messaging Metrics6566Monitor message-based service communication (queues, topics).6768**Key Metrics:**69- `dt.service.messaging.publish.count` - Messages sent to queues or topics70- `dt.service.messaging.receive.count` - Messages received from queues or topics71- `dt.service.messaging.process.count` - Messages successfully processed72- `dt.service.messaging.process.failure_count` - Messages that failed processing7374**Use Cases:**75- Message throughput monitoring (publish/receive rates)76- Message processing failure tracking77- Queue/topic health analysis78- Consumer lag detection (publish vs receive rate comparison)7980**Quick Example:**81```dql82timeseries {83 published = sum(dt.service.messaging.publish.count),84 received = sum(dt.service.messaging.receive.count),85 processed = sum(dt.service.messaging.process.count),86 failed = sum(dt.service.messaging.process.failure_count)87}, by: {dt.service.name}88```8990→ **For detailed queries:** See [references/service-metrics.md](references/service-metrics.md)9192### 4. Service Mesh Monitoring9394Monitor service mesh ingress performance and overhead.9596**Key Metrics:**97- `dt.service.request.service_mesh.response_time` - Mesh response time (microseconds)98- `dt.service.request.service_mesh.count` - Mesh request count99- `dt.service.request.service_mesh.failure_count` - Mesh failure count100101**Use Cases:**102- Mesh vs direct performance comparison103- Mesh overhead calculation104- Mesh failure analysis105- gRPC traffic monitoring106- Multi-cluster mesh performance107108**Quick Example:**109```dql110timeseries {111 direct_p95 = percentile(dt.service.request.response_time, 95),112 mesh_p95 = percentile(dt.service.request.service_mesh.response_time, 95)113}, by: {dt.service.name}114| fieldsAdd mesh_overhead_ms = (mesh_p95[] - direct_p95[]) / 1000115```116117→ **For detailed queries:** See [references/service-metrics.md](references/service-metrics.md)118119### 5. Runtime-Specific Monitoring120121Technology-specific runtime performance and resource usage metrics.122123**Java/JVM** - [references/java.md](references/java.md)124- Memory: heap, pools, metaspace125- GC: impact, suspension, frequency, pause time126- Threads: count monitoring, leak detection127- Classes: loading, unloading, growth128129**Node.js** - [references/nodejs.md](references/nodejs.md)130- Event loop: utilization, active handles131- V8 heap: memory used, total132- GC: collection time, suspension133- Process: RSS memory134135**.NET CLR** - [references/dotnet.md](references/dotnet.md)136- Memory: consumption by generation137- GC: collection count, suspension time138- Thread pool: threads, queued work139- JIT: compilation time140141**Python** - [references/python.md](references/python.md)142- Threads: active thread count143- Heap: allocated blocks144- GC: collection by generation, pause time145- Objects: collected, uncollectable146147**PHP** - [references/php.md](references/php.md)148- OPcache: hit ratio, memory, restarts149- GC: effectiveness, duration150- JIT: buffer usage151- Interned strings: usage, buffer152153**Go** - [references/go.md](references/go.md)154- Goroutines: count, leak detection155- GC: suspension, collection time156- Memory: heap by state, committed157- Scheduler: worker threads, queue size158- CGo: call frequency159160---161162## When to Use This Skill163164✅ **Use for:**165- Monitoring service performance (response time, errors, traffic)166- Calculating SLA compliance167- Analyzing service mesh performance168- Monitoring messaging throughput and processing failures169- Troubleshooting runtime-specific issues (GC, memory, threads)170- Multi-cluster service comparison171- Operation/endpoint-level analysis172173❌ **Don't use for:**174- Infrastructure metrics (use infrastructure skills)175- Log analysis (use logs skills)176- Distributed tracing workflows (use traces/spans skills)177- Database performance (use database skills)178- Product documentation or how-to configuration questions → use `ask-dynatrace-docs`179180---181182## Agent Instructions183184### Act First, Refine Later185186When a user asks for analysis — threshold checks, anomaly detection, performance187comparisons — **proceed immediately** with sensible defaults. Do not ask the user188for parameter values you can reasonably assume.189190Why this matters: analysis tools (e.g., `static-threshold-analyzer`) require specific191inputs like threshold values and service scope. The user expects results, not a192parameter interview. Pick reasonable defaults, state them clearly in the response,193and let the user refine.194195**Default values when not specified:**196197| Parameter | Default | Rationale |198|-----------|---------|-----------|199| Response time threshold | 1000 ms (= 1,000,000 µs in the metric's base unit) | Common SLA boundary |200| Service scope | All services | Show the most relevant violations |201| Timeframe | From the request, or last 30 min for threshold checks, 2h for general analysis | Matches typical operational windows |202203**Example: threshold violation request**2041. Use `create-dql` to build a timeseries query for `avg(dt.service.request.response_time)` grouped by `dt.smartscape.service`2052. Pass the query to `static-threshold-analyzer` with threshold = 1000000 (µs), alertCondition = ABOVE2063. Resolve entity IDs to names using `get-entity-name`2074. Present violations with service names, timestamps, values, and duration208209**Reading user phrasing:** Phrases like "the fixed threshold", "a threshold", or "the limit"210name the *type of analysis* — static threshold check — not a specific number the user expects211you to already know. "Fixed" distinguishes a static cutoff from a dynamic or seasonal baseline.212When you see these phrases, apply the 1000 ms default from the table above and present213results — the user can then refine if the default doesn't match their intent.214215### Scope Boundary216217This skill covers **service performance metrics and runtime monitoring only**. If the218user asks a product documentation or configuration question (e.g., "How do I add custom219sensors?", "How do I configure service detection?"), use `ask-dynatrace-docs` instead —220this skill does not contain configuration how-tos.221222### Understanding User Intent223224**Map user questions to capabilities:**225226| User Request | Use Capability | Key Files |227|--------------|----------------|-----------|228| "service performance", "response time", "error rate" | Service Performance (RED) | service-metrics.md |229| "SLA tracking", "health scoring" | Advanced Service Analysis | service-metrics.md |230| "service mesh", "Istio", "Linkerd", "mesh overhead" | Service Mesh Monitoring | service-metrics.md |231| "messaging", "queue", "topic", "publish", "consumer" | Service Messaging Metrics | service-metrics.md |232| "JVM GC", "Java memory", "heap" | Runtime-Specific (Java) | java.md |233| "Node.js event loop", "V8 heap" | Runtime-Specific (Node.js) | nodejs.md |234| ".NET CLR", "GC generation" | Runtime-Specific (.NET) | dotnet.md |235| "Python GC", "thread count" | Runtime-Specific (Python) | python.md |236| "OPcache", "PHP GC" | Runtime-Specific (PHP) | php.md |237| "goroutines", "Go GC", "scheduler" | Runtime-Specific (Go) | go.md |238239### Query Construction Patterns240241**1. Metrics-based (timeseries)**242- **Use for:** Standard monitoring, dashboards, alerting243- **Pattern:** `timeseries <metric> = <aggregation>(<metric_name>), by: {dimensions}`244- **Files:** service-metrics.md, all runtime-specific files245246**2. Span-based (fetch spans)**247- **Use for:** Complex filtering, custom logic, detailed analysis248- **Pattern:** `fetch spans | filter request.is_root_span == true | fieldsAdd ... | summarize ...`249- **Files:** service-metrics.md (Advanced Service Analysis section)250251**3. Comparison queries**252- Use `append` for baseline comparison253- Use `shift: -15m` for time-shifted baselines254- **Example:** Performance degradation detection255256### Response Construction Guidelines257258**Always include:**2591. **Metric name(s)** - Clear metric identifiers2602. **Aggregation** - How data is aggregated (avg, sum, percentile)2613. **Grouping** - Dimensions used (`dt.service.name`, `k8s.workload.name`, etc.)2624. **Unit conversion** - Convert microseconds to milliseconds where appropriate2635. **Filtering** - Relevant thresholds or conditions264265**When referencing runtime-specific content:**266- **Check** user's technology stack first267- **Provide** only relevant runtime queries (don't overwhelm with all 6 runtimes)268- **Explain** runtime-specific metrics (e.g., "OPcache hit ratio" measures PHP opcode cache efficiency)269270---271272## Common Workflows273274### Workflow: Service Health Check275```2761. Check response time (RED metrics)2772. Check error rate (RED metrics)2783. Check traffic patterns (RED metrics)2794. If runtime-specific issues suspected → Load runtime-specific reference280```281282### Workflow: SLA Monitoring283```2841. Define SLA criteria (e.g., < 3s response time AND < 1% error rate)2852. Use span-based query for custom SLA logic2863. Calculate compliance percentage2874. Filter non-compliant services288```289290### Workflow: Service Mesh Analysis291```2921. Check mesh response time2932. Compare mesh vs direct performance2943. Calculate mesh overhead2954. Analyze mesh failure rates296```297298### Workflow: Runtime Troubleshooting2991. Identify technology stack → Load runtime-specific reference3002. Check memory/GC metrics → threads/goroutines → runtime features301302---303304## Troubleshooting305306| Problem | Cause | Solution |307|---------|-------|----------|308| Response time values look too large | Metric is in microseconds | Divide by 1000 to convert to milliseconds |309| No data for service mesh metrics | Service mesh not configured | Verify mesh sidecar injection is enabled |310| Runtime metrics missing | Wrong technology or no OneAgent | Confirm the runtime is supported and OneAgent is active |311| `dt.smartscape.service` returns SmartscapeId, not name | Need entity name resolution | Use `getNodeName(dt.smartscape.service)` |312| Error rate always zero | Using wrong failure metric | Use `dt.service.request.failure_count`, not custom fields |313314---315316## References317318**Core Service Monitoring:**319- [references/service-metrics.md](references/service-metrics.md) - Complete RED metrics, SLA tracking, service mesh queries320321**Runtime-Specific Monitoring:**322- [references/java.md](references/java.md) - Java/JVM monitoring323- [references/nodejs.md](references/nodejs.md) - Node.js monitoring 324- [references/dotnet.md](references/dotnet.md) - .NET CLR monitoring325- [references/python.md](references/python.md) - Python monitoring326- [references/php.md](references/php.md) - PHP monitoring327- [references/go.md](references/go.md) - Go runtime monitoring